cscope.files
gpsbabel
+gpsbabel-debug
gpsbabel.exe
gpsbabel.fo
gpsbabel.html
config.status
CHANGELOG
+
+coldsync
+pilot-link
* Jason Rust
* Jeff Kalikstein
* Jeremy Atherton
+* Jeremy Ehrhardt
* Jim Bensman
* Jochen Becker <jb@bepo.com>
* John Temples
+* Jon McClintock
* Josh McKee
* Justin Broughton <justinbr@earthlink.net>
* Kjeld Jensen
* Rick Richardson <rickr@mn.rr.com>
* Robert Shaw
* Scott Brynen <scott@brynen.com>
+* Sprok Bence
* Steve Chamberlin <steve.chamberlin@comcast.net>
* Sven Dovideit
* Tim Zickus
#OPTIMIZATION=-O $(EXTRA_OPTIMIZATION)
#DEBUGGING=-g $(EXTRA_DEBUGGING)
# add -DDEBUG_MEM to turn on memory allocation logging
-GBCFLAGS=$(EXTRA_CFLAGS) $(DEBUGGING) -I. -I@srcdir@/coldsync \
+GBCFLAGS=$(EXTRA_CFLAGS) $(DEBUGGING) -I. \
$(OPTIMIZATION) @CFLAGS@
LDFLAGS=$(EXTRA_LDFLAGS) @LDFLAGS@
PREFIX=@prefix@
tef_xml.o maggeo.o pathaway.o vitosmt.o gdb.o bcr.o coto.o \
ignrando.o stmwpp.o msroute.o cst.o nmn4.o mag_pdb.o compegps.o \
yahoo.o unicsv.o wfff_xml.o garmin_txt.o axim_gpb.o gpssim.o \
- wbt-200.o stmsdf.o gtrnctr.o dmtlog.o raymarine.o alan.o
+ wbt-200.o stmsdf.o gtrnctr.o dmtlog.o raymarine.o alan.o vitovtt.o \
+ ggv_log.o g7towin.o garmin_gpi.o
FILTERS=position.o radius.o duplicate.o arcdist.o polygon.o smplrout.o \
reverse_route.o sort.o stackfilter.o trackfilter.o discard.o \
# jeeps/gpsfmt.o jeeps/gpsinput.o jeeps/gpsproj.o
-COLDSYNC=coldsync/util.o coldsync/pdb.o
+@PALM_DB_CMT@PALM_DB=pdbfile.o
SHAPE=shapelib/shpopen.o shapelib/dbfopen.o
LIBOBJS = queue.o route.o waypt.o filter_vecs.o util.o vecs.o mkshort.o \
csv_util.o strptime.o grtcirc.o vmem.o util_crc.o xmlgeneric.o \
uuid.o formspec.o xmltag.o cet.o cet_util.o fatal.o rgbcolors.o \
- inifile.o garmin_fs.o gbsleep.o units.o @GBSER@ gbser.o \
+ xhtmlent.o inifile.o garmin_fs.o gbsleep.o units.o @GBSER@ gbser.o \
gbfile.o \
- $(COLDSYNC) $(GARMIN) $(JEEPS) $(SHAPE) @ZLIB@ $(FMTS) $(FILTERS)
+ $(PALM_DB) $(GARMIN) $(JEEPS) $(SHAPE) @ZLIB@ $(FMTS) $(FILTERS)
OBJS = main.o globals.o $(LIBOBJS) @FILEINFO@
.c.o:
#
# This will only work on UNIX-like substances.
#
-install: @INSTALL_DEBUG@
+install: @INSTALL_DEBUG@ gpsbabel$(EXEEXT)
@mkdir -p $(INSTALL_DIR)/bin
install gpsbabel $(INSTALL_DIR)/bin/
# file list for windows package
WINFILES = gpsbabel.exe mingw/libexpat.dll win32/GPSBabelGUI.exe win32/gui-2/README.gui \
- README* AUTHORS COPYING gpsbabel.html
+ README.contrib AUTHORS COPYING gpsbabel.html
#
# Do administrative-y things to the tree. Verify that everything is checked
# binutils, runtime, w32api, and gcc-core seem to be required.
#
+cross-configure:
+ CC=i386-mingw32-gcc LDFLAGS="-s" @srcdir@/configure --host=i386-pc-mingw32 --with-cet=all --with-expathdr=@srcdir@/mingw/include --with-libexpat=@srcdir@/mingw/lib
+
release-winbuild:
rm -fr /tmp/gpsbabel-$(VERSIOND)-cross
cp -a gpsbabel-$(VERSIOND) /tmp/gpsbabel-$(VERSIOND)-cross
axim_gpb.o: axim_gpb.c defs.h config.h queue.h gbtypes.h zlib/zlib.h \
zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h
bcr.o: bcr.c defs.h config.h queue.h gbtypes.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h cet_util.h inifile.h garmin_tables.h
+ gbfile.h cet.h cet_util.h inifile.h csv_util.h garmin_tables.h
brauniger_iq.o: brauniger_iq.c defs.h config.h queue.h gbtypes.h \
zlib/zlib.h zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h gbser.h
cet.o: cet.c defs.h config.h queue.h gbtypes.h zlib/zlib.h zlib/zconf.h \
gbfile.h cet.h cet_util.h inifile.h
cetus.o: cetus.c defs.h config.h queue.h gbtypes.h zlib/zlib.h \
- zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h coldsync/palm.h \
- coldsync/../gbtypes.h coldsync/pdb.h
+ zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h pdbfile.h
cet_util.o: cet_util.c defs.h config.h queue.h gbtypes.h zlib/zlib.h \
- zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h cet/iso_8859_1.h \
- cet/iso_8859_15.h cet/ansi_x3_4_1968.h cet/cp1252.h cet/iso_8859_2.h \
+ zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h cet/ansi_x3_4_1968.h \
+ cet/iso_8859_1.h cet/iso_8859_15.h cet/cp1252.h cet/iso_8859_2.h \
cet/cp1250.h cet/latin_greek_1.h cet/macintosh.h cet/cp1251.h \
cet/cp1253.h cet/cp1254.h cet/cp1255.h cet/cp1256.h cet/cp1257.h \
cet/ibm437.h cet/ibm850.h cet/ibm851.h cet/ibm852.h cet/ibm855.h \
jeeps/gpsmath.h jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h \
jeeps/gpsproj.h
copilot.o: copilot.c defs.h config.h queue.h gbtypes.h zlib/zlib.h \
- zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h coldsync/palm.h \
- coldsync/../gbtypes.h coldsync/pdb.h grtcirc.h
+ zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h grtcirc.h pdbfile.h
coto.o: coto.c defs.h config.h queue.h gbtypes.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h cet_util.h inifile.h csv_util.h coldsync/palm.h \
- coldsync/../gbtypes.h coldsync/pdb.h grtcirc.h
+ gbfile.h cet.h cet_util.h inifile.h csv_util.h grtcirc.h pdbfile.h
cst.o: cst.c defs.h config.h queue.h gbtypes.h zlib/zlib.h zlib/zconf.h \
gbfile.h cet.h cet_util.h inifile.h strptime.h
csv_util.o: csv_util.c defs.h config.h queue.h gbtypes.h zlib/zlib.h \
jeeps/gpsdevice.h jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h \
jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h \
jeeps/gpsmath.h jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h \
- jeeps/gpsproj.h
+ jeeps/gpsproj.h xmlgeneric.h
delgpl.o: delgpl.c defs.h config.h queue.h gbtypes.h zlib/zlib.h \
zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h
discard.o: discard.c defs.h config.h queue.h gbtypes.h zlib/zlib.h \
filterdefs.h
formspec.o: formspec.c defs.h config.h queue.h gbtypes.h zlib/zlib.h \
zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h
+g7towin.o: g7towin.c defs.h config.h queue.h gbtypes.h zlib/zlib.h \
+ zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h csv_util.h garmin_fs.h \
+ jeeps/gps.h jeeps/../defs.h jeeps/gpsport.h jeeps/gpsdevice.h \
+ jeeps/gps.h jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h \
+ jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h \
+ jeeps/gpsmath.h jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h \
+ jeeps/gpsproj.h garmin_tables.h jeeps/gpsmath.h strptime.h
garmin.o: garmin.c defs.h config.h queue.h gbtypes.h zlib/zlib.h \
zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h jeeps/gps.h \
jeeps/../defs.h jeeps/gpsport.h jeeps/gpsdevice.h jeeps/gps.h \
jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h \
jeeps/gpsmath.h jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h \
jeeps/gpsproj.h garmin_tables.h
+garmin_gpi.o: garmin_gpi.c defs.h config.h queue.h gbtypes.h zlib/zlib.h \
+ zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h jeeps/gpsmath.h \
+ jeeps/gps.h jeeps/../defs.h jeeps/gpsport.h jeeps/gpsdevice.h \
+ jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h \
+ jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h \
+ jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h \
+ garmin_fs.h jeeps/gps.h garmin_gpi.h
garmin_tables.o: garmin_tables.c garmin_tables.h defs.h config.h queue.h \
- gbtypes.h zlib/zlib.h zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h
+ gbtypes.h zlib/zlib.h zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h \
+ jeeps/gpsmath.h jeeps/gps.h jeeps/../defs.h jeeps/gpsport.h \
+ jeeps/gpsdevice.h jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h \
+ jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h \
+ jeeps/gpsmath.h jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h \
+ jeeps/gpsproj.h
garmin_txt.o: garmin_txt.c defs.h config.h queue.h gbtypes.h zlib/zlib.h \
zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h csv_util.h garmin_fs.h \
jeeps/gps.h jeeps/../defs.h jeeps/gpsport.h jeeps/gpsdevice.h \
gbser_private.h
gbsleep.o: gbsleep.c config.h
gcdb.o: gcdb.c defs.h config.h queue.h gbtypes.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h cet_util.h inifile.h coldsync/palm.h \
- coldsync/../gbtypes.h coldsync/pdb.h
+ gbfile.h cet.h cet_util.h inifile.h pdbfile.h
gdb.o: gdb.c defs.h config.h queue.h gbtypes.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h cet_util.h inifile.h garmin_tables.h jeeps/gpsmath.h \
- jeeps/gps.h jeeps/../defs.h jeeps/gpsport.h jeeps/gpsdevice.h \
+ gbfile.h cet.h cet_util.h inifile.h csv_util.h garmin_fs.h jeeps/gps.h \
+ jeeps/../defs.h jeeps/gpsport.h jeeps/gpsdevice.h jeeps/gps.h \
jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h \
jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h \
jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h \
- garmin_fs.h jeeps/gps.h
+ garmin_tables.h grtcirc.h jeeps/gpsmath.h
geo.o: geo.c defs.h config.h queue.h gbtypes.h zlib/zlib.h zlib/zconf.h \
gbfile.h cet.h cet_util.h inifile.h xmlgeneric.h
geoniche.o: geoniche.c defs.h config.h queue.h gbtypes.h zlib/zlib.h \
- zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h coldsync/palm.h \
- coldsync/../gbtypes.h coldsync/pdb.h jeeps/gpsmath.h jeeps/gps.h \
+ zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h pdbfile.h \
+ jeeps/gpsmath.h jeeps/gps.h \
jeeps/../defs.h jeeps/gpsport.h jeeps/gpsdevice.h jeeps/gpssend.h \
jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h \
jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h jeeps/gpsmem.h \
jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h garmin_tables.h
+ggv_log.o: ggv_log.c defs.h config.h queue.h gbtypes.h zlib/zlib.h \
+ zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h grtcirc.h \
+ jeeps/gpsmath.h jeeps/gps.h jeeps/../defs.h jeeps/gpsport.h \
+ jeeps/gpsdevice.h jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h \
+ jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h \
+ jeeps/gpsmath.h jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h \
+ jeeps/gpsproj.h
globals.o: globals.c defs.h config.h queue.h gbtypes.h zlib/zlib.h \
zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h gbversion.h
glogbook.o: glogbook.c defs.h config.h queue.h gbtypes.h zlib/zlib.h \
google.o: google.c defs.h config.h queue.h gbtypes.h zlib/zlib.h \
zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h xmlgeneric.h
gpilots.o: gpilots.c defs.h config.h queue.h gbtypes.h zlib/zlib.h \
- zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h coldsync/palm.h \
- coldsync/../gbtypes.h coldsync/pdb.h garmin_tables.h
+ zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h garmin_tables.h \
+ pdbfile.h
gpspilot.o: gpspilot.c defs.h config.h queue.h gbtypes.h zlib/zlib.h \
- zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h coldsync/palm.h \
- coldsync/../gbtypes.h coldsync/pdb.h
+ zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h pdbfile.h
gpssim.o: gpssim.c defs.h config.h queue.h gbtypes.h zlib/zlib.h \
zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h
gpsutil.o: gpsutil.c defs.h config.h queue.h gbtypes.h zlib/zlib.h \
zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h xmlgeneric.h \
magellan.h
magnav.o: magnav.c defs.h config.h queue.h gbtypes.h zlib/zlib.h \
- zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h coldsync/palm.h \
- coldsync/../gbtypes.h coldsync/pdb.h
+ zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h pdbfile.h
mag_pdb.o: mag_pdb.c defs.h config.h queue.h gbtypes.h zlib/zlib.h \
- zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h coldsync/palm.h \
- coldsync/../gbtypes.h coldsync/pdb.h jeeps/gpsmath.h jeeps/gps.h \
+ zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h pdbfile.h \
+ jeeps/gpsmath.h jeeps/gps.h \
jeeps/../defs.h jeeps/gpsport.h jeeps/gpsdevice.h jeeps/gpssend.h \
jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h \
jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h jeeps/gpsmem.h \
netstumbler.o: netstumbler.c defs.h config.h queue.h gbtypes.h \
zlib/zlib.h zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h csv_util.h
nmea.o: nmea.c defs.h config.h queue.h gbtypes.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h cet_util.h inifile.h gbser.h strptime.h
+ gbfile.h cet.h cet_util.h inifile.h gbser.h strptime.h jeeps/gpsmath.h \
+ jeeps/gps.h jeeps/../defs.h jeeps/gpsport.h jeeps/gpsdevice.h \
+ jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h \
+ jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h \
+ jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h
nmn4.o: nmn4.c defs.h config.h queue.h gbtypes.h zlib/zlib.h zlib/zconf.h \
gbfile.h cet.h cet_util.h inifile.h csv_util.h
nukedata.o: nukedata.c defs.h config.h queue.h gbtypes.h zlib/zlib.h \
jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h \
jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h \
jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h \
- coldsync/palm.h coldsync/../gbtypes.h coldsync/pdb.h
+ pdbfile.h
pathaway.o: pathaway.c defs.h config.h queue.h gbtypes.h zlib/zlib.h \
- zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h coldsync/palm.h \
- coldsync/../gbtypes.h coldsync/pdb.h csv_util.h strptime.h
+ zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h csv_util.h strptime.h \
+ pdbfile.h
pcx.o: pcx.c defs.h config.h queue.h gbtypes.h zlib/zlib.h zlib/zconf.h \
gbfile.h cet.h cet_util.h inifile.h garmin_tables.h csv_util.h
+pdbfile.o: pdbfile.h pdbfile.c defs.h queue.h gbfile.h
polygon.o: polygon.c defs.h config.h queue.h gbtypes.h zlib/zlib.h \
zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h filterdefs.h
position.o: position.c defs.h config.h queue.h gbtypes.h zlib/zlib.h \
queue.o: queue.c queue.h
quovadis.o: quovadis.c quovadis.h defs.h config.h queue.h gbtypes.h \
zlib/zlib.h zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h \
- coldsync/palm.h coldsync/../gbtypes.h coldsync/pdb.h
+ pdbfile.h
radius.o: radius.c defs.h config.h queue.h gbtypes.h zlib/zlib.h \
zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h filterdefs.h grtcirc.h
raymarine.o: raymarine.c defs.h config.h queue.h gbtypes.h zlib/zlib.h \
transform.o: transform.c defs.h config.h queue.h gbtypes.h zlib/zlib.h \
zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h filterdefs.h
unicsv.o: unicsv.c defs.h config.h queue.h gbtypes.h zlib/zlib.h \
- zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h csv_util.h \
- jeeps/gpsmath.h jeeps/gps.h jeeps/../defs.h jeeps/gpsport.h \
- jeeps/gpsdevice.h jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h \
+ zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h csv_util.h garmin_fs.h \
+ jeeps/gps.h jeeps/../defs.h jeeps/gpsport.h jeeps/gpsdevice.h \
+ jeeps/gps.h jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h \
jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h \
jeeps/gpsmath.h jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h \
- jeeps/gpsproj.h
+ jeeps/gpsproj.h garmin_tables.h jeeps/gpsmath.h strptime.h
units.o: units.c defs.h config.h queue.h gbtypes.h zlib/zlib.h \
zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h
util_crc.o: util_crc.c
util.o: util.c defs.h config.h queue.h gbtypes.h zlib/zlib.h zlib/zconf.h \
- gbfile.h cet.h cet_util.h inifile.h
+ gbfile.h cet.h cet_util.h inifile.h jeeps/gpsmath.h jeeps/gps.h \
+ jeeps/../defs.h jeeps/gpsport.h jeeps/gpsdevice.h jeeps/gpssend.h \
+ jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h \
+ jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h jeeps/gpsmem.h \
+ jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h
uuid.o: uuid.c uuid.h
vcf.o: vcf.c defs.h config.h queue.h gbtypes.h zlib/zlib.h zlib/zconf.h \
gbfile.h cet.h cet_util.h inifile.h jeeps/gpsmath.h jeeps/gps.h \
gbfile.h cet.h cet_util.h inifile.h csv_util.h
vitosmt.o: vitosmt.c defs.h config.h queue.h gbtypes.h zlib/zlib.h \
zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h grtcirc.h
+vitovtt.o: vitovtt.c defs.h config.h queue.h gbtypes.h zlib/zlib.h \
+ zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h
vmem.o: vmem.c defs.h config.h queue.h gbtypes.h zlib/zlib.h zlib/zconf.h \
gbfile.h cet.h cet_util.h inifile.h
waypt.o: waypt.c defs.h config.h queue.h gbtypes.h zlib/zlib.h \
- zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h
+ zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h grtcirc.h
wbt-200.o: wbt-200.c defs.h config.h queue.h gbtypes.h zlib/zlib.h \
zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h gbser.h grtcirc.h
wfff_xml.o: wfff_xml.c defs.h config.h queue.h gbtypes.h zlib/zlib.h \
jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h \
jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h \
jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h
+xhtmlent.o: xhtmlent.c
xmlgeneric.o: xmlgeneric.c defs.h config.h queue.h gbtypes.h zlib/zlib.h \
zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h xmlgeneric.h
xmltag.o: xmltag.c defs.h config.h queue.h gbtypes.h zlib/zlib.h \
zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h
yahoo.o: yahoo.c defs.h config.h queue.h gbtypes.h zlib/zlib.h \
zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h xmlgeneric.h
-coldsync/pdb.o: coldsync/pdb.c config.h coldsync/cs-config.h \
- coldsync/palm.h coldsync/../gbtypes.h coldsync/pdb.h
-coldsync/util.o: coldsync/util.c config.h coldsync/cs-config.h \
- coldsync/pconn/util.h coldsync/palm.h coldsync/../gbtypes.h
jeeps/gpsapp.o: jeeps/gpsapp.c jeeps/gps.h jeeps/../defs.h \
jeeps/../config.h jeeps/../queue.h jeeps/../gbtypes.h \
jeeps/../zlib/zlib.h jeeps/../zlib/zconf.h jeeps/../gbfile.h \
zlib/zconf.h zlib/trees.h
zlib/uncompr.o: zlib/uncompr.c zlib/zlib.h zlib/zconf.h
zlib/zutil.o: zlib/zutil.c zlib/zutil.h zlib/zlib.h zlib/zconf.h
-internal_styles.c: mkstyle.sh style/arc.style style/cambridge.style style/csv.style style/cup.style style/custom.style style/dna.style style/fugawi.style style/garmin301.style style/garmin_poi.style style/geonet.style style/gpsdrive.style style/gpsdrivetrack.style style/gpsman.style style/kompass_tk.style style/kompass_wp.style style/ktf2.style style/kwf2.style style/mapconverter.style style/mxf.style style/nima.style style/openoffice.style style/s_and_t.style style/saplus.style style/sportsim.style style/tabsep.style style/xmap2006.style style/xmap.style style/xmapwpt.style
+internal_styles.c: mkstyle.sh style/arc.style style/cambridge.style style/csv.style style/cup.style style/custom.style style/dna.style style/fugawi.style style/garmin301.style style/garmin_poi.style style/geonet.style style/gpsdrive.style style/gpsdrivetrack.style style/gpsman.style style/kompass_tk.style style/kompass_wp.style style/ktf2.style style/kwf2.style style/mapconverter.style style/mxf.style style/nima.style style/openoffice.style style/s_and_t.style style/saplus.style style/sportsim.style style/tabsep.style style/tomtom_asc.style style/tomtom_itn.style style/xmap2006.style style/xmap.style style/xmapwpt.style
./mkstyle.sh > internal_styles.c || (rm -f internal_styles.c ; exit 1)
at least five different OSes. If you find yourself wanting to insert
compiler or OS specific magic, please resist.
+Coding consistency is encouraged. The reality is we have a lot of code
+that was written by different authors. Some code from other projects is
+included. We don't have immutable rules about code style (indention,
+curly location, whitespace rules, etc.) but we do ask that you try to
+match what is around any code you modify. "When in Rome..."
+
+If writing new code, we'd prefer a style like:
+
+ int
+ mumble(int whatever)
+ {
+ <tab>if (whatevever) {
+ <tab><tab>return blah;
+ <tab>}
+ }
+
+...but if you're submitting a new source file that you intend to
+maintain and are convinced that two space indents will make the world a
+better place, knock yourself out. But if you need to add a line of code
+to the above before "return blah" and do it with spaces instead of hard
+tabs, that would be bad.
+
Submitting Patches
------------------
WP->longitude = pt2deg(trklog->pt[j].x);
WP->altitude = hgt2m(trklog->sh[j].height);
if ( trklog->sh[j].speed >= 0 )
- WP->speed = sp2mps(trklog->sh[j].speed);
+ WAYPT_SET(WP, speed, sp2mps(trklog->sh[j].speed))
else /* bad speed < 0 - set to 0.0 */
- WP->speed = unknown_speed;
+ WAYPT_UNSET(WP, speed);
track_add_wpt(TL, WP);
}
}
trklog = &(TRL.trklog[trk_idx]);
trklog->pt[log_idx].x = deg2pt( WP->longitude);
trklog->pt[log_idx].y = deg2pt(-WP->latitude);
- if ( WP->speed != unknown_speed )
+ if WAYPT_HAS(WP, speed)
trklog->sh[log_idx].speed = mps2sp(WP->speed);
if ( WP->altitude != unknown_alt )
trklog->sh[log_idx].height = m2hgt(WP->altitude);
/**************************************************************************/
static void alan_rd_init(const char *fname) {
- fin = gbfopen(fname, "r", MYNAME);
+ fin = gbfopen(fname, "rb", MYNAME);
}
static void alan_rd_deinit(void) {
static void alan_wr_init(const char *fname) {
- fout = gbfopen(fname, "w", MYNAME);
+ fout = gbfopen(fname, "wb", MYNAME);
}
static void alan_wr_deinit(void) {
static char *output_type = NULL;
static char *road_changes = NULL;
static char *nogc = NULL;
+static char *nourl = NULL;
static char *opt_symbol = NULL;
static char *opt_color = NULL;
static char *opt_zoom = NULL;
"", ARGTYPE_STRING, ARG_NOMINMAX },
{"nogc", &nogc, "Do not add geocache data to description",
NULL, ARGTYPE_BOOL, ARG_NOMINMAX },
+ {"nourl", &nourl, "Do not add URLs to description",
+ NULL, ARGTYPE_BOOL, ARG_NOMINMAX },
{"deficon", &opt_symbol, "Symbol to use for point data",
"Red Flag", ARGTYPE_STRING, ARG_NOMINMAX },
{"color", &opt_color, "Color for lines or mapnotes",
xfree( extra );
}
- if ( wpt->url ) {
+ if ( !nourl && wpt->url ) {
int len = 7+strlen(wpt->url);
char *extra = (char *)xmalloc( len );
sprintf( extra, "{URL=%s}", wpt->url );
/* These values can be, but must not be right. */
/* Further checks are needed to verify that. */
/* (!!! reference data !!!) */
- wpt->course = dir;
+ WAYPT_SET(wpt, course, dir);
wpt->hdop = hdop;
wpt->vdop = vdop;
wpt->pdop = pdop;
wpt->sat = sats;
- wpt->speed = spd * 10;
+ WAYPT_SET(wpt, speed, spd * 10);
#endif
/* We don't have a header with some magic fixed numbers or strings. */
/* So let us check the range for some basic values */
2006/01/22: reader simplified with inifile library
2007/01/30: new option prefer_shortnames
don't check global_opts.objective
+ 2007/04&14: new handling of DESCRIPTION lines
*/
#include "defs.h"
+#include "csv_util.h"
#include "garmin_tables.h"
#include <ctype.h>
#include <stdio.h>
#undef BCR_DEBUG
#define R_EARTH 6371000 /* radius of our big blue ball */
+#define BCR_DEF_ICON "Standort"
+#define BCR_DEF_MPS_ICON "Waypoint"
+#define BCR_UNKNOWN (double) 999999999
/*
6371014 would be a better value when converting to f.e. to mapsoure,
ARG_TERMINATOR
};
+typedef struct {
+ char *bcr_name;
+ char *mps_name;
+ char *symbol_DE;
+ int warned;
+} bcr_icon_mapping_t;
+
+static
+bcr_icon_mapping_t bcr_icon_mapping[] = {
+ { BCR_DEF_ICON, BCR_DEF_MPS_ICON, BCR_DEF_ICON },
+ { "", BCR_DEF_MPS_ICON, "Eigene Adressen" },
+ { "AdrMon alpen", "Summit", "Pass-Strassen" },
+ { "AdrMon bauern", NULL, "Bauern- und Biohoefe" },
+ { "AdrMon cmpngs", "Campground", "Campingplaetzte" },
+ { "AdrMon p_aeu", "Scenic Area", "Sehenswertes" },
+ { "AdrMon p_beu", "Gas Station", "Tanken" },
+ { "AdrMon p_deu", "Parking Area", "Parken" },
+ { "AdrMon p_feu", "Restaurant", "Gastro" },
+ { "AdrMon p_geu", "Museum", "Freizeit" },
+ { "AdrMon p_heu", "Gas Station", "Tankstellen" },
+ { "AdrMon p_keu", NULL, "Faehrverbindungen" },
+ { "AdrMon p_leu", NULL, "Grenzuebergaenge" },
+ { "AdrMon p_teu", NULL, "Wein- und Sektgueter" },
+ { "AdrMon RUINEN", "Ghost Town", "Burgen und Schloesser" },
+ { "AdrMon NFHAUS", "Residence", "Naturfreundehaeuser" },
+ { "AdrMon racing", "Bike Trail", "Rennstrecken" },
+ { "AdrMon TNKRST", "Bar", "Tankraststaetten" },
+ { "AdrMon tpclub", "Contact, Biker", "Motorrad-Clubs" },
+ { "AdrMon tpequ", NULL, "Motorrad-Equipment" },
+ { "AdrMon tphot", "Hotel", "Motorrad-Hotels" },
+ { "AdrMon tpmh", NULL, "Motorradhaendler" },
+ { "AdrMon tpss", "Restricted Area", "Sperrungen" },
+ { "AdrMon tpsw", "Scenic Area", "Sehenswertes" },
+ { "AdrMon tptref", NULL, "Treffpunkte" },
+ { "AdrMon VORTE", "Information", "Ortsinformationen" },
+ { "AdrMon WEBCAM", NULL, "WebCam-Standorte" },
+ { "AdrMon youthh", NULL, "Jugendherbergen" },
+ { "Town", "City (Small)", "Orte" },
+ { NULL, NULL, NULL, 0 }
+};
+
+static void
+bcr_handle_icon_str(const char *str, waypoint *wpt)
+{
+ bcr_icon_mapping_t *m;
+
+ wpt->icon_descr = BCR_DEF_MPS_ICON;
+
+ for (m = bcr_icon_mapping; (m->bcr_name); m++) {
+ if (case_ignore_strcmp(str, m->bcr_name) == 0) {
+ int nr;
+
+ if (m->symbol_DE == NULL) {
+ if (! m->warned) {
+ m->warned = 1;
+ warning(MYNAME ": Unknown icon \"%s\" found. Please report.\n", str);
+ }
+ return;
+ }
+ wpt->description = xstrdup(m->symbol_DE);
+ if (m->mps_name != NULL) {
+ nr = gt_find_icon_number_from_desc(m->mps_name, MAPSOURCE);
+ wpt->icon_descr = gt_find_desc_from_icon_number(nr, MAPSOURCE, NULL);
+ }
+ return;
+ }
+ }
+}
+
+static char *
+get_bcr_icon_from_icon_descr(const char *icon_descr)
+{
+ char *result = BCR_DEF_ICON;
+
+ if (icon_descr) {
+ bcr_icon_mapping_t *m;
+
+ for (m = bcr_icon_mapping; (m->bcr_name); m++) {
+ if (! m->mps_name) continue;
+ if (case_ignore_strcmp(icon_descr, m->mps_name) == 0) {
+ result = m->bcr_name;
+ break;
+ }
+ }
+ }
+ return result;
+}
+
static void
bcr_init_radius(void)
{
if (radius_opt != NULL) /* preinitialize the earth radius */
{
radius = atof(radius_opt);
- if (radius < 0)
+ if (radius <= 0)
fatal(MYNAME ": Sorry, the radius should be greater than zero!\n");
}
else
char station[32];
char *str;
int mlat, mlon; /* mercator data */
- double xalt;
waypoint *wpt;
snprintf(station, sizeof(station), "STATION%d", index);
if (cx == NULL)
fatal(MYNAME ": structure error at %s (Client)!\n", station);
*cx++ = '\0';
+ bcr_handle_icon_str(str, wpt);
+ }
+
+ if (NULL != (str = inifile_readstr(ini, "description", station))) {
+ char *c;
- xalt = atof(cx);
- if (xalt != 999999999) {
- wpt->altitude = FEET_TO_METERS(xalt);
+ c = strchr(str, ',');
+ if (c != NULL) *c = '\0';
+ if (*str) wpt->notes = xstrdup(str);
+ if ((str = c)) {
+ str++;
+ c = strchr(str, ',');
+ if (c != NULL) *c = '\0';
+ if (*str) {
+ xfree(wpt->shortname);
+ wpt->shortname = xstrdup(str);
+ }
}
-
- if (case_ignore_strcmp(str, "Standort") == 0)
- wpt->icon_descr = gt_find_desc_from_icon_number(18, MAPSOURCE, NULL);
- else if (case_ignore_strcmp(str, "Town") == 0)
- wpt->icon_descr = gt_find_desc_from_icon_number(69, MAPSOURCE, NULL);
- else
- warning(MYNAME ": Unknown icon \"%s\" found. Please report.\n", str);
}
- if (NULL != (str = inifile_readstr(ini, "description", station)))
- wpt->description = xstrdup(str);
-
route_add_wpt(route, wpt);
}
bcr_create_waypts_from_route(route);
{
queue *elem, *tmp;
waypoint *wpt;
- char *c;
- int i, icon, north, east, nmin, nmax, emin, emax;
- char buff[128], symbol[32];
+ char *sout;
+ int i, north, east, nmin, nmax, emin, emax;
curr_rte_num++;
if (curr_rte_num != target_rte_num) return;
bcr_write_line(fout, "[CLIENT]", NULL, NULL); /* client section */
bcr_write_line(fout, "REQUEST", NULL, "TRUE");
- c = route->rte_name;
- if (rtename_opt != 0) c = rtename_opt;
- if (c != NULL)
- bcr_write_line(fout, "ROUTENAME", NULL, c);
+ sout = route->rte_name;
+ if (rtename_opt != 0) sout = rtename_opt;
+ if (sout != NULL)
+ bcr_write_line(fout, "ROUTENAME", NULL, sout);
else
bcr_write_line(fout, "ROUTENAME", NULL, "Route");
- bcr_write_line(fout, "DESCRIPTIONLINES", NULL, "1");
- bcr_write_line(fout, "DESCRIPTION1", NULL, "");
+ bcr_write_line(fout, "DESCRIPTIONLINES", NULL, "0");
i = 0;
-
QUEUE_FOR_EACH(&route->waypoint_list, elem, tmp)
{
+ char *icon;
+ waypoint *wpt = (waypoint *) elem;
+
i++;
- wpt = (waypoint *) elem;
- strncpy(symbol, "Standort", sizeof(symbol));
- if (wpt->icon_descr != 0) {
- icon = gt_find_icon_number_from_desc(wpt->icon_descr, MAPSOURCE);
- if ((icon >= 69) && (icon <= 72))
- strncpy(symbol, "Town", sizeof(symbol));
- }
- snprintf(buff, sizeof(buff), "%s,%s", symbol, "999999999");
- bcr_write_line(fout, "STATION", &i, buff);
+ icon = get_bcr_icon_from_icon_descr(wpt->icon_descr);
+
+ xasprintf(&sout, "%s,%.f", icon, BCR_UNKNOWN);
+ bcr_write_line(fout, "STATION", &i, sout);
+ xfree(sout);
}
bcr_write_line(fout, "[COORDINATES]", NULL, NULL); /* coords section */
if (north < nmin) nmin = north;
if (east < emin) emin = east;
- snprintf(buff, sizeof(buff), "%d,%d", east, north);
- bcr_write_line(fout, "STATION", &i, buff);
+ xasprintf(&sout, "%d,%d", east, north);
+ bcr_write_line(fout, "STATION", &i, sout);
+ xfree(sout);
}
bcr_write_line(fout, "[DESCRIPTION]", NULL, NULL); /* descr. section */
i = 0;
QUEUE_FOR_EACH(&route->waypoint_list, elem, tmp)
{
+ char *s1, *s2, *sout;
+
i++;
wpt = (waypoint *) elem;
- c = wpt->description;
- if (prefer_shortnames_opt || (c == NULL) || (*c == '\0'))
- c = wpt->shortname;
- bcr_write_line(fout, "STATION", &i, c);
+ s1 = wpt->notes;
+ if (s1 == NULL) s1 = wpt->description;
+
+ if (prefer_shortnames_opt || (s1 == NULL) || (*s1 == '\0')) {
+ s2 = s1;
+ s1 = wpt->shortname;
+ }
+ else s2 = wpt->shortname;
+
+ if (s1 == NULL) s1 = xstrdup("");
+ else s1 = csv_stringclean(s1, ",\t\r\n");
+ if (s2 == NULL) s2 = xstrdup("");
+ else s2 = csv_stringclean(s2, ",\t\r\n");
+
+ if (*s2)
+ xasprintf(&sout, "%s,%s,@,0", s1, s2);
+ else
+ xasprintf(&sout, "%s,%s,@,0", s1, s1);
+ bcr_write_line(fout, "STATION", &i, sout);
+
+ xfree(s1);
+ xfree(s2);
+ xfree(sout);
}
bcr_write_line(fout, "[ROUTE]", NULL, NULL); /* route section */
- snprintf(buff, sizeof(buff), "%d,%d,%d,%d", emin, nmax, emax, nmin);
- bcr_write_line(fout, "ROUTERECT", NULL, buff);
+ xasprintf(&sout, "%d,%d,%d,%d", emin, nmax, emax, nmin);
+ bcr_write_line(fout, "ROUTERECT", NULL, sout);
+ xfree(sout);
}
ff_vecs_t brauniger_iq_vecs = {
ff_type_serial,
- FF_CAP_RW_ALL,
+ { ff_cap_none, ff_cap_read, ff_cap_none},
rd_init,
NULL,
rd_deinit,
*dest = c;
c -= vec->ucs4_offset;
- if (c < 0) return CET_SUCESS;
+ if (c < 0) return CET_SUCCESS;
else if ((c >= vec->ucs4_count) || (vec->ucs4_map[c] == -1)) return CET_ERROR;
else
{
*dest = vec->ucs4_map[c];
- return CET_SUCESS;
+ return CET_SUCCESS;
}
}
{
if (bytes != NULL) *bytes = 1;
if (value != NULL) *value = *cp;
- return CET_SUCESS;
+ return CET_SUCCESS;
}
else
{
if (bytes != NULL) *bytes = len + 1;
if (value != NULL) *value = res;
- return CET_SUCESS;
+ return CET_SUCCESS;
}
}
}
if (value < vec->ucs4_offset + vec->ucs4_count)
return (char)value & 0xFF;
- else
- return CET_NOT_CONVERTABLE_DEFAULT;
+ else {
+ if (vec->fallback && (vec->fallback != vec))
+ return cet_ucs4_to_char(value, vec->fallback);
+ else
+ return CET_NOT_CONVERTABLE_DEFAULT;
+ }
}
/* %%% cet_utf8_to_char %%%
char *res, *dest, *cend;
if (c == NULL) return NULL;
+ if (vec->ucs4_count == 0) return xstrdup(src); /* UTF-8 -> UTF-8 */
len = strlen(c);
res = dest = xmalloc(len + 1); /* target will become smaller or equal length */
#include <stdio.h>
#define CET_ERROR 1
-#define CET_SUCESS 0
+#define CET_SUCCESS 0
typedef struct cet_ucs4_link_s
{
{
const char *name; /* name of character set */
const char **alias; /* alias table */
- int (*decode)(const char *, int *); /* ... to UCS-4 decoder !FUTURE! */
- short (*encode)(const int); /* UCS-4 to ... encoder !FUTURE! */
+ struct cet_cs_vec_s *fallback; /* fallback character set */
+ void *unused;
const int *ucs4_map; /* char to UCS-4 value table */
const int ucs4_offset; /* first non standard character */
const int ucs4_count; /* values in table */
/* !!! sorted by UCS-4 value !!! */
/* ------------------------------------------*/
{
- {0x00c0, (unsigned char) 'A'}, // latin capital letter a with grave
- {0x00c1, (unsigned char) 'A'}, // latin capital letter a with acute
- {0x00C2, (unsigned char) 'A'}, // latin capital letter a with circumflex
- {0x00C3, (unsigned char) 'A'}, // latin capital letter a with tilde
- {0x00C4, (unsigned char) 'A'}, // latin capital letter a with diaeresis
- {0x00C5, (unsigned char) 'A'}, // latin capital letter a with ring above
- {0x00C7, (unsigned char) 'C'}, // latin capital letter c with cedilla
- {0x00C8, (unsigned char) 'E'}, // latin capital letter e with grave
- {0x00C9, (unsigned char) 'E'}, // latin capital letter e with acute
- {0x00CA, (unsigned char) 'E'}, // latin capital letter e with circumflex
- {0x00CB, (unsigned char) 'E'}, // latin capital letter e with diaeresis
- {0x00CC, (unsigned char) 'I'}, // latin capital letter i with grave
- {0x00CD, (unsigned char) 'I'}, // latin capital letter i with acute
- {0x00CE, (unsigned char) 'I'}, // latin capital letter i with circumflex
- {0x00CF, (unsigned char) 'I'}, // latin capital letter i with diaeresis
- {0x00D1, (unsigned char) 'N'}, // latin capital letter n with tilde
- {0x00D2, (unsigned char) 'O'}, // latin capital letter o with grave
- {0x00D3, (unsigned char) 'O'}, // latin capital letter o with acute
- {0x00D4, (unsigned char) 'O'}, // latin capital letter o with circumflex
- {0x00D5, (unsigned char) 'O'}, // latin capital letter o with tilde
- {0x00D6, (unsigned char) 'O'}, // latin capital letter o with diaeresis
- {0x00D8, (unsigned char) 'O'}, // latin capital letter o with stroke
- {0x00D9, (unsigned char) 'U'}, // latin capital letter u with grave
- {0x00DA, (unsigned char) 'U'}, // latin capital letter u with acute
- {0x00DB, (unsigned char) 'U'}, // latin capital letter u with circumflex
- {0x00DC, (unsigned char) 'U'}, // latin capital letter u with diaeresis
- {0x00DD, (unsigned char) 'Y'}, // latin capital letter y with acute
- {0x00E0, (unsigned char) 'a'}, // latin small letter a with grave
- {0x00E1, (unsigned char) 'a'}, // latin small letter a with acute
- {0x00E2, (unsigned char) 'a'}, // latin small letter a with circumflex
- {0x00E3, (unsigned char) 'a'}, // latin small letter a with tilde
- {0x00E4, (unsigned char) 'a'}, // latin small letter a with diaeresis
- {0x00E5, (unsigned char) 'a'}, // latin small letter a with ring above
- {0x00E7, (unsigned char) 'c'}, // latin small letter c with cedilla
- {0x00E8, (unsigned char) 'e'}, // latin small letter e with grave
- {0x00E9, (unsigned char) 'e'}, // latin small letter e with acute
- {0x00EA, (unsigned char) 'e'}, // latin small letter e with circumflex
- {0x00EB, (unsigned char) 'e'}, // latin small letter e with diaeresis
- {0x00EC, (unsigned char) 'i'}, // latin small letter i with grave
- {0x00ED, (unsigned char) 'i'}, // latin small letter i with acute
- {0x00EE, (unsigned char) 'i'}, // latin small letter i with circumflex
- {0x00EF, (unsigned char) 'i'}, // latin small letter i with diaeresis
- {0x00F1, (unsigned char) 'n'}, // latin small letter n with tilde
- {0x00F2, (unsigned char) 'o'}, // latin small letter o with grave
- {0x00F3, (unsigned char) 'o'}, // latin small letter o with acute
- {0x00F4, (unsigned char) 'o'}, // latin small letter o with circumflex
- {0x00F5, (unsigned char) 'o'}, // latin small letter o with tilde
- {0x00F6, (unsigned char) 'o'}, // latin small letter o with diaeresis
- {0x00F8, (unsigned char) 'o'}, // latin small letter o with stroke
- {0x00F9, (unsigned char) 'u'}, // latin small letter u with grave
- {0x00FA, (unsigned char) 'u'}, // latin small letter u with acute
- {0x00FB, (unsigned char) 'u'}, // latin small letter u with circumflex
- {0x00FC, (unsigned char) 'u'}, // latin small letter u with diaeresis
- {0x00FD, (unsigned char) 'y'}, // latin small letter y with acute
- {0x00FF, (unsigned char) 'y'}, // latin small letter y with diaeresis
- {0x0100, (unsigned char) 'A'}, // latin capital letter a with macron
- {0x0101, (unsigned char) 'a'}, // latin small letter a with macron
- {0x0102, (unsigned char) 'A'}, // latin capital letter a with breve
- {0x0103, (unsigned char) 'a'}, // latin small letter a with breve
- {0x0104, (unsigned char) 'A'}, // latin capital letter a with ogonek
- {0x0105, (unsigned char) 'a'}, // latin small letter a with ogonek
- {0x0106, (unsigned char) 'C'}, // latin capital letter c with acute
- {0x0107, (unsigned char) 'c'}, // latin small letter c with acute
- {0x0108, (unsigned char) 'C'}, // latin capital letter c with circumflex
- {0x0109, (unsigned char) 'c'}, // latin small letter c with circumflex
- {0x010A, (unsigned char) 'C'}, // latin capital letter c with dot above
- {0x010B, (unsigned char) 'c'}, // latin small letter c with dot above
- {0x010C, (unsigned char) 'C'}, // latin capital letter c with caron
- {0x010D, (unsigned char) 'c'}, // latin small letter c with caron
- {0x010E, (unsigned char) 'D'}, // latin capital letter d with caron
- {0x010F, (unsigned char) 'd'}, // latin small letter d with caron
- {0x0110, (unsigned char) 'D'}, // latin capital letter d with stroke
- {0x0111, (unsigned char) 'd'}, // latin small letter d with stroke
- {0x0112, (unsigned char) 'E'}, // latin capital letter e with macron
- {0x0113, (unsigned char) 'e'}, // latin small letter e with macron
- {0x0116, (unsigned char) 'E'}, // latin capital letter e with dot above
- {0x0117, (unsigned char) 'e'}, // latin small letter e with dot above
- {0x0118, (unsigned char) 'E'}, // latin capital letter e with ogonek
- {0x0119, (unsigned char) 'e'}, // latin small letter e with ogonek
- {0x011A, (unsigned char) 'E'}, // latin capital letter e with caron
- {0x011B, (unsigned char) 'e'}, // latin small letter e with caron
- {0x011C, (unsigned char) 'G'}, // latin capital letter g with circumflex
- {0x011D, (unsigned char) 'g'}, // latin small letter g with circumflex
- {0x011E, (unsigned char) 'G'}, // latin capital letter g with breve
- {0x011F, (unsigned char) 'g'}, // latin small letter g with breve
- {0x0120, (unsigned char) 'G'}, // latin capital letter g with dot above
- {0x0121, (unsigned char) 'g'}, // latin small letter g with dot above
- {0x0122, (unsigned char) 'G'}, // latin capital letter g with cedilla
- {0x0123, (unsigned char) 'g'}, // latin small letter g with cedilla
- {0x0124, (unsigned char) 'H'}, // latin capital letter h with circumflex
- {0x0125, (unsigned char) 'h'}, // latin small letter h with circumflex
- {0x0126, (unsigned char) 'H'}, // latin capital letter h with stroke
- {0x0127, (unsigned char) 'h'}, // latin small letter h with stroke
- {0x0128, (unsigned char) 'I'}, // latin capital letter i with tilde
- {0x0129, (unsigned char) 'i'}, // latin small letter i with tilde
- {0x012A, (unsigned char) 'I'}, // latin capital letter i with macron
- {0x012B, (unsigned char) 'i'}, // latin small letter i with macron
- {0x012E, (unsigned char) 'I'}, // latin capital letter i with ogonek
- {0x012F, (unsigned char) 'i'}, // latin small letter i with ogonek
- {0x0130, (unsigned char) 'I'}, // latin capital letter i with dot above
- {0x0134, (unsigned char) 'J'}, // latin capital letter j with circumflex
- {0x0135, (unsigned char) 'j'}, // latin small letter j with circumflex
- {0x0136, (unsigned char) 'K'}, // latin capital letter k with cedilla
- {0x0137, (unsigned char) 'k'}, // latin small letter k with cedilla
- {0x0139, (unsigned char) 'L'}, // latin capital letter l with acute
- {0x013A, (unsigned char) 'l'}, // latin small letter l with acute
- {0x013B, (unsigned char) 'L'}, // latin capital letter l with cedilla
- {0x013C, (unsigned char) 'l'}, // latin small letter l with cedilla
- {0x013D, (unsigned char) 'L'}, // latin capital letter l with caron
- {0x013E, (unsigned char) 'l'}, // latin small letter l with caron
- {0x0141, (unsigned char) 'L'}, // latin capital letter l with stroke
- {0x0142, (unsigned char) 'l'}, // latin small letter l with stroke
- {0x0143, (unsigned char) 'N'}, // latin capital letter n with acute
- {0x0144, (unsigned char) 'n'}, // latin small letter n with acute
- {0x0145, (unsigned char) 'N'}, // latin capital letter n with cedilla
- {0x0146, (unsigned char) 'n'}, // latin small letter n with cedilla
- {0x0147, (unsigned char) 'N'}, // latin capital letter n with caron
- {0x0148, (unsigned char) 'n'}, // latin small letter n with caron
- {0x014C, (unsigned char) 'O'}, // latin capital letter o with macron
- {0x014D, (unsigned char) 'o'}, // latin small letter o with macron
- {0x0150, (unsigned char) 'O'}, // latin capital letter o with double acute
- {0x0151, (unsigned char) 'o'}, // latin small letter o with double acute
- {0x0154, (unsigned char) 'R'}, // latin capital letter r with acute
- {0x0155, (unsigned char) 'r'}, // latin small letter r with acute
- {0x0156, (unsigned char) 'R'}, // latin capital letter r with cedilla
- {0x0157, (unsigned char) 'r'}, // latin small letter r with cedilla
- {0x0158, (unsigned char) 'R'}, // latin capital letter r with caron
- {0x0159, (unsigned char) 'r'}, // latin small letter r with caron
- {0x015A, (unsigned char) 'S'}, // latin capital letter s with acute
- {0x015B, (unsigned char) 's'}, // latin small letter s with acute
- {0x015C, (unsigned char) 'S'}, // latin capital letter s with circumflex
- {0x015D, (unsigned char) 's'}, // latin small letter s with circumflex
- {0x015E, (unsigned char) 'S'}, // latin capital letter s with cedilla
- {0x015F, (unsigned char) 's'}, // latin small letter s with cedilla
- {0x0160, (unsigned char) 'S'}, // latin capital letter s with caron
- {0x0161, (unsigned char) 's'}, // latin small letter s with caron
- {0x0162, (unsigned char) 'T'}, // latin capital letter t with cedilla
- {0x0163, (unsigned char) 't'}, // latin small letter t with cedilla
- {0x0164, (unsigned char) 'T'}, // latin capital letter t with caron
- {0x0165, (unsigned char) 't'}, // latin small letter t with caron
- {0x0166, (unsigned char) 'T'}, // latin capital letter t with stroke
- {0x0167, (unsigned char) 't'}, // latin small letter t with stroke
- {0x0168, (unsigned char) 'U'}, // latin capital letter u with tilde
- {0x0169, (unsigned char) 'u'}, // latin small letter u with tilde
- {0x016A, (unsigned char) 'U'}, // latin capital letter u with macron
- {0x016B, (unsigned char) 'u'}, // latin small letter u with macron
- {0x016C, (unsigned char) 'U'}, // latin capital letter u with breve
- {0x016D, (unsigned char) 'u'}, // latin small letter u with breve
- {0x016E, (unsigned char) 'U'}, // latin capital letter u with ring above
- {0x016F, (unsigned char) 'u'}, // latin small letter u with ring above
- {0x0170, (unsigned char) 'U'}, // latin capital letter u with double acute
- {0x0171, (unsigned char) 'u'}, // latin small letter u with double acute
- {0x0172, (unsigned char) 'U'}, // latin capital letter u with ogonek
- {0x0173, (unsigned char) 'u'}, // latin small letter u with ogonek
- {0x0174, (unsigned char) 'W'}, // latin capital letter w with circumflex
- {0x0175, (unsigned char) 'w'}, // latin small letter w with circumflex
- {0x0176, (unsigned char) 'Y'}, // latin capital letter y with circumflex
- {0x0177, (unsigned char) 'y'}, // latin small letter y with circumflex
- {0x0178, (unsigned char) 'Y'}, // latin capital letter y with diaeresis
- {0x0179, (unsigned char) 'Z'}, // latin capital letter z with acute
- {0x017A, (unsigned char) 'z'}, // latin small letter z with acute
- {0x017B, (unsigned char) 'Z'}, // latin capital letter z with dot above
- {0x017C, (unsigned char) 'z'}, // latin small letter z with dot above
- {0x017D, (unsigned char) 'Z'}, // latin capital letter z with caron
- {0x017E, (unsigned char) 'z'}, // latin small letter z with caron
- {0x1E02, (unsigned char) 'B'}, // latin capital letter b with dot above
- {0x1E03, (unsigned char) 'b'}, // latin small letter b with dot above
- {0x1E0A, (unsigned char) 'D'}, // latin capital letter d with dot above
- {0x1E0B, (unsigned char) 'd'}, // latin small letter d with dot above
- {0x1E1E, (unsigned char) 'F'}, // latin capital letter f with dot above
- {0x1E1F, (unsigned char) 'f'}, // latin small letter f with dot above
- {0x1E40, (unsigned char) 'M'}, // latin capital letter m with dot above
- {0x1E41, (unsigned char) 'm'}, // latin small letter m with dot above
- {0x1E56, (unsigned char) 'P'}, // latin capital letter p with dot above
- {0x1E57, (unsigned char) 'p'}, // latin small letter p with dot above
- {0x1E60, (unsigned char) 'S'}, // latin capital letter s with dot above
- {0x1E61, (unsigned char) 's'}, // latin small letter s with dot above
- {0x1E6A, (unsigned char) 'T'}, // latin capital letter t with dot above
- {0x1E6B, (unsigned char) 't'}, // latin small letter t with dot above
- {0x1E80, (unsigned char) 'W'}, // latin capital letter w with grave
- {0x1E81, (unsigned char) 'w'}, // latin small letter w with grave
- {0x1E82, (unsigned char) 'W'}, // latin capital letter w with acute
- {0x1E83, (unsigned char) 'w'}, // latin small letter w with acute
- {0x1E84, (unsigned char) 'W'}, // latin capital letter w with diaeresis
- {0x1E85, (unsigned char) 'w'}, // latin small letter w with diaeresis
- {0x1e94, (unsigned char) 'u'},
- {0x1EF2, (unsigned char) 'Y'}, // latin capital letter y with grave
- {0x1EF3, (unsigned char) 'y'}, // latin small letter y with grave
- {0x201c, (unsigned char) '"'},
- {0x201d, (unsigned char) '"'}
+ {0x00C0, (unsigned char) 'A'}, // latin capital letter a with grave
+ {0x00C1, (unsigned char) 'A'}, // latin capital letter a with acute
+ {0x00C2, (unsigned char) 'A'}, // latin capital letter a with circumflex
+ {0x00C3, (unsigned char) 'A'}, // latin capital letter a with tilde
+ {0x00C4, (unsigned char) 'A'}, // latin capital letter a with diaeresis
+ {0x00C5, (unsigned char) 'A'}, // latin capital letter a with ring above
+ {0x00C7, (unsigned char) 'C'}, // latin capital letter c with cedilla
+ {0x00C8, (unsigned char) 'E'}, // latin capital letter e with grave
+ {0x00C9, (unsigned char) 'E'}, // latin capital letter e with acute
+ {0x00CA, (unsigned char) 'E'}, // latin capital letter e with circumflex
+ {0x00CB, (unsigned char) 'E'}, // latin capital letter e with diaeresis
+ {0x00CC, (unsigned char) 'I'}, // latin capital letter i with grave
+ {0x00CD, (unsigned char) 'I'}, // latin capital letter i with acute
+ {0x00CE, (unsigned char) 'I'}, // latin capital letter i with circumflex
+ {0x00CF, (unsigned char) 'I'}, // latin capital letter i with diaeresis
+ {0x00D1, (unsigned char) 'N'}, // latin capital letter n with tilde
+ {0x00D2, (unsigned char) 'O'}, // latin capital letter o with grave
+ {0x00D3, (unsigned char) 'O'}, // latin capital letter o with acute
+ {0x00D4, (unsigned char) 'O'}, // latin capital letter o with circumflex
+ {0x00D5, (unsigned char) 'O'}, // latin capital letter o with tilde
+ {0x00D6, (unsigned char) 'O'}, // latin capital letter o with diaeresis
+ {0x00D8, (unsigned char) 'O'}, // latin capital letter o with stroke
+ {0x00D9, (unsigned char) 'U'}, // latin capital letter u with grave
+ {0x00DA, (unsigned char) 'U'}, // latin capital letter u with acute
+ {0x00DB, (unsigned char) 'U'}, // latin capital letter u with circumflex
+ {0x00DC, (unsigned char) 'U'}, // latin capital letter u with diaeresis
+ {0x00DD, (unsigned char) 'Y'}, // latin capital letter y with acute
+ {0x00E0, (unsigned char) 'a'}, // latin small letter a with grave
+ {0x00E1, (unsigned char) 'a'}, // latin small letter a with acute
+ {0x00E2, (unsigned char) 'a'}, // latin small letter a with circumflex
+ {0x00E3, (unsigned char) 'a'}, // latin small letter a with tilde
+ {0x00E4, (unsigned char) 'a'}, // latin small letter a with diaeresis
+ {0x00E5, (unsigned char) 'a'}, // latin small letter a with ring above
+ {0x00E7, (unsigned char) 'c'}, // latin small letter c with cedilla
+ {0x00E8, (unsigned char) 'e'}, // latin small letter e with grave
+ {0x00E9, (unsigned char) 'e'}, // latin small letter e with acute
+ {0x00EA, (unsigned char) 'e'}, // latin small letter e with circumflex
+ {0x00EB, (unsigned char) 'e'}, // latin small letter e with diaeresis
+ {0x00EC, (unsigned char) 'i'}, // latin small letter i with grave
+ {0x00ED, (unsigned char) 'i'}, // latin small letter i with acute
+ {0x00EE, (unsigned char) 'i'}, // latin small letter i with circumflex
+ {0x00EF, (unsigned char) 'i'}, // latin small letter i with diaeresis
+ {0x00F1, (unsigned char) 'n'}, // latin small letter n with tilde
+ {0x00F2, (unsigned char) 'o'}, // latin small letter o with grave
+ {0x00F3, (unsigned char) 'o'}, // latin small letter o with acute
+ {0x00F4, (unsigned char) 'o'}, // latin small letter o with circumflex
+ {0x00F5, (unsigned char) 'o'}, // latin small letter o with tilde
+ {0x00F6, (unsigned char) 'o'}, // latin small letter o with diaeresis
+ {0x00F8, (unsigned char) 'o'}, // latin small letter o with stroke
+ {0x00F9, (unsigned char) 'u'}, // latin small letter u with grave
+ {0x00FA, (unsigned char) 'u'}, // latin small letter u with acute
+ {0x00FB, (unsigned char) 'u'}, // latin small letter u with circumflex
+ {0x00FC, (unsigned char) 'u'}, // latin small letter u with diaeresis
+ {0x00FD, (unsigned char) 'y'}, // latin small letter y with acute
+ {0x00FF, (unsigned char) 'y'}, // latin small letter y with diaeresis
+ {0x0100, (unsigned char) 'A'}, // latin capital letter a with macron
+ {0x0101, (unsigned char) 'a'}, // latin small letter a with macron
+ {0x0102, (unsigned char) 'A'}, // latin capital letter a with breve
+ {0x0103, (unsigned char) 'a'}, // latin small letter a with breve
+ {0x0104, (unsigned char) 'A'}, // latin capital letter a with ogonek
+ {0x0105, (unsigned char) 'a'}, // latin small letter a with ogonek
+ {0x0106, (unsigned char) 'C'}, // latin capital letter c with acute
+ {0x0107, (unsigned char) 'c'}, // latin small letter c with acute
+ {0x0108, (unsigned char) 'C'}, // latin capital letter c with circumflex
+ {0x0109, (unsigned char) 'c'}, // latin small letter c with circumflex
+ {0x010A, (unsigned char) 'C'}, // latin capital letter c with dot above
+ {0x010B, (unsigned char) 'c'}, // latin small letter c with dot above
+ {0x010C, (unsigned char) 'C'}, // latin capital letter c with caron
+ {0x010D, (unsigned char) 'c'}, // latin small letter c with caron
+ {0x010E, (unsigned char) 'D'}, // latin capital letter d with caron
+ {0x010F, (unsigned char) 'd'}, // latin small letter d with caron
+ {0x0110, (unsigned char) 'D'}, // latin capital letter d with stroke
+ {0x0111, (unsigned char) 'd'}, // latin small letter d with stroke
+ {0x0112, (unsigned char) 'E'}, // latin capital letter e with macron
+ {0x0113, (unsigned char) 'e'}, // latin small letter e with macron
+ {0x0114, (unsigned char) 'E'}, // latin capital letter e with breve
+ {0x0115, (unsigned char) 'e'}, // latin small letter e with breve
+ {0x0116, (unsigned char) 'E'}, // latin capital letter e with dot above
+ {0x0117, (unsigned char) 'e'}, // latin small letter e with dot above
+ {0x0118, (unsigned char) 'E'}, // latin capital letter e with ogonek
+ {0x0119, (unsigned char) 'e'}, // latin small letter e with ogonek
+ {0x011A, (unsigned char) 'E'}, // latin capital letter e with caron
+ {0x011B, (unsigned char) 'e'}, // latin small letter e with caron
+ {0x011C, (unsigned char) 'G'}, // latin capital letter g with circumflex
+ {0x011D, (unsigned char) 'g'}, // latin small letter g with circumflex
+ {0x011E, (unsigned char) 'G'}, // latin capital letter g with breve
+ {0x011F, (unsigned char) 'g'}, // latin small letter g with breve
+ {0x0120, (unsigned char) 'G'}, // latin capital letter g with dot above
+ {0x0121, (unsigned char) 'g'}, // latin small letter g with dot above
+ {0x0122, (unsigned char) 'G'}, // latin capital letter g with cedilla
+ {0x0123, (unsigned char) 'g'}, // latin small letter g with cedilla
+ {0x0124, (unsigned char) 'H'}, // latin capital letter h with circumflex
+ {0x0125, (unsigned char) 'h'}, // latin small letter h with circumflex
+ {0x0126, (unsigned char) 'H'}, // latin capital letter h with stroke
+ {0x0127, (unsigned char) 'h'}, // latin small letter h with stroke
+ {0x0128, (unsigned char) 'I'}, // latin capital letter i with tilde
+ {0x0129, (unsigned char) 'i'}, // latin small letter i with tilde
+ {0x012A, (unsigned char) 'I'}, // latin capital letter i with macron
+ {0x012B, (unsigned char) 'i'}, // latin small letter i with macron
+ {0x012C, (unsigned char) 'I'}, // latin capital letter i with breve
+ {0x012D, (unsigned char) 'i'}, // latin small letter i with breve
+ {0x012E, (unsigned char) 'I'}, // latin capital letter i with ogonek
+ {0x012F, (unsigned char) 'i'}, // latin small letter i with ogonek
+ {0x0130, (unsigned char) 'I'}, // latin capital letter i with dot above
+ {0x0131, (unsigned char) 'i'}, // latin small letter dotless i
+ {0x0134, (unsigned char) 'J'}, // latin capital letter j with circumflex
+ {0x0135, (unsigned char) 'j'}, // latin small letter j with circumflex
+ {0x0136, (unsigned char) 'K'}, // latin capital letter k with cedilla
+ {0x0137, (unsigned char) 'k'}, // latin small letter k with cedilla
+ {0x0139, (unsigned char) 'L'}, // latin capital letter l with acute
+ {0x013A, (unsigned char) 'l'}, // latin small letter l with acute
+ {0x013B, (unsigned char) 'L'}, // latin capital letter l with cedilla
+ {0x013C, (unsigned char) 'l'}, // latin small letter l with cedilla
+ {0x013D, (unsigned char) 'L'}, // latin capital letter l with caron
+ {0x013E, (unsigned char) 'l'}, // latin small letter l with caron
+ {0x0141, (unsigned char) 'L'}, // latin capital letter l with stroke
+ {0x0142, (unsigned char) 'l'}, // latin small letter l with stroke
+ {0x0143, (unsigned char) 'N'}, // latin capital letter n with acute
+ {0x0144, (unsigned char) 'n'}, // latin small letter n with acute
+ {0x0145, (unsigned char) 'N'}, // latin capital letter n with cedilla
+ {0x0146, (unsigned char) 'n'}, // latin small letter n with cedilla
+ {0x0147, (unsigned char) 'N'}, // latin capital letter n with caron
+ {0x0148, (unsigned char) 'n'}, // latin small letter n with caron
+ {0x014C, (unsigned char) 'O'}, // latin capital letter o with macron
+ {0x014D, (unsigned char) 'o'}, // latin small letter o with macron
+ {0x014E, (unsigned char) 'O'}, // latin capital letter o with breve
+ {0x014F, (unsigned char) 'o'}, // latin small letter o with breve
+ {0x0150, (unsigned char) 'O'}, // latin capital letter o with double acute
+ {0x0151, (unsigned char) 'o'}, // latin small letter o with double acute
+ {0x0152, (unsigned char) 'O'}, // latin capital ligature oe
+ {0x0153, (unsigned char) 'o'}, // latin small ligature oe
+ {0x0154, (unsigned char) 'R'}, // latin capital letter r with acute
+ {0x0155, (unsigned char) 'r'}, // latin small letter r with acute
+ {0x0156, (unsigned char) 'R'}, // latin capital letter r with cedilla
+ {0x0157, (unsigned char) 'r'}, // latin small letter r with cedilla
+ {0x0158, (unsigned char) 'R'}, // latin capital letter r with caron
+ {0x0159, (unsigned char) 'r'}, // latin small letter r with caron
+ {0x015A, (unsigned char) 'S'}, // latin capital letter s with acute
+ {0x015B, (unsigned char) 's'}, // latin small letter s with acute
+ {0x015C, (unsigned char) 'S'}, // latin capital letter s with circumflex
+ {0x015D, (unsigned char) 's'}, // latin small letter s with circumflex
+ {0x015E, (unsigned char) 'S'}, // latin capital letter s with cedilla
+ {0x015F, (unsigned char) 's'}, // latin small letter s with cedilla
+ {0x0160, (unsigned char) 'S'}, // latin capital letter s with caron
+ {0x0161, (unsigned char) 's'}, // latin small letter s with caron
+ {0x0162, (unsigned char) 'T'}, // latin capital letter t with cedilla
+ {0x0163, (unsigned char) 't'}, // latin small letter t with cedilla
+ {0x0164, (unsigned char) 'T'}, // latin capital letter t with caron
+ {0x0165, (unsigned char) 't'}, // latin small letter t with caron
+ {0x0166, (unsigned char) 'T'}, // latin capital letter t with stroke
+ {0x0167, (unsigned char) 't'}, // latin small letter t with stroke
+ {0x0168, (unsigned char) 'U'}, // latin capital letter u with tilde
+ {0x0169, (unsigned char) 'u'}, // latin small letter u with tilde
+ {0x016A, (unsigned char) 'U'}, // latin capital letter u with macron
+ {0x016B, (unsigned char) 'u'}, // latin small letter u with macron
+ {0x016C, (unsigned char) 'U'}, // latin capital letter u with breve
+ {0x016D, (unsigned char) 'u'}, // latin small letter u with breve
+ {0x016E, (unsigned char) 'U'}, // latin capital letter u with ring above
+ {0x016F, (unsigned char) 'u'}, // latin small letter u with ring above
+ {0x0170, (unsigned char) 'U'}, // latin capital letter u with double acute
+ {0x0171, (unsigned char) 'u'}, // latin small letter u with double acute
+ {0x0172, (unsigned char) 'U'}, // latin capital letter u with ogonek
+ {0x0173, (unsigned char) 'u'}, // latin small letter u with ogonek
+ {0x0174, (unsigned char) 'W'}, // latin capital letter w with circumflex
+ {0x0175, (unsigned char) 'w'}, // latin small letter w with circumflex
+ {0x0176, (unsigned char) 'Y'}, // latin capital letter y with circumflex
+ {0x0177, (unsigned char) 'y'}, // latin small letter y with circumflex
+ {0x0178, (unsigned char) 'Y'}, // latin capital letter y with diaeresis
+ {0x0179, (unsigned char) 'Z'}, // latin capital letter z with acute
+ {0x017A, (unsigned char) 'z'}, // latin small letter z with acute
+ {0x017B, (unsigned char) 'Z'}, // latin capital letter z with dot above
+ {0x017C, (unsigned char) 'z'}, // latin small letter z with dot above
+ {0x017D, (unsigned char) 'Z'}, // latin capital letter z with caron
+ {0x017E, (unsigned char) 'z'}, // latin small letter z with caron
+ {0x0180, (unsigned char) 'b'}, // latin small letter b with stroke
+ {0x0189, (unsigned char) 'D'}, // latin capital letter african d
+ {0x0191, (unsigned char) 'F'}, // latin capital letter f with hook
+ {0x0192, (unsigned char) 'f'}, // latin small letter f with hook
+ {0x0197, (unsigned char) 'I'}, // latin capital letter i with stroke
+ {0x019A, (unsigned char) 'l'}, // latin small letter l with bar
+ {0x019F, (unsigned char) 'O'}, // latin capital letter o with middle tilde
+ {0x01A0, (unsigned char) 'O'}, // latin capital letter o with horn
+ {0x01A1, (unsigned char) 'o'}, // latin small letter o with horn
+ {0x01AB, (unsigned char) 't'}, // latin small letter t with palatal hook
+ {0x01AE, (unsigned char) 'T'}, // latin capital letter t with retroflex hook
+ {0x01AF, (unsigned char) 'U'}, // latin capital letter u with horn
+ {0x01B0, (unsigned char) 'u'}, // latin small letter u with horn
+ {0x01B6, (unsigned char) 'z'}, // latin small letter z with stroke
+ {0x01C0, (unsigned char) '|'}, // latin letter dental click
+ {0x01C3, (unsigned char) '!'}, // latin letter retroflex click
+ {0x01CD, (unsigned char) 'A'}, // latin capital letter a with caron
+ {0x01CE, (unsigned char) 'a'}, // latin small letter a with caron
+ {0x01CF, (unsigned char) 'I'}, // latin capital letter i with caron
+ {0x01D0, (unsigned char) 'i'}, // latin small letter i with caron
+ {0x01D1, (unsigned char) 'O'}, // latin capital letter o with caron
+ {0x01D2, (unsigned char) 'o'}, // latin small letter o with caron
+ {0x01D3, (unsigned char) 'U'}, // latin capital letter u with caron
+ {0x01D4, (unsigned char) 'u'}, // latin small letter u with caron
+ {0x01D5, (unsigned char) 'U'}, // latin capital letter u with diaeresis and macron
+ {0x01D6, (unsigned char) 'u'}, // latin small letter u with diaeresis and macron
+ {0x01D7, (unsigned char) 'U'}, // latin capital letter u with diaeresis and acute
+ {0x01D8, (unsigned char) 'u'}, // latin small letter u with diaeresis and acute
+ {0x01D9, (unsigned char) 'U'}, // latin capital letter u with diaeresis and caron
+ {0x01DA, (unsigned char) 'u'}, // latin small letter u with diaeresis and caron
+ {0x01DB, (unsigned char) 'U'}, // latin capital letter u with diaeresis and grave
+ {0x01DC, (unsigned char) 'u'}, // latin small letter u with diaeresis and grave
+ {0x01DE, (unsigned char) 'A'}, // latin capital letter a with diaeresis and macron
+ {0x01DF, (unsigned char) 'a'}, // latin small letter a with diaeresis and macron
+ {0x01E4, (unsigned char) 'G'}, // latin capital letter g with stroke
+ {0x01E5, (unsigned char) 'g'}, // latin small letter g with stroke
+ {0x01E6, (unsigned char) 'G'}, // latin capital letter g with caron
+ {0x01E7, (unsigned char) 'g'}, // latin small letter g with caron
+ {0x01E8, (unsigned char) 'K'}, // latin capital letter k with caron
+ {0x01E9, (unsigned char) 'k'}, // latin small letter k with caron
+ {0x01EA, (unsigned char) 'O'}, // latin capital letter o with ogonek
+ {0x01EB, (unsigned char) 'o'}, // latin small letter o with ogonek
+ {0x01EC, (unsigned char) 'O'}, // latin capital letter o with ogonek and macron
+ {0x01ED, (unsigned char) 'o'}, // latin small letter o with ogonek and macron
+ {0x01F0, (unsigned char) 'j'}, // latin small letter j with caron
+ {0x0261, (unsigned char) 'g'}, // latin small letter script g
+ {0x02B9, (unsigned char) '\''}, // modifier letter prime
+ {0x02BA, (unsigned char) '"'}, // modifier letter double prime
+ {0x02BC, (unsigned char) '\''}, // modifier letter apostrophe
+ {0x02C4, (unsigned char) '^'}, // modifier letter up arrowhead
+ {0x02C6, (unsigned char) '^'}, // modifier letter circumflex accent
+ {0x02C7, (unsigned char) '^'}, // caron
+ {0x02C8, (unsigned char) '\''}, // modifier letter vertical line
+ {0x02CB, (unsigned char) '`'}, // modifier letter grave accent
+ {0x02CD, (unsigned char) '_'}, // modifier letter low macron
+ {0x02D8, (unsigned char) '^'}, // circumflex accent
+ {0x02D9, (unsigned char) '\''}, // dot above
+ {0x02DC, (unsigned char) '~'}, // small tilde
+ {0x0300, (unsigned char) '`'}, // combining grave accent
+ {0x0302, (unsigned char) '^'}, // combining circumflex accent
+ {0x0303, (unsigned char) '~'}, // combining tilde
+ {0x030E, (unsigned char) '"'}, // combining double vertical line above
+ {0x0331, (unsigned char) '_'}, // combining macron below
+ {0x0332, (unsigned char) '_'}, // combining low line
+ {0x037E, (unsigned char) ';'}, // greek question mark
+ {0x0393, (unsigned char) 'G'}, // greek capital letter gamma
+ {0x0398, (unsigned char) 'T'}, // greek capital letter theta
+ {0x03A3, (unsigned char) 'S'}, // greek capital letter sigma
+ {0x03A6, (unsigned char) 'F'}, // greek capital letter phi
+ {0x03A9, (unsigned char) 'O'}, // greek capital letter omega
+ {0x03B1, (unsigned char) 'a'}, // greek small letter alpha
+ {0x03B4, (unsigned char) 'd'}, // greek small letter delta
+ {0x03B5, (unsigned char) 'e'}, // greek small letter epsilon
+ {0x03C0, (unsigned char) 'p'}, // greek small letter pi
+ {0x03C3, (unsigned char) 's'}, // greek small letter sigma
+ {0x03C4, (unsigned char) 't'}, // greek small letter tau
+ {0x03C6, (unsigned char) 'f'}, // greek small letter phi
+ {0x04BB, (unsigned char) 'h'}, // cyrillic small letter shha
+ {0x0589, (unsigned char) ':'}, // armenian full stop
+ {0x066A, (unsigned char) '%'}, // arabic percent sign
+ {0x1E02, (unsigned char) 'B'}, // latin capital letter b with dot above
+ {0x1E03, (unsigned char) 'b'}, // latin small letter b with dot above
+ {0x1E0A, (unsigned char) 'D'}, // latin capital letter d with dot above
+ {0x1E0B, (unsigned char) 'd'}, // latin small letter d with dot above
+ {0x1E1E, (unsigned char) 'F'}, // latin capital letter f with dot above
+ {0x1E1F, (unsigned char) 'f'}, // latin small letter f with dot above
+ {0x1E40, (unsigned char) 'M'}, // latin capital letter m with dot above
+ {0x1E41, (unsigned char) 'm'}, // latin small letter m with dot above
+ {0x1E56, (unsigned char) 'P'}, // latin capital letter p with dot above
+ {0x1E57, (unsigned char) 'p'}, // latin small letter p with dot above
+ {0x1E60, (unsigned char) 'S'}, // latin capital letter s with dot above
+ {0x1E61, (unsigned char) 's'}, // latin small letter s with dot above
+ {0x1E6A, (unsigned char) 'T'}, // latin capital letter t with dot above
+ {0x1E6B, (unsigned char) 't'}, // latin small letter t with dot above
+ {0x1E80, (unsigned char) 'W'}, // latin capital letter w with grave
+ {0x1E81, (unsigned char) 'w'}, // latin small letter w with grave
+ {0x1E82, (unsigned char) 'W'}, // latin capital letter w with acute
+ {0x1E83, (unsigned char) 'w'}, // latin small letter w with acute
+ {0x1E84, (unsigned char) 'W'}, // latin capital letter w with diaeresis
+ {0x1E85, (unsigned char) 'w'}, // latin small letter w with diaeresis
+ {0x1E94, (unsigned char) 'u'},
+ {0x1EF2, (unsigned char) 'Y'}, // latin capital letter y with grave
+ {0x1EF3, (unsigned char) 'y'}, // latin small letter y with grave
+ {0x2000, (unsigned char) ' '}, // en quad
+ {0x2001, (unsigned char) ' '}, // em quad
+ {0x2002, (unsigned char) ' '}, // en space
+ {0x2003, (unsigned char) ' '}, // em space
+ {0x2004, (unsigned char) ' '}, // three-per-em space
+ {0x2005, (unsigned char) ' '}, // four-per-em space
+ {0x2006, (unsigned char) ' '}, // six-per-em space
+ {0x2010, (unsigned char) '-'}, // hyphen
+ {0x2011, (unsigned char) '-'}, // non-breaking hyphen
+ {0x2017, (unsigned char) '='}, // double low line
+ {0x201C, (unsigned char) '"'},
+ {0x201D, (unsigned char) '"'},
+ {0x2032, (unsigned char) '\''}, // prime
+ {0x2035, (unsigned char) '`'}, // reversed prime
+ {0x203C, (unsigned char) '!'}, // double exclamation mark
+ {0x2044, (unsigned char) '/'}, // fraction slash
+ {0x2074, (unsigned char) '4'}, // superscript four
+ {0x2075, (unsigned char) '5'}, // superscript five
+ {0x2076, (unsigned char) '6'}, // superscript six
+ {0x2077, (unsigned char) '7'}, // superscript seven
+ {0x2078, (unsigned char) '8'}, // superscript eight
+ {0x207F, (unsigned char) 'n'}, // superscript latin small letter n
+ {0x2080, (unsigned char) '0'}, // subscript zero
+ {0x2081, (unsigned char) '1'}, // subscript one
+ {0x2082, (unsigned char) '2'}, // subscript two
+ {0x2083, (unsigned char) '3'}, // subscript three
+ {0x2084, (unsigned char) '4'}, // subscript four
+ {0x2085, (unsigned char) '5'}, // subscript five
+ {0x2086, (unsigned char) '6'}, // subscript six
+ {0x2087, (unsigned char) '7'}, // subscript seven
+ {0x2088, (unsigned char) '8'}, // subscript eight
+ {0x2089, (unsigned char) '9'}, // subscript nine
+ {0x20A7, (unsigned char) 'P'}, // peseta sign
+ {0x2102, (unsigned char) 'C'}, // double-struck capital c
+ {0x2107, (unsigned char) 'E'}, // euler constant
+ {0x210A, (unsigned char) 'g'}, // script small g
+ {0x210B, (unsigned char) 'H'}, // script capital h
+ {0x210C, (unsigned char) 'H'}, // black-letter capital h
+ {0x210D, (unsigned char) 'H'}, // double-struck capital h
+ {0x210E, (unsigned char) 'h'}, // planck constant
+ {0x2110, (unsigned char) 'I'}, // script capital i
+ {0x2111, (unsigned char) 'I'}, // black-letter capital i
+ {0x2112, (unsigned char) 'L'}, // script capital l
+ {0x2113, (unsigned char) 'l'}, // script small l
+ {0x2115, (unsigned char) 'N'}, // double-struck capital n
+ {0x2118, (unsigned char) 'P'}, // script capital p
+ {0x2119, (unsigned char) 'P'}, // double-struck capital p
+ {0x211A, (unsigned char) 'Q'}, // double-struck capital q
+ {0x211B, (unsigned char) 'R'}, // script capital r
+ {0x211C, (unsigned char) 'R'}, // black-letter capital r
+ {0x211D, (unsigned char) 'R'}, // double-struck capital r
+ {0x2124, (unsigned char) 'Z'}, // double-struck capital z
+ {0x2128, (unsigned char) 'Z'}, // black-letter capital z
+ {0x212A, (unsigned char) 'K'}, // kelvin sign
+ {0x212C, (unsigned char) 'B'}, // script capital b
+ {0x212D, (unsigned char) 'C'}, // black-letter capital c
+ {0x212E, (unsigned char) 'e'}, // estimated symbol
+ {0x212F, (unsigned char) 'e'}, // script small e
+ {0x2130, (unsigned char) 'E'}, // script capital e
+ {0x2131, (unsigned char) 'F'}, // script capital f
+ {0x2133, (unsigned char) 'M'}, // script capital m
+ {0x2134, (unsigned char) 'o'}, // script small o
+ {0x2190, (unsigned char) '<'}, // leftwards arrow
+ {0x2191, (unsigned char) '^'}, // upwards arrow
+ {0x2192, (unsigned char) '>'}, // rightwards arrow
+ {0x2193, (unsigned char) 'v'}, // downwards arrow
+ {0x2194, (unsigned char) '-'}, // left right arrow
+ {0x2195, (unsigned char) '|'}, // up down arrow
+ {0x21A8, (unsigned char) '|'}, // up down arrow with base
+ {0x2212, (unsigned char) '-'}, // minus sign
+ {0x2215, (unsigned char) '/'}, // division slash
+ {0x2216, (unsigned char) '\\'}, // set minus
+ {0x2217, (unsigned char) '*'}, // asterisk operator
+ {0x221A, (unsigned char) 'v'}, // square root
+ {0x221E, (unsigned char) '8'}, // infinity
+ {0x221F, (unsigned char) 'L'}, // right angle
+ {0x2223, (unsigned char) '|'}, // divides
+ {0x2229, (unsigned char) 'n'}, // intersection
+ {0x2236, (unsigned char) ':'}, // ratio
+ {0x223C, (unsigned char) '~'}, // tilde operator
+ {0x2261, (unsigned char) '='}, // identical to
+ {0x2264, (unsigned char) '='}, // less-than or equal to
+ {0x2265, (unsigned char) '='}, // greater-than or equal to
+ {0x2303, (unsigned char) '^'}, // up arrowhead
+ {0x2320, (unsigned char) '('}, // top half integral
+ {0x2321, (unsigned char) ')'}, // bottom half integral
+ {0x2329, (unsigned char) '<'}, // left-pointing angle bracket
+ {0x232A, (unsigned char) '>'}, // right-pointing angle bracket
+ {0x25AC, (unsigned char) '-'}, // black rectangle
+ {0x25B2, (unsigned char) '^'}, // black up-pointing triangle
+ {0x25BA, (unsigned char) '>'}, // black right-pointing pointer
+ {0x25C4, (unsigned char) '<'}, // black left-pointing pointer
+ {0x25CB, (unsigned char) '0'}, // white circle
+ {0x25D9, (unsigned char) '0'}, // inverse white circle
+ {0x263A, (unsigned char) 'O'}, // white smiling face
+ {0x263B, (unsigned char) 'O'}, // black smiling face
+ {0x263C, (unsigned char) '0'}, // white sun with rays
+ {0x2640, (unsigned char) '+'}, // female sign
+ {0x2642, (unsigned char) '>'}, // male sign
+ {0x266A, (unsigned char) 'd'}, // eighth note
+ {0x266B, (unsigned char) 'd'}, // beamed eighth notes
+ {0x2758, (unsigned char) '|'}, // light vertical bar
+ {0x3000, (unsigned char) ' '}, // ideographic space
+ {0x3008, (unsigned char) '<'}, // left angle bracket
+ {0x3009, (unsigned char) '>'}, // right angle bracket
+ {0x301A, (unsigned char) '['}, // left white square bracket
+ {0x301B, (unsigned char) ']'}, // right white square bracket
+ {0x301D, (unsigned char) '"'}, // reversed double prime quotation mark
+ {0x301E, (unsigned char) '"'} // double prime quotation mark
};
cet_cs_vec_t cet_cs_vec_ansi_x3_4_1968 = /* defined in cet.h */
cet_cs_name_ansi_x3_4_1968, /* name of character set */
cet_cs_alias_ansi_x3_4_1968, /* alias table */
- NULL, /* ... to UCS-4 converter (multi-byte) */
- NULL, /* UCS-4 to ... converter (multi-byte) */
+ NULL, /* fallback character set */
+ NULL, /* unused */
cet_ucs4_map_ansi_x3_4_1968, /* char to UCS-4 value table */
cet_ucs4_ofs_ansi_x3_4_1968, /* first non standard character */
{0x2122, 0x99} /* mark sign */
};
-/*
-#define cet_ucs4_to_cp1250_extra_ct 0
-const cet_ucs4_link_t cet_ucs4_to_cp1250_extra[cet_ucs4_to_cp1250_extra_ct] = {};
-*/
+/* Extra table was generated from bestfit1250.txt located at
+ ftp.unicode.org:/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/ */
+
+const cet_ucs4_link_t cet_ucs4_to_cp1250_extra[] =
+{
+ {0x0189, 0xd0} /* latin capital letter african d */,
+ {0x02bb, 0x91} /* modifier letter turned comma */,
+ {0x02c9, 0xaf} /* modifier letter macron */,
+ {0x02ca, 0xb4} /* modifier letter acute accent */,
+ {0x02da, 0xb0} /* ring above */,
+ {0x0301, 0xb4} /* combining acute accent */,
+ {0x0304, 0xaf} /* combining macron */,
+ {0x0305, 0xaf} /* combining overline */,
+ {0x0306, 0xa2} /* combining breve */,
+ {0x0307, 0xff} /* combining dot above */,
+ {0x0308, 0xa8} /* combining diaeresis */,
+ {0x030a, 0xb0} /* combining ring above */,
+ {0x030c, 0xa1} /* combining caron */,
+ {0x0327, 0xb8} /* combining cedilla */,
+ {0x03b2, 0xdf} /* greek small letter beta */,
+ {0x03bc, 0xb5} /* greek small letter mu */,
+ {0x2024, 0x95} /* one dot leader */,
+ {0x2033, 0x94} /* double prime */,
+ {0x2070, 0xb0} /* superscript zero */,
+ {0x20a4, 0xa3} /* lira sign */,
+ {0x212b, 0xc5} /* angstrom sign */,
+ {0x2190, 0x8b} /* leftwards arrow */,
+ {0x2192, 0x9b} /* rightwards arrow */,
+ {0x2193, 0xa1} /* downwards arrow */,
+ {0x2205, 0xd8} /* empty set */,
+ {0x2213, 0xb1} /* minus-or-plus sign */,
+ {0x2218, 0xb0} /* ring operator */,
+ {0x2219, 0x95} /* bullet operator */,
+ {0x226a, 0xab} /* much less-than */,
+ {0x226b, 0xbb} /* much greater-than */,
+ {0x22c5, 0xb7} /* dot operator */,
+ {0x2302, 0xa6} /* house */,
+ {0x2500, 0xa6} /* box drawings light horizontal */,
+ {0x2510, 0xac} /* box drawings light down and left */,
+ {0x2551, 0xa6} /* box drawings double vertical */,
+ {0x2557, 0xac} /* box drawings double down and left */,
+ {0x2560, 0xa6} /* box drawings double vertical and right */,
+ {0x2563, 0xa6} /* box drawings double vertical and left */,
+ {0x2569, 0xa6} /* box drawings double up and horizontal */,
+ {0x25a0, 0xa6} /* black square */,
+ {0x25bc, 0xa1} /* black down-pointing triangle */,
+ {0x25d8, 0x95} /* inverse bullet */,
+ {0x263a, 0xa2} /* white smiling face */,
+ {0x263b, 0xa2} /* black smiling face */,
+ {0x2660, 0xa6} /* black spade suit */,
+ {0x2663, 0xa6} /* black club suit */,
+ {0x2665, 0xa6} /* black heart suit */,
+ {0x2666, 0xa6} /* black diamond suit */,
+ {0x275b, 0x91} /* heavy single turned comma quotation mark ornament */,
+ {0x275c, 0x92} /* heavy single comma quotation mark ornament */,
+ {0x275d, 0x93} /* heavy double turned comma quotation mark ornament */,
+ {0x275e, 0x94} /* heavy double comma quotation mark ornament */,
+ {0x300a, 0xab} /* left double angle bracket */,
+ {0x300b, 0xbb} /* right double angle bracket */,
+ {0x301d, 0x93} /* reversed double prime quotation mark */,
+ {0x301e, 0x94} /* double prime quotation mark */,
+ {0x301f, 0x84} /* low double prime quotation mark */,
+ {0x30fb, 0xb7} /* katakana middle dot */,
+ {0x30fc, 0x97} /* katakana-hiragana prolonged sound mark */
+};
+
+#define cet_ucs4_to_cp1250_extra_ct sizeof(cet_ucs4_to_cp1250_extra) / sizeof(cet_ucs4_to_cp1250_extra[0])
cet_cs_vec_t cet_cs_vec_cp1250 = /* defined in cet.h */
{
cet_ucs4_to_cp1250_links, /* UCS-4 to char links */
cet_ucs4_to_cp1250_ct, /* number of links */
- NULL, /* hand made UCS-4 links */
- 0, /* number of extra links */
+ cet_ucs4_to_cp1250_extra, /* hand made UCS-4 links */
+ cet_ucs4_to_cp1250_extra_ct, /* number of extra links */
NULL /* for internal use */
};
{0x2122, 0x99} /* mark sign */
};
-/*
-#define cet_ucs4_to_cp1251_extra_ct 0
-const cet_ucs4_link_t cet_ucs4_to_cp1251_extra[cet_ucs4_to_cp1251_extra_ct] = {};
-*/
+/* Extra table was generated from bestfit1251.txt located at
+ ftp.unicode.org:/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/ */
+
+const cet_ucs4_link_t cet_ucs4_to_cp1251_extra[] =
+{
+ {0x2195, 0xa6} /* up down arrow */,
+ {0x21a8, 0xa6} /* up down arrow with base */,
+ {0x2219, 0x95} /* bullet operator */,
+ {0x2302, 0xa6} /* house */,
+ {0x2502, 0xa6} /* box drawings light vertical */,
+ {0x2510, 0xac} /* box drawings light down and left */,
+ {0x2551, 0xa6} /* box drawings double vertical */,
+ {0x2553, 0xe3} /* box drawings down double and right single */,
+ {0x2554, 0xe3} /* box drawings double down and right */,
+ {0x2555, 0xac} /* box drawings down single and left double */,
+ {0x2556, 0xac} /* box drawings down double and left single */,
+ {0x2557, 0xac} /* box drawings double down and left */,
+ {0x255e, 0xa6} /* box drawings vertical single and right double */,
+ {0x255f, 0xa6} /* box drawings vertical double and right single */,
+ {0x2560, 0xa6} /* box drawings double vertical and right */,
+ {0x2561, 0xa6} /* box drawings vertical single and left double */,
+ {0x2562, 0xa6} /* box drawings vertical double and left single */,
+ {0x2563, 0xa6} /* box drawings double vertical and left */,
+ {0x2567, 0xa6} /* box drawings up single and horizontal double */,
+ {0x2568, 0xa6} /* box drawings up double and horizontal single */,
+ {0x2569, 0xa6} /* box drawings double up and horizontal */,
+ {0x258c, 0xa6} /* left half block */,
+ {0x2590, 0xa6} /* right half block */,
+ {0x25a0, 0xa6} /* black square */,
+ {0x25bc, 0xa1} /* black down-pointing triangle */,
+ {0x25d8, 0x95} /* inverse bullet */,
+ {0x2660, 0xa6} /* black spade suit */,
+ {0x2663, 0xa6} /* black club suit */,
+ {0x2665, 0xa6} /* black heart suit */,
+ {0x2666, 0xa6} /* black diamond suit */
+};
+
+#define cet_ucs4_to_cp1251_extra_ct sizeof(cet_ucs4_to_cp1251_extra) / sizeof(cet_ucs4_to_cp1251_extra[0])
cet_cs_vec_t cet_cs_vec_cp1251 = /* defined in cet.h */
{
cet_ucs4_to_cp1251_links, /* UCS-4 to char links */
cet_ucs4_to_cp1251_ct, /* number of links */
- NULL, /* hand made UCS-4 links */
- 0, /* number of extra links */
+ cet_ucs4_to_cp1251_extra, /* hand made UCS-4 links */
+ cet_ucs4_to_cp1251_extra_ct, /* number of extra links */
NULL /* for internal use */
};
{0x2122, 0x99} /* mark sign */
};
-/*
-#define cet_ucs4_to_cp1252_extra_ct 0
-const cet_ucs4_link_t cet_ucs4_to_cp1252_extra[cet_ucs4_to_cp1252_extra_ct] = {};
-*/
+/* Extra table was generated from bestfit1252.txt located at
+ ftp.unicode.org:/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/ */
+
+const cet_ucs4_link_t cet_ucs4_to_cp1252_extra[] =
+{
+ {0x0110, 0xd0} /* latin capital letter d with stroke */,
+ {0x0189, 0xd0} /* latin capital letter african d */,
+ {0x0191, 0x83} /* latin capital letter f with hook */,
+ {0x02c9, 0xaf} /* modifier letter macron */,
+ {0x02ca, 0xb4} /* modifier letter acute accent */,
+ {0x02da, 0xb0} /* ring above */,
+ {0x0301, 0xb4} /* combining acute accent */,
+ {0x0304, 0xaf} /* combining macron */,
+ {0x0305, 0xaf} /* combining overline */,
+ {0x0308, 0xa8} /* combining diaeresis */,
+ {0x030a, 0xb0} /* combining ring above */,
+ {0x0327, 0xb8} /* combining cedilla */,
+ {0x03b2, 0xdf} /* greek small letter beta */,
+ {0x03bc, 0xb5} /* greek small letter mu */,
+ {0x2024, 0xb7} /* one dot leader */,
+ {0x2070, 0xb0} /* superscript zero */,
+ {0x20a1, 0xa2} /* colon sign */,
+ {0x20a4, 0xa3} /* lira sign */,
+ {0x212b, 0xc5} /* angstrom sign */,
+ {0x2205, 0xd8} /* empty set */,
+ {0x2213, 0xb1} /* minus-or-plus sign */,
+ {0x2218, 0xb0} /* ring operator */,
+ {0x2219, 0xb7} /* bullet operator */,
+ {0x2248, 0x98} /* almost equal to */,
+ {0x226a, 0xab} /* much less-than */,
+ {0x226b, 0xbb} /* much greater-than */,
+ {0x22c5, 0xb7} /* dot operator */,
+ {0x2302, 0xa6} /* house */,
+ {0x2310, 0xac} /* reversed not sign */,
+ {0x2502, 0xa6} /* box drawings light vertical */,
+ {0x2524, 0xa6} /* box drawings light vertical and left */,
+ {0x2551, 0xa6} /* box drawings double vertical */,
+ {0x255e, 0xa6} /* box drawings vertical single and right double */,
+ {0x255f, 0xa6} /* box drawings vertical double and right single */,
+ {0x2560, 0xa6} /* box drawings double vertical and right */,
+ {0x2561, 0xa6} /* box drawings vertical single and left double */,
+ {0x2562, 0xa6} /* box drawings vertical double and left single */,
+ {0x2563, 0xa6} /* box drawings double vertical and left */,
+ {0x2580, 0xaf} /* upper half block */,
+ {0x2588, 0xa6} /* full block */,
+ {0x258c, 0xa6} /* left half block */,
+ {0x2590, 0xa6} /* right half block */,
+ {0x2591, 0xa6} /* light shade */,
+ {0x2592, 0xa6} /* medium shade */,
+ {0x2593, 0xa6} /* dark shade */,
+ {0x25a0, 0xa6} /* black square */,
+ {0x263c, 0xa4} /* white sun with rays */,
+ {0x300a, 0xab} /* left double angle bracket */,
+ {0x300b, 0xbb} /* right double angle bracket */,
+ {0x30fb, 0xb7} /* katakana middle dot */
+};
+
+#define cet_ucs4_to_cp1252_extra_ct sizeof(cet_ucs4_to_cp1252_extra) / sizeof(cet_ucs4_to_cp1252_extra[0])
cet_cs_vec_t cet_cs_vec_cp1252 = /* defined in cet.h */
{
cet_ucs4_to_cp1252_links, /* UCS-4 to char links */
cet_ucs4_to_cp1252_ct, /* number of links */
- NULL, /* hand made UCS-4 links */
- 0, /* number of extra links */
+ cet_ucs4_to_cp1252_extra, /* hand made UCS-4 links */
+ cet_ucs4_to_cp1252_extra_ct, /* number of extra links */
NULL /* for internal use */
};
{0x2122, 0x99} /* mark sign */
};
-/*
-#define cet_ucs4_to_cp1253_extra_ct 0
-const cet_ucs4_link_t cet_ucs4_to_cp1253_extra[cet_ucs4_to_cp1253_extra_ct] = {};
-*/
+/* Extra table was generated from bestfit1253.txt located at
+ ftp.unicode.org:/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/ */
+
+const cet_ucs4_link_t cet_ucs4_to_cp1253_extra[] =
+{
+ {0x0191, 0x83} /* latin capital letter f with hook */,
+ {0x030d, 0xb4} /* combining vertical line above */,
+ {0x2195, 0xa6} /* up down arrow */,
+ {0x21a8, 0xa6} /* up down arrow with base */,
+ {0x2302, 0xa6} /* house */,
+ {0x2502, 0xa6} /* box drawings light vertical */,
+ {0x2510, 0xac} /* box drawings light down and left */,
+ {0x2551, 0xa6} /* box drawings double vertical */,
+ {0x2557, 0xac} /* box drawings double down and left */,
+ {0x2560, 0xa6} /* box drawings double vertical and right */,
+ {0x2563, 0xa6} /* box drawings double vertical and left */,
+ {0x2569, 0xa6} /* box drawings double up and horizontal */,
+ {0x25a0, 0xa6} /* black square */,
+ {0x25bc, 0xa1} /* black down-pointing triangle */,
+ {0x25d8, 0x95} /* inverse bullet */,
+ {0x2660, 0xa6} /* black spade suit */,
+ {0x2663, 0xa6} /* black club suit */,
+ {0x2665, 0xa6} /* black heart suit */,
+ {0x2666, 0xa6} /* black diamond suit */
+};
+
+#define cet_ucs4_to_cp1253_extra_ct sizeof(cet_ucs4_to_cp1253_extra) / sizeof(cet_ucs4_to_cp1253_extra[0])
cet_cs_vec_t cet_cs_vec_cp1253 = /* defined in cet.h */
{
cet_ucs4_to_cp1253_links, /* UCS-4 to char links */
cet_ucs4_to_cp1253_ct, /* number of links */
- NULL, /* hand made UCS-4 links */
- 0, /* number of extra links */
+ cet_ucs4_to_cp1253_extra, /* hand made UCS-4 links */
+ cet_ucs4_to_cp1253_extra_ct, /* number of extra links */
NULL /* for internal use */
};
{0x2122, 0x99} /* mark sign */
};
-/*
-#define cet_ucs4_to_cp1254_extra_ct 0
-const cet_ucs4_link_t cet_ucs4_to_cp1254_extra[cet_ucs4_to_cp1254_extra_ct] = {};
-*/
+/* Extra table was generated from bestfit1254.txt located at
+ ftp.unicode.org:/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/ */
+
+const cet_ucs4_link_t cet_ucs4_to_cp1254_extra[] =
+{
+ {0x0191, 0x83} /* latin capital letter f with hook */,
+ {0x02bb, 0x91} /* modifier letter turned comma */,
+ {0x02c9, 0xaf} /* modifier letter macron */,
+ {0x02ca, 0xb4} /* modifier letter acute accent */,
+ {0x02da, 0xb0} /* ring above */,
+ {0x02db, 0xb8} /* ogonek */,
+ {0x02dd, 0xa8} /* double acute accent */,
+ {0x0301, 0xb4} /* combining acute accent */,
+ {0x0303, 0x98} /* combining tilde */,
+ {0x0304, 0xaf} /* combining macron */,
+ {0x0305, 0xaf} /* combining overline */,
+ {0x0306, 0x88} /* combining breve */,
+ {0x0307, 0xb7} /* combining dot above */,
+ {0x0308, 0xa8} /* combining diaeresis */,
+ {0x030a, 0xa7} /* combining ring above */,
+ {0x030c, 0x88} /* combining caron */,
+ {0x030e, 0xa8} /* combining double vertical line above */,
+ {0x0327, 0xb8} /* combining cedilla */,
+ {0x03b2, 0xdf} /* greek small letter beta */,
+ {0x03bc, 0xb5} /* greek small letter mu */,
+ {0x2024, 0x95} /* one dot leader */,
+ {0x2033, 0xa8} /* double prime */,
+ {0x2070, 0xb0} /* superscript zero */,
+ {0x2080, 0xb0} /* subscript zero */,
+ {0x2082, 0xb2} /* subscript two */,
+ {0x2083, 0xb3} /* subscript three */,
+ {0x20a4, 0xa3} /* lira sign */,
+ {0x212b, 0xc5} /* angstrom sign */,
+ {0x2190, 0x8b} /* leftwards arrow */,
+ {0x2192, 0x9b} /* rightwards arrow */,
+ {0x2205, 0xd8} /* empty set */,
+ {0x2213, 0xb1} /* minus-or-plus sign */,
+ {0x2218, 0xb0} /* ring operator */,
+ {0x2219, 0x95} /* bullet operator */,
+ {0x226a, 0xab} /* much less-than */,
+ {0x226b, 0xbb} /* much greater-than */,
+ {0x22c5, 0xb7} /* dot operator */,
+ {0x2302, 0xa6} /* house */,
+ {0x2500, 0xa6} /* box drawings light horizontal */,
+ {0x2510, 0xac} /* box drawings light down and left */,
+ {0x2551, 0xa6} /* box drawings double vertical */,
+ {0x2557, 0xac} /* box drawings double down and left */,
+ {0x2560, 0xa6} /* box drawings double vertical and right */,
+ {0x2563, 0xa6} /* box drawings double vertical and left */,
+ {0x2569, 0xa6} /* box drawings double up and horizontal */,
+ {0x25a0, 0xa6} /* black square */,
+ {0x25bc, 0xa1} /* black down-pointing triangle */,
+ {0x25d8, 0x95} /* inverse bullet */,
+ {0x2660, 0xa6} /* black spade suit */,
+ {0x2663, 0xa6} /* black club suit */,
+ {0x2665, 0xa6} /* black heart suit */,
+ {0x2666, 0xa6} /* black diamond suit */,
+ {0x275b, 0x91} /* heavy single turned comma quotation mark ornament */,
+ {0x275c, 0x92} /* heavy single comma quotation mark ornament */,
+ {0x275d, 0x93} /* heavy double turned comma quotation mark ornament */,
+ {0x275e, 0x94} /* heavy double comma quotation mark ornament */,
+ {0x300a, 0xab} /* left double angle bracket */,
+ {0x300b, 0xbb} /* right double angle bracket */,
+ {0x301f, 0x84} /* low double prime quotation mark */,
+ {0x30fb, 0xb7} /* katakana middle dot */,
+ {0x30fc, 0x97} /* katakana-hiragana prolonged sound mark */
+};
+
+#define cet_ucs4_to_cp1254_extra_ct sizeof(cet_ucs4_to_cp1254_extra) / sizeof(cet_ucs4_to_cp1254_extra[0])
cet_cs_vec_t cet_cs_vec_cp1254 = /* defined in cet.h */
{
cet_ucs4_to_cp1254_links, /* UCS-4 to char links */
cet_ucs4_to_cp1254_ct, /* number of links */
- NULL, /* hand made UCS-4 links */
- 0, /* number of extra links */
+ cet_ucs4_to_cp1254_extra, /* hand made UCS-4 links */
+ cet_ucs4_to_cp1254_extra_ct, /* number of extra links */
NULL /* for internal use */
};
{0x2122, 0x99} /* mark sign */
};
-/*
-#define cet_ucs4_to_cp1255_extra_ct 0
-const cet_ucs4_link_t cet_ucs4_to_cp1255_extra[cet_ucs4_to_cp1255_extra_ct] = {};
-*/
+/* Extra table was generated from bestfit1255.txt located at
+ ftp.unicode.org:/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/ */
+
+const cet_ucs4_link_t cet_ucs4_to_cp1255_extra[] =
+{
+ {0x02c6, 0x88} /* modifier letter circumflex */,
+ {0x02dc, 0x98} /* spacing tilde */,
+ {0x05b0, 0xc0} /* hebrew point sheva */,
+ {0x05b1, 0xc1} /* hebrew point hataf segol */,
+ {0x05b2, 0xc2} /* hebrew point hataf patah */,
+ {0x05b3, 0xc3} /* hebrew point hataf qamats */,
+ {0x05b4, 0xc4} /* hebrew point hiriq */,
+ {0x05b5, 0xc5} /* hebrew point tsere */,
+ {0x05b6, 0xc6} /* hebrew point segol */,
+ {0x05b7, 0xc7} /* hebrew point patah */,
+ {0x05b8, 0xc8} /* hebrew point qamats */,
+ {0x05b9, 0xc9} /* hebrew point holam */,
+ {0x05ba, 0xca} /* hebrew point ???? */,
+ {0x05bb, 0xcb} /* hebrew point qubuts */,
+ {0x05bc, 0xcc} /* hebrew point dagesh */,
+ {0x05bd, 0xcd} /* hebrew point meteg */,
+ {0x05be, 0xce} /* hebrew punctuation maqaf */,
+ {0x05bf, 0xcf} /* hebrew point rafe */,
+ {0x05c0, 0xd0} /* hebrew point paseq */,
+ {0x05c1, 0xd1} /* hebrew point shin dot */,
+ {0x05c2, 0xd2} /* hebrew point sin dot */,
+ {0x05c3, 0xd3} /* hebrew punctuation sof pasuq */,
+ {0x05f0, 0xd4} /* hebrew ligature yiddish double vav */,
+ {0x05f1, 0xd5} /* hebrew ligature yiddish vav yod */,
+ {0x05f2, 0xd6} /* hebrew ligature yiddish double yod */,
+ {0x05f3, 0xd7} /* hebrew punctuation geresh */,
+ {0x05f4, 0xd8} /* hebrew punctuation gershayim */,
+ {0x20aa, 0xa4} /* new sheqel sign */
+};
+
+#define cet_ucs4_to_cp1255_extra_ct sizeof(cet_ucs4_to_cp1255_extra) / sizeof(cet_ucs4_to_cp1255_extra[0])
cet_cs_vec_t cet_cs_vec_cp1255 = /* defined in cet.h */
{
cet_ucs4_to_cp1255_links, /* UCS-4 to char links */
cet_ucs4_to_cp1255_ct, /* number of links */
- NULL, /* hand made UCS-4 links */
- 0, /* number of extra links */
+ cet_ucs4_to_cp1255_extra, /* hand made UCS-4 links */
+ cet_ucs4_to_cp1255_extra_ct, /* number of extra links */
NULL /* for internal use */
};
{0x3113, 0xd0} /* letter zh */
};
-/*
-#define cet_ucs4_to_cp1256_extra_ct 0
-const cet_ucs4_link_t cet_ucs4_to_cp1256_extra[cet_ucs4_to_cp1256_extra_ct] = {};
-*/
+/* Extra table was generated from bestfit1256.txt located at
+ ftp.unicode.org:/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/ */
+
+const cet_ucs4_link_t cet_ucs4_to_cp1256_extra[] =
+{
+ {0x0152, 0x8c} /* latin capital letter o e */,
+ {0x0153, 0x9c} /* latin small letter o e */,
+ {0x0192, 0x83} /* latin small letter script f */,
+ {0x02c6, 0x88} /* modifier letter circumflex */,
+ {0x060c, 0xa1} /* arabic comma */,
+ {0x0638, 0xd9} /* arabic letter dhah */,
+ {0x0679, 0x8a} /* arabic letter tteh */,
+ {0x0688, 0x8f} /* arabic letter ddal */,
+ {0x0691, 0x9a} /* arabic letter rreh */,
+ {0x06a9, 0x98} /* arabic letter keheh */,
+ {0x06ba, 0x9f} /* arabic letter noon ghunna */,
+ {0x06be, 0xaa} /* arabic letter heh doachashmee */,
+ {0x06c1, 0xc0} /* arabic letter heh goal */,
+ {0x06cc, 0xed} /* best-fit : farsi yeh -> arabic yeh (u+064a) */,
+ {0x06d2, 0xff} /* arabic letter yeh barree */,
+ {0x200c, 0x9d} /* zero width non-joiner */,
+ {0x200d, 0x9e} /* zero width joiner */,
+ {0x2030, 0x89} /* per mille sign */
+};
+
+#define cet_ucs4_to_cp1256_extra_ct sizeof(cet_ucs4_to_cp1256_extra) / sizeof(cet_ucs4_to_cp1256_extra[0])
cet_cs_vec_t cet_cs_vec_cp1256 = /* defined in cet.h */
{
cet_ucs4_to_cp1256_links, /* UCS-4 to char links */
cet_ucs4_to_cp1256_ct, /* number of links */
- NULL, /* hand made UCS-4 links */
- 0, /* number of extra links */
+ cet_ucs4_to_cp1256_extra, /* hand made UCS-4 links */
+ cet_ucs4_to_cp1256_extra_ct, /* number of extra links */
NULL /* for internal use */
};
{0x2122, 0x99} /* mark sign */
};
-/*
-#define cet_ucs4_to_cp1257_extra_ct 0
-const cet_ucs4_link_t cet_ucs4_to_cp1257_extra[cet_ucs4_to_cp1257_extra_ct] = {};
-*/
+/* Extra table was generated from bestfit1257.txt located at
+ ftp.unicode.org:/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/ */
+
+const cet_ucs4_link_t cet_ucs4_to_cp1257_extra[] =
+{
+ {0x02c7, 0x8e} /* hacek */,
+ {0x02d9, 0xff} /* dot above */,
+ {0x02db, 0x9e} /* ogonek */,
+};
+
+#define cet_ucs4_to_cp1257_extra_ct sizeof(cet_ucs4_to_cp1257_extra) / sizeof(cet_ucs4_to_cp1257_extra[0])
cet_cs_vec_t cet_cs_vec_cp1257 = /* defined in cet.h */
{
cet_ucs4_to_cp1257_links, /* UCS-4 to char links */
cet_ucs4_to_cp1257_ct, /* number of links */
- NULL, /* hand made UCS-4 links */
- 0, /* number of extra links */
+ cet_ucs4_to_cp1257_extra, /* hand made UCS-4 links */
+ cet_ucs4_to_cp1257_extra_ct, /* number of extra links */
NULL /* for internal use */
};
Character encoding transformation - utilities
- Copyright (C) 2005 Olaf Klein, o.b.klein@gpsbabel.org
+ Copyright (C) 2005,2006,2007 Olaf Klein, o.b.klein@gpsbabel.org
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
static int cet_cs_vec_ct = 0;
static int cet_output = 0;
-/* %%% short hand strings transmission for main character sets %%% */
+/* %%% fixed inbuild character sets %%% */
+#include "cet/ansi_x3_4_1968.h"
#include "cet/iso_8859_1.h"
+#include "cet/iso_8859_15.h"
+#include "cet/cp1252.h"
+
+/* %%% short hand strings transmission for main character sets %%% */
+
char *
cet_str_utf8_to_iso8859_1(const char *src)
{
return cet_str_any_to_utf8(src, &cet_cs_vec_iso_8859_1);
}
-#include "cet/iso_8859_15.h"
-
char *
cet_str_utf8_to_iso8859_15(const char *src)
{
return cet_str_any_to_utf8(src, &cet_cs_vec_iso_8859_15);
}
-#include "cet/ansi_x3_4_1968.h"
-
char *
cet_str_utf8_to_us_ascii(const char *src)
{
return cet_str_any_to_utf8(src, &cet_cs_vec_ansi_x3_4_1968);
}
-#include "cet/cp1252.h"
-
char *
cet_str_utf8_to_cp1252(const char *src)
{
cet_check_cs(cet_cs_vec_t *vec) /* test well sorted link & extra tables */
{
cet_ucs4_link_t *link;
-
+
if ((link = (cet_ucs4_link_t *)vec->ucs4_link))
{
int i, j;
qsort(list, c, sizeof(*list), cet_cs_alias_qsort_cb);
cet_cs_alias = list;
cet_cs_alias_ct = c;
+
+ /* install fallback for ascii-like (first 128 ch.) character sets */
+ for (i = 1250; i <= 1258; i++) {
+ char name[16];
+ cet_cs_vec_t *vec;
+
+ snprintf(name, sizeof(name), "WIN-CP%d", i);
+ if ((vec = cet_find_cs_by_name(name)))
+ vec->fallback = &cet_cs_vec_ansi_x3_4_1968;
+ }
+ for (i = 1; i <= 15; i++) {
+ char name[16];
+ cet_cs_vec_t *vec;
+
+ snprintf(name, sizeof(name), "ISO-8859-%d", i);
+ if ((vec = cet_find_cs_by_name(name)))
+ vec->fallback = &cet_cs_vec_ansi_x3_4_1968;
+ }
+ }
#ifdef CET_DEBUG
printf("We have registered %d character sets with %d aliases\n", cet_cs_vec_ct, cet_cs_alias_ct);
#endif
- }
}
cet_cs_vec_t *
}
}
+/* -------------------------------------------------------------------- */
+
+static void
+cet_flag_waypt(const waypoint *wpt)
+{
+ ((waypoint *)(wpt))->wpt_flags.cet_converted = 1;
+}
+
+static void
+cet_flag_route(const route_head *rte)
+{
+ ((route_head *)(rte))->cet_converted = 1;
+}
+
+static void
+cet_flag_all(void)
+{
+ waypt_disp_all(cet_flag_waypt);
+ route_disp_all(cet_flag_route, NULL, cet_flag_waypt);
+ track_disp_all(cet_flag_route, NULL, cet_flag_waypt);
+}
+
/* -------------------------------------------------------------------- */
/* %%% complete data strings transformation %%% */
/* -------------------------------------------------------------------- */
{
waypoint *w = (waypoint *)wpt;
format_specific_data *fs;
+ url_link *url_next;
if ((cet_output == 0) && (w->wpt_flags.cet_converted != 0)) return;
w->notes = cet_convert_string(wpt->notes);
w->url = cet_convert_string(wpt->url);
w->url_link_text = cet_convert_string(wpt->url_link_text);
+ for (url_next = w->url_next; url_next; url_next = url_next->url_next) {
+ url_next->url = cet_convert_string(url_next->url);
+ url_next->url_link_text = cet_convert_string(url_next->url_link_text);
+ }
fs = wpt->fs;
while (fs != NULL)
if ((source == NULL) || (source == &cet_cs_vec_utf8))
{
- if ((target == NULL) || (target == &cet_cs_vec_utf8)) return; /* Nothing to do */
-
- cet_output = 1;
+ if ((target == NULL) || (target == &cet_cs_vec_utf8)) {
+ cet_flag_all();
+ return;
+ }
- converter = cet_convert_from_utf8;
- cs_name_from = (char *)cet_cs_vec_utf8.name;
- cs_name_to = (char *)target->name;
+ cet_output = 1;
+
+ converter = cet_convert_from_utf8;
+ cs_name_from = (char *)cet_cs_vec_utf8.name;
+ cs_name_to = (char *)target->name;
}
- else
- {
- if ((target != NULL) && (target != &cet_cs_vec_utf8))
- fatal(MYNAME ": Internal error!\n");
- converter = cet_convert_to_utf8;
- cs_name_to = (char *)cet_cs_vec_utf8.name;
- cs_name_from = (char *)source->name;
+ else {
+ if ((target != NULL) && (target != &cet_cs_vec_utf8))
+ fatal(MYNAME ": Internal error!\n");
+
+ cet_output = 0;
+
+ converter = cet_convert_to_utf8;
+ cs_name_to = (char *)cet_cs_vec_utf8.name;
+ cs_name_from = (char *)source->name;
}
if (global_opts.debug_level > 0)
- printf(MYNAME ": Converting from \"%s\" to \"%s\"", cs_name_from, cs_name_to);
+ printf(MYNAME ": Converting from \"%s\" to \"%s\"", cs_name_from, cs_name_to);
waypt_disp_all(cet_convert_waypt);
route_disp_all(cet_convert_route_hdr, cet_convert_route_tlr, cet_convert_waypt);
cet_output = 0;
if (global_opts.debug_level > 0)
- printf(", done.\n");
+ printf(", done.\n");
}
/* %%% cet_disp_character_set_names %%%
#include "defs.h"
#if PDBFMTS_ENABLED
-#include "coldsync/palm.h"
-#include "coldsync/pdb.h"
-#
+#include "pdbfile.h"
+
#define MYNAME "Cetus"
#define MYTYPE_WPT 0x43577074 /* CWpt */
#define MYTYPE_TRK 0x7374726d /* strm */
#define TRACK_POINT_SIZE sizeof(struct cetus_track_point_s)
-static FILE *file_in;
-static FILE *file_out;
+static pdbfile *file_in, *file_out;
static const char *out_fname;
-static struct pdb *opdb;
-static struct pdb_record *opdb_rec;
static short_handle mkshort_wr_handle;
+static int ct;
static char *dbname = NULL;
static char *appendicon = NULL;
if (data->hdop != -1) wpt->hdop = (float) data->hdop / 10;
i = be_read16(&data->speed);
- if (i != 10000) wpt->speed = ((float) i / 10) * 0.514444; /* meters/second */
+ if (i != 10000) WAYPT_SET(wpt, speed, KNOTS_TO_MPS((float) i / 10)); /* meters/second */
i = be_read16(&data->course);
- if (i != 4000) wpt->course = (float) i / 10;
+ if (i != 4000) WAYPT_SET(wpt, course, (float) i / 10);
switch(data->hour / 32) /* extract fix */
{
static void
-read_tracks(const struct pdb *pdb)
+read_tracks(const pdbfile *pdb)
{
- struct pdb_record *pdb_rec;
+ pdbrec_t *pdb_rec;
int reclen, records, total, points, dropped;
char descr[(2 * TRACK_POINT_SIZE) + 1];
char temp_descr[TRACK_POINT_SIZE + 1];
dropped = 0;
basetime = 0;
- for (pdb_rec = pdb->rec_index.rec; pdb_rec != NULL; pdb_rec = pdb_rec->next)
+ for (pdb_rec = pdb->rec_list; pdb_rec; pdb_rec = pdb_rec->next)
{
int i, magic;
char *c = (char *)pdb_rec->data;
}
static void
-read_waypts(const struct pdb *pdb)
+read_waypts(const pdbfile *pdb)
{
struct cetus_wpt_s *rec;
- struct pdb_record *pdb_rec;
+ pdbrec_t *pdb_rec;
char *vdata;
- for(pdb_rec = pdb->rec_index.rec; pdb_rec; pdb_rec=pdb_rec->next)
+ for(pdb_rec = pdb->rec_list; pdb_rec; pdb_rec = pdb_rec->next)
{
waypoint *wpt_tmp;
int i;
static void
rd_init(const char *fname)
{
- file_in = xfopen(fname, "rb", MYNAME);
+ file_in = pdb_open(fname, MYNAME);
}
static void
rd_deinit(void)
{
- fclose(file_in);
+ pdb_close(file_in);
if ( dbname ) {
xfree(dbname);
dbname = NULL;
static void
wr_init(const char *fname)
{
- file_out = xfopen(fname, "wb", MYNAME);
+ file_out = pdb_create(fname, MYNAME);
out_fname = fname;
+ ct = 0;
}
static void
wr_deinit(void)
{
- fclose(file_out);
+ pdb_close(file_out);
if ( dbname ) {
xfree(dbname);
dbname = NULL;
static void
data_read(void)
{
- struct pdb *pdb;
-
- if (NULL == (pdb = pdb_Read(fileno(file_in)))) {
- fatal(MYNAME ": pdb_Read failed\n");
- }
+ pdbfile *pdb = file_in;
if (pdb->creator != MYCREATOR) fatal(MYNAME ": Not a Cetus file.\n");
read_waypts(pdb);
break;
}
- free_pdb(pdb);
}
cetus_writewpt(const waypoint *wpt)
{
struct cetus_wpt_s *rec;
- static int ct;
struct tm *tm;
char *vdata;
char *desc_long;
rec->mon = 0xff;
be_write16(&rec->year, 0xff);
}
-
- be_write32(&rec->longitude, (unsigned int) (wpt->longitude * 10000000.0));
+ be_write32(&rec->longitude, (unsigned int) (int) (wpt->longitude * 10000000.0));
be_write32(&rec->latitude, (unsigned int) (wpt->latitude * 10000000.0));
if ( wpt->altitude == unknown_alt ) {
be_write32(&rec->elevation, -100000000);
}
vdata += strlen( vdata ) + 1;
- opdb_rec = new_Record (0, 2, ct++, (uword) (vdata-(char *)rec), (const ubyte *)rec);
+ pdb_write_rec(file_out, 0, 2, ct++, rec, (char *)vdata - (char *)rec);
- if (opdb_rec == NULL) {
- fatal(MYNAME ": libpdb couldn't create record\n");
- }
-
- if (pdb_AppendRecord(opdb, opdb_rec)) {
- fatal(MYNAME ": libpdb couldn't append record\n");
- }
xfree(rec);
}
setshort_length(mkshort_wr_handle, 15);
setshort_whitespace_ok(mkshort_wr_handle, 0);
- if (NULL == (opdb = new_pdb())) {
- fatal (MYNAME ": new_pdb failed\n");
- }
-
if ( dbname ) {
- strncpy( opdb->name, dbname, PDB_DBNAMELEN );
+ strncpy( file_out->name, dbname, PDB_DBNAMELEN );
}
else {
- strncpy(opdb->name, out_fname, PDB_DBNAMELEN);
+ strncpy(file_out->name, out_fname, PDB_DBNAMELEN);
}
- opdb->name[PDB_DBNAMELEN-1] = 0;
- opdb->attributes = PDB_ATTR_BACKUP;
- opdb->ctime = opdb->mtime = current_time() + 2082844800U;
- opdb->type = MYTYPE_WPT; /* CWpt */
- opdb->creator = MYCREATOR; /* cGPS */
- opdb->version = 1;
+ file_out->name[PDB_DBNAMELEN-1] = 0;
+ file_out->attr = PDB_FLAG_BACKUP;
+ file_out->ctime = file_out->mtime = current_time() + 2082844800U;
+ file_out->type = MYTYPE_WPT; /* CWpt */
+ file_out->creator = MYCREATOR; /* cGPS */
+ file_out->version = 1;
/*
* All this is to sort by waypoint names before going to Cetus.
cetus_writewpt(htable[i].wpt);
}
- pdb_Write(opdb, fileno(file_out));
xfree(htable);
mkshort_del_handle(&mkshort_wr_handle);
}
+++ /dev/null
-$Id: Artistic,v 1.1 2002/08/16 15:54:46 robertl Exp $
-
-
-
- The "Artistic License"
-
- Preamble
-
-The intent of this document is to state the conditions under which a
-Package may be copied, such that the Copyright Holder maintains some
-semblance of artistic control over the development of the package,
-while giving the users of the package the right to use and distribute
-the Package in a more-or-less customary fashion, plus the right to make
-reasonable modifications.
-
-Definitions:
-
- "Package" refers to the collection of files distributed by the
- Copyright Holder, and derivatives of that collection of files
- created through textual modification.
-
- "Standard Version" refers to such a Package if it has not been
- modified, or has been modified in accordance with the wishes
- of the Copyright Holder as specified below.
-
- "Copyright Holder" is whoever is named in the copyright or
- copyrights for the package.
-
- "You" is you, if you're thinking about copying or distributing
- this Package.
-
- "Reasonable copying fee" is whatever you can justify on the
- basis of media cost, duplication charges, time of people involved,
- and so on. (You will not be required to justify it to the
- Copyright Holder, but only to the computing community at large
- as a market that must bear the fee.)
-
- "Freely Available" means that no fee is charged for the item
- itself, though there may be fees involved in handling the item.
- It also means that recipients of the item may redistribute it
- under the same conditions they received it.
-
-1. You may make and give away verbatim copies of the source form of the
-Standard Version of this Package without restriction, provided that you
-duplicate all of the original copyright notices and associated disclaimers.
-
-2. You may apply bug fixes, portability fixes and other modifications
-derived from the Public Domain or from the Copyright Holder. A Package
-modified in such a way shall still be considered the Standard Version.
-
-3. You may otherwise modify your copy of this Package in any way, provided
-that you insert a prominent notice in each changed file stating how and
-when you changed that file, and provided that you do at least ONE of the
-following:
-
- a) place your modifications in the Public Domain or otherwise make them
- Freely Available, such as by posting said modifications to Usenet or
- an equivalent medium, or placing the modifications on a major archive
- site such as uunet.uu.net, or by allowing the Copyright Holder to include
- your modifications in the Standard Version of the Package.
-
- b) use the modified Package only within your corporation or organization.
-
- c) rename any non-standard executables so the names do not conflict
- with standard executables, which must also be provided, and provide
- a separate manual page for each non-standard executable that clearly
- documents how it differs from the Standard Version.
-
- d) make other distribution arrangements with the Copyright Holder.
-
-4. You may distribute the programs of this Package in object code or
-executable form, provided that you do at least ONE of the following:
-
- a) distribute a Standard Version of the executables and library files,
- together with instructions (in the manual page or equivalent) on where
- to get the Standard Version.
-
- b) accompany the distribution with the machine-readable source of
- the Package with your modifications.
-
- c) give non-standard executables non-standard names, and clearly
- document the differences in manual pages (or equivalent), together
- with instructions on where to get the Standard Version.
-
- d) make other distribution arrangements with the Copyright Holder.
-
-5. You may charge a reasonable copying fee for any distribution of this
-Package. You may charge any fee you choose for support of this
-Package. You may not charge a fee for this Package itself. However,
-you may distribute this Package in aggregate with other (possibly
-commercial) programs as part of a larger (possibly commercial) software
-distribution provided that you do not advertise this Package as a
-product of your own. You may embed this Package's interpreter within
-an executable of yours (by linking); this shall be construed as a mere
-form of aggregation, provided that the complete Standard Version of the
-interpreter is so embedded.
-
-6. The scripts and library files supplied as input to or produced as
-output from the programs of this Package do not automatically fall
-under the copyright of this Package, but belong to whoever generated
-them, and may be sold commercially, and may be aggregated with this
-Package. If such scripts or library files are aggregated with this
-Package via the so-called "undump" or "unexec" methods of producing a
-binary executable image, then distribution of such an image shall
-neither be construed as a distribution of this Package nor shall it
-fall under the restrictions of Paragraphs 3 and 4, provided that you do
-not represent such an executable image as a Standard Version of this
-Package.
-
-7. C subroutines (or comparably compiled subroutines in other
-languages) supplied by you and linked into this Package in order to
-emulate subroutines and variables of the language defined by this
-Package shall not be considered part of this Package, but are the
-equivalent of input as in Paragraph 6, provided these subroutines do
-not change the language in any way that would cause it to fail the
-regression tests for the language.
-
-8. Aggregation of this Package with a commercial distribution is always
-permitted provided that the use of this Package is embedded; that is,
-when no overt attempt is made to make this Package's interfaces visible
-to the end user of the commercial distribution. Such use shall not be
-construed as a distribution of this Package.
-
-9. The name of the Copyright Holder may not be used to endorse or promote
-products derived from this software without specific prior written permission.
-
-10. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
-IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
-WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-
- The End
+++ /dev/null
- This is ColdSync, a tool for synchronizing data between Palm
-devices and Unix workstations.
-
- Copyright (C) 1999-2001, Andrew Arensburger.
-
- The latest version of this package is available at
- http://www.ooblick.com/software/coldsync/
-
- This package is distributable under the terms of the Artistic
-License. You should have received a file called "Artistic", which
-specifies the terms under which this package may be distributed and
-modified.
- The Artistic License is taken from the Perl 5.005_03
-distribution, so some of the text is specific to Perl and does not
-apply to ColdSync. I hope to address this in a future release.
-
- This product includes software developed by the University of
-California, Berkeley and its contributors.
-
- This product includes software developed by the Apache Group
-for use in the Apache HTTP server project (http://www.apache.org/).
- (Actually, the Apache code in question was written by Panos
-Tsirigotis. See comments in "src/ap_snprintf.c".)
-
- ----------------------------------------
-
-* WHAT IS COLDSYNC?
-
- ColdSync is a tool for synchronizing data between Palm
-computing devices (such as the PalmPilot, PalmPilot Pro, Palm V,
-QualComm PDQ, Handspring Visor and so forth), and a Unix workstation.
- ColdSync can back up and restore the state of a Palm, as well
-as synchronize its data, which is sort of like a two-way rdist (see
-below). In future versions, it will be possible to do more interesting
-things with this data.
-
-* WHAT YOU'LL NEED
-
- - A POSIX-compliant operating system, preferably some flavor
- of Unix
- - An ANSI C compiler
- - An ANSI C++ compiler
- - Perl 5.005_03 or later (though earlier versions might work)
-
-* BUILDING AND INSTALLING COLDSYNC
-
- If you've built GNU software before, this should be familiar
-territory. You should be able to just
-
- ./configure
- make
- make install
-
-Full details are provided in the "INSTALL" file.
-
-* WHAT IS SYNCHRONIZING?
-
- Synchronizing, also referred to as "syncing" refers to the
-process of examining two databases (everything on the Palm is a
-database) to see how they differ, and updating them so that they are
-identical.
- Syncing is different from just overwriting one database with
-the other. For instance, if you add an entry for "Aunt Mabel" in your
-Palm's address book, and an entry for "Uncle Bob" on your desktop
-machine, then you don't want to just copy the address book from the
-Palm to the desktop or vice-versa: that would delete one of the
-entries that you just created. When you sync with ColdSync, you'll
-wind up with both entries, on both the Palm and the desktop.
-
- Another difference between synchronizing and blind copying
-lies in the fact that PalmOS has facilities to support syncing. If you
-have 2000 entries in your Palm address book and want to copy them to
-the desktop, it'll take a rather long time to copy them over a
-relatively slow serial connection. When it syncs, ColdSync copies only
-those records that have changed.
-
- ColdSync tries to be very cautious when it syncs, and not
-delete any information unless it is sure that that is the right thing
-to do. Its attitude is that it's better to err on the side of caution,
-and maybe make you delete something twice, than it is to delete some
-crucial bit of information.
-
-* SECURITY CONSIDERATIONS
-
- ColdSync is not secure. Period.
- I have tried to pay due attention to security considerations,
-but the sync process itself is inherently insecure. When ColdSync,
-running on a workstation, receives a connection from a Palm, it has no
-reliable way of knowing that the Palm on the other end is in fact the
-one that it claims to be.
- Likewise, when a Palm syncs with a workstation (whether that
-workstation is using ColdSync or Palm's own HotSync), it has no
-reliable way of knowing that the workstation is the one that it claims
-to be.
- PalmOS allows you to mark records as "private." This doesn't
-mean a thing when you sync: the private and non-private records are
-treated equally. In particular, anyone who has physical access to your
-Palm can download your private records.
-
- There may be a Palm utility out there that will encrypt each
-record in a database before a sync, but I don't know of any such
-utility.
-
-* INTERNATIONALIZATION
-
- ColdSync includes some internationalization (i18n) support. It
-is believed to work on all platforms with a Uniforum-compliant libintl
-(gettext()). ColdSync does not work with XPG i18n (catgets() etc.).
- However, you need GNU xgettext to compile the message catalog
-("i18n/messages.po") from the source files.
-
- ----------------------------------------
-
-COMPATIBILITY NOTES
-
-* ColdSync 2.2.4
-
-FreeBSD:
- This package was developed under FreeBSD 3.x/4.x, and compiles
- cleanly with no modification under 4.2-RELEASE.
-
- On newer versions of FreeBSD (4.0 and beyond), it's possible
- to communicate with the Handspring Visor using its USB
- interface. Configure a listen type of "usb" rather than
- "serial", and use device /dev/ugen0.
-
-Redhat Linux 6.2 (also Debian, and probably others):
- (as of ColdSync v1.6.6-20010130)
- Compiles cleanly with no modifications. Runs fine.
-
- The Linux serial device driver appears to drop characters at
- random. As a result, you may see a lot of
-
- ##### Got an unexpected data packet. Sending an ACK to shut it up.
-
- messages.
-
-Solaris 2.7:
- (as of v2.2.4)
- There are still some problems with ColdSync's IPv6 code under
- Solaris 2.6 and later. You'll need to use
- ./configure --without-ipv6
-
- (as of v2.2.0-20010805)
- Compiles with Sun Forte 6U1.
-
- ColdSync is known not to work with Sun's i18n utilities.
- ColdSync should detect this, and disable i18n.
-
-Digital Unix 4.0:
- (as of ColdSync v2.4.4-20011113)
- DEC's linker chokes on the overly-long identifiers produced by
- the STL. GNU ld might work.
-
- (as of ColdSync v1.6.6-20010130)
- Compiles with gcc 2.7.2. Compilation prints several warnings;
- they appear to be benign:
-
- PConnection_serial.c:444: warning: implicit declaration of function `cfmakeraw'
- PConnection_net.c:281: warning: passing arg 6 of `_Erecvfrom' from incompatiblepointer type
- PConnection_net.c:674: warning: passing arg 6 of `_Erecvfrom' from incompatiblepointer type
- PConnection_net.c:872: warning: passing arg 3 of `_Eaccept' from incompatible pointer type
- config.c:964: warning: overflow in implicit constant conversion
- GenericConduit.cc:82: warning: unused parameter `const struct conduit_block * block'
-
- If you are using DEC's C compiler, I suggest the following
- compiler flags:
- -std1 -msg_enable level3
-
-
-AIX 4.1:
- (as of ColdSync v1.1.2)
- Compiles with gcc 2.7.2, but when linking, complains that:
-
- ld: 0711-224 WARNING: Duplicate symbol: _IO_cleanup_registration_needed
- ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information.
-
- This may be a problem with the installation, though (the same
- thing happens when compiling "Hello, world").
-
- I've only compiled it. I don't know whether it actually runs.
-
-If you have any updated information, please send it in to the
-maintainer (arensb@ooblick.com). My testing pool isn't as large as it
-once was.
-
-Windows NT:
- (as of ColdSync 1.4.5)
- To the best of my knowledge, ColdSync compiles and runs under
- Windows NT with the Cygwin tools.
-
- However, ColdSync was written as a Unix tool. Windows users
- have the HotSync desktop tools from Palm, which work quite
- well. If ColdSync works under Windows, that's wonderful, but
- I'm not going to let Windows compatibility get in the way of
- Unix development.
-
-MacOS X:
- (as of ColdSync 1.4.6)
-
- According to one correspondent, ColdSync compiles and runs
- with no problems under MacOS X.
- The serial port should be /dev/ttyd.printer .
-
- ----------------------------------------
-
-BUGS:
- If you create a Memo record, delete it without leaving the
-editor, and check the "Save archive copy on PC" box, it will be
-archived, but the archived record may contain trailing garbage.
- This is due to a bug in PalmOS (as of 3.0).
+++ /dev/null
-This directory is a subset of coldsync-2.2.5. GPSbabel needs very
-limited set of that functionality to read and write Palm/OS files.
-I was faced with either reimplementing it (and I DON'T want to
-become a Palm/OS expert) or cribbing the code. Since it's all under
-Artistic license, I took libpdb and the includes, whacked out the most
-horribly non-portable pieces, jacked in a constant config.h, and pointed
-the makefiles to it.
-
-Thanx to the ColdSync guys for figuring this stuff out!
-
+++ /dev/null
-/*
- * Assume we're on a conformant ISO C platform.
- */
-
-
-#define STDC_HEADERS 1
-#define _(str) str
-#define inline
+++ /dev/null
-/* palm.h
- * Definitions of various types that PalmOS likes to use.
- *
- * Copyright (C) 2001, Andrew Arensburger.
- * You may distribute this file under the terms of the Artistic
- * License, as specified in the README file.
- *
- * $Id: palm.h,v 1.2 2005/10/24 18:26:30 robertl Exp $
- */
-#ifndef _palm_h_
-#define _palm_h_
-
-#include "../gbtypes.h"
-
-/* Convenience types */
-typedef signed char byte; /* Signed 8-bit quantity */
-typedef unsigned char ubyte; /* Unsigned 8-bit quantity */
-typedef gbint16 word; /* Signed 16-bit quantity */
-typedef gbuint16 uword; /* Unsigned 16-bit quantity */
-typedef gbint32 dword; /* Signed 32-bit quantity */
-typedef gbuint32 udword; /* Unsigned 32-bit quantity */
-
-typedef udword chunkID; /* Those IDs made up of four
- * characters stuck together into a
- * 32-bit quantity.
- */
-
-/* Explicitly define the sizes of types. Can't depend on the host's types
- * having the same size as the Palm. For instance, Alphas are 64-bit
- * machines, so 'unsigned long' is 8 bytes, whereas 'udword' is only 4
- * bytes.
- */
-#define SIZEOF_BYTE 1
-#define SIZEOF_UBYTE 1
-#define SIZEOF_WORD 2
-#define SIZEOF_UWORD 2
-#define SIZEOF_DWORD 4
-#define SIZEOF_UDWORD 4
-
-/* MAKE_CHUNKID
- * A convenience macro to make a chunkID out of four characters.
- */
-#define MAKE_CHUNKID(a,b,c,d) \
- (((a) << 24) | \
- ((b) << 16) | \
- ((c) << 8) | \
- (d))
-
-/* XXX - There ought to be something to make sure that the sizes and
- * signedness above are true.
- */
-
-typedef enum { False = 0, True = 1 } Bool;
-
-#endif /* _palm_h_ */
+++ /dev/null
-/* util.h
- * Misc. useful stuff.
- *
- * Copyright (C) 1999-2000, Andrew Arensburger.
- * You may distribute this file under the terms of the Artistic
- * License, as specified in the README file.
- *
- * $Id: util.h,v 1.2 2002/08/24 03:01:31 robertl Exp $
- */
-#ifndef _util_h_
-#define _util_h_
-
-#include <stdio.h>
-#include <time.h>
-#include "palm.h"
-
-/* XXX - The functions declared INLINE, below, really ought to be inline
- * functions. I'm not sure how to do this portably, though.
- */
-#ifdef __GNUC__
-# define INLINE __inline__
-#else
-# define INLINE
-#endif /* __GNUC__ */
-
-/* Functions for reading a value from an array of ubytes */
-extern INLINE ubyte peek_ubyte(const ubyte *buf);
-extern INLINE uword peek_uword(const ubyte *buf);
-extern INLINE udword peek_udword(const ubyte *buf);
-
-/* Functions for extracting values from an array of ubytes */
-extern INLINE ubyte get_ubyte(const ubyte **buf);
-extern INLINE uword get_uword(const ubyte **buf);
-extern INLINE udword get_udword(const ubyte **buf);
-
-/* Functions for writing values to an array of ubytes */
-extern INLINE void put_ubyte(ubyte **buf, const ubyte value);
-extern INLINE void put_uword(ubyte **buf, const uword value);
-extern INLINE void put_udword(ubyte **buf, const udword value);
-
-#if TIME
-/* Functions for converting between DLP's time format and Unix's
- * time_ts and the time_t-with-offset that the rest of the Palm stuff
- * uses.
- */
-extern time_t time_dlp2time_t(const struct dlp_time *dlpt);
-extern udword time_dlp2palmtime(const struct dlp_time *dlpt);
-extern void time_time_t2dlp(const time_t t, struct dlp_time *dlpt);
-extern void time_palmtime2dlp(const udword palmt, struct dlp_time *dlpt);
-
-extern void debug_dump(FILE *outfile, const char *prefix,
- const ubyte *buf, const udword len);
-#endif
-#endif /* _util_h_ */
-
-\f/* This is for Emacs's benefit:
- * Local Variables: ***
- * fill-column: 75 ***
- * End: ***
- */
+++ /dev/null
-/* pdb.c
- *
- * Functions for dealing with Palm databases and such.
- *
- * Copyright (C) 1999-2001, Andrew Arensburger.
- * You may distribute this file under the terms of the Artistic
- * License, as specified in the README file.
- *
- * $Id: pdb.c,v 1.12 2006/07/13 03:27:53 robertl Exp $
- */
-/* XXX - The way zero-length records are handled is a bit of a kludge. They
- * shouldn't normally exist, with the exception of expunged records. But,
- * of course, a malformed conduit or something can create them.
- * The half-assed way they're handled here is to a) not upload zero-length
- * records to the Palm, b) warn the user if they're written to a file, c)
- * provide a utility (in the p5-Palm package) to delete zero-length
- * records.
- */
-/* XXX - This is a library. It shouldn't print error messages.
- * Add 'int pdb_errno'; define error numbers and error messages that go
- * with them.
- * Debugging messages should go to 'FILE *pdb_logfile'.
- */
-#include "config.h"
-#if PDBFMTS_ENABLED
-
-#include "cs-config.h"
-#include <stdio.h>
-#include <fcntl.h> /* For open() */
-#include <sys/types.h>
-/*
- * Unistd.h (indeed, read, write, and lseek) are not part of ISO C.
- * Systems may not have unistd.h. While the below is tacky, Windows
- * is the only system that we care about that has lseek and friends
- * but doesn't have it prototyped. Systems with 64-bit file I/O but
- * based on LP64 model (i.e. OS/X) _require_ the prototype for lseek.
- */
-#if defined (__WIN32__)
-#include <io.h>
-#define lseek _lseek
-#define write _write
-#define read _read
-#define close _close
-#else
-#include <unistd.h>
-#endif
-#include <stdlib.h>
-#include <time.h>
-
-#if STDC_HEADERS
-# include <string.h> /* For strncat(), memcpy() et al. */
-#else /* STDC_HEADERS */
-# ifndef HAVE_STRCHR
-# define strchr index
-# define strrchr rindex
-# endif /* HAVE_STRCHR */
-# ifndef HAVE_MEMCPY
-# define memcpy(d,s,n) bcopy ((s), (d), (n))
-# define memmove(d,s,n) bcopy ((s), (d), (n))
-# endif /* HAVE_MEMCPY */
-#endif /* STDC_HEADERS */
-
-/* XXX - Is this right? Should this be in the "else" clause, above? */
-#if HAVE_STRINGS_H
-# include <strings.h> /* For bzero() */
-#endif /* HAVE_STRINGS_H */
-
-#if HAVE_LIBINTL_H
-# include <libintl.h> /* For i18n */
-#endif /* HAVE_LIBINTL_H */
-
-#include <palm.h>
-#include "pdb.h"
-
-/* XXX - The functions declared INLINE, below, really ought to be inline
- * functions. I'm not sure how to do this portably, though.
- */
-#ifdef __GNUC__
-# define INLINE __inline__
-#else
-# define INLINE
-#endif /* __GNUC__ */
-
-/* Functions for extracting values from an array of ubytes */
-extern INLINE ubyte get_ubyte(const ubyte **buf);
-extern INLINE uword get_uword(const ubyte **buf);
-extern INLINE udword get_udword(const ubyte **buf);
-
-/* Functions for writing values to an array of ubytes */
-extern INLINE void put_ubyte(ubyte **buf, const ubyte value);
-extern INLINE void put_uword(ubyte **buf, const uword value);
-extern INLINE void put_udword(ubyte **buf, const udword value);
-extern void debug_dump(FILE *outfile, const char *prefix,
- const ubyte *buf, const udword len);
-
-int pdb_trace = 0; /* Debugging level for PDB stuff */
-#define PDB_TRACE(n) if (pdb_trace >= (n))
-
-/* Helper functions */
-static uword get_file_length(int fd);
-int pdb_LoadHeader(int fd, struct pdb *db);
- /* pdb_LoadHeader() is visible to other files */
-static int pdb_LoadRecListHeader(int fd, struct pdb *db);
-static int pdb_LoadRsrcIndex(int fd, struct pdb *db);
-static int pdb_LoadRecIndex(int fd, struct pdb *db);
-static int pdb_LoadAppBlock(int fd, struct pdb *db);
-static int pdb_LoadSortBlock(int fd, struct pdb *db);
-static int pdb_LoadResources(int fd, struct pdb *db);
-static int pdb_LoadRecords(int fd, struct pdb *db);
-
-/* merge_attributes
- * Takes a record's flags and category, and merges them into a single byte,
- * with the flags in the top nybble and the category in the bottom one
- */
-static inline ubyte
-merge_attributes(const ubyte flags,
- const ubyte category)
-{
- /* The PDB_REC_ARCHIVED flag is troublesome, since it overlaps the
- * category field. The idea here is that if the record was deleted,
- * then it doesn't have a category anymore, so the category part
- * gets set to 0.
- */
- if ((flags & PDB_REC_DELETED) == 0)
- return (flags & 0xf0) |
- (category & 0x0f);
- else
- return (flags & 0xf8);
-}
-
-/* split_attributes
- * The converse of merge_attributes(). Takes the combined field attributes
- * and writes its contents to *flags and *category, using the same rules as
- * merge_attributes(), above.
- */
-static inline void
-split_attributes(const ubyte attributes,
- ubyte *flags,
- ubyte *category)
-{
- if ((attributes & PDB_REC_DELETED) == 0)
- {
- *flags = (attributes & 0xf0);
- *category = (attributes & 0x0f);
- } else {
- *flags = (attributes & 0xf8);
- *category = 0;
- }
- PDB_TRACE(6)
- fprintf(stderr, "split 0x%02x into 0x%02x, 0x%02x\n",
- attributes, *flags, *category);
-}
-
-/* new_pdb
- * struct pdb constructor.
- */
-struct pdb *
-new_pdb()
-{
- struct pdb *retval;
-
- /* Allocate the new pdb */
- if ((retval = (struct pdb *) malloc(sizeof(struct pdb))) == NULL)
- /* Out of memory */
- return NULL;
-
- /* Write zeros all over it, just for safety */
- memset((void *) retval, 0, sizeof(struct pdb));
-
- return retval;
-}
-
-/* pdb_FreeRecord
- * Free a previously-allocated 'pdb_record'. This function wouldn't really
- * be necessary, except that pdb_CopyRecord() returns a 'pdb_record'.
- */
-void
-pdb_FreeRecord(struct pdb_record *rec)
-{
- if (rec->data != NULL)
- free(rec->data);
- free(rec);
-}
-
-/* pdb_FreeResource
- * Free a previously-allocated 'pdb_resource'. This function wouldn't
- * really be necessary, except that pdb_CopyResource() returns a
- * 'pdb_resource'.
- */
-void
-pdb_FreeResource(struct pdb_resource *rsrc)
-{
- if (rsrc->data != NULL)
- free(rsrc->data);
- free(rsrc);
-}
-
-/* free_pdb
- * Cleanly free a struct pdb, and all of its subparts (destructor).
- */
-void
-free_pdb(struct pdb *db)
-{
- PDB_TRACE(7)
- fprintf(stderr, "Inside free_pdb(%p)\n", (void *) db);
-
- if (db == NULL)
- /* Trivial case */
- return;
-
- /* Free the array of records/resources */
- if (IS_RSRC_DB(db))
- {
- /* It's a resource database */
- struct pdb_resource *rsrc;
- struct pdb_resource *next;
-
- PDB_TRACE(8)
- fprintf(stderr, "Freeing resource list\n");
-
- /* Walk the linked list, freeing as we go along */
- for (rsrc = db->rec_index.rsrc;
- rsrc != NULL;
- rsrc = next)
- {
- next = rsrc->next; /* Remember the next
- * element on the list. We
- * won't have a chance to
- * look it up after this
- * one has been free()d.
- */
-
- /* Free this element */
- pdb_FreeResource(rsrc);
- }
- } else {
- /* It's a record database */
- struct pdb_record *rec;
- struct pdb_record *next;
-
- PDB_TRACE(8)
- fprintf(stderr, "Freeing record list\n");
-
- /* Walk the linked list, freeing as we go along */
- for (rec = db->rec_index.rec;
- rec != NULL;
- rec = next)
- {
- next = rec->next; /* Remember the next
- * element on the list. We
- * won't have a chance to
- * look it up after this
- * one has been free()d.
- */
-
- /* Free this element */
- pdb_FreeRecord(rec);
- }
- }
-
- /* Free the sort block */
- if (db->sortinfo != NULL)
- free(db->sortinfo);
-
- /* Free the app info block */
- if (db->appinfo != NULL)
- free(db->appinfo);
-
- free(db);
-}
-
-/* pdb_Read
- * Read a PDB from the file descriptor 'fd'. This must already have been
- * opened for reading and/or writing.
- *
- * Note: this function does not to any locking. The caller is responsible
- * for that.
- */
-struct pdb *
-pdb_Read(int fd)
-{
- int err;
- struct pdb *retval;
-
- /* Create a new pdb to return */
- if ((retval = new_pdb()) == NULL)
- {
- return NULL;
- }
-
- /* Find out how long the file is */
- retval->file_size = get_file_length(fd);
- if (retval->file_size == ~0)
- {
- /* The file isn't seekable */
- fprintf(stderr, _("File isn't seekable.\n"));
- free_pdb(retval);
- return NULL;
- }
-
- /* Load the header */
- if ((err = pdb_LoadHeader(fd, retval)) < 0)
- {
- fprintf(stderr, _("Can't load header.\n"));
- free_pdb(retval);
- return NULL;
- }
-
- /* Load the record list header */
- if ((err = pdb_LoadRecListHeader(fd, retval)) < 0)
- {
- fprintf(stderr, _("Can't load record list header for "
- "\"%.*s\".\n"),
- PDB_DBNAMELEN, retval->name);
- free_pdb(retval);
- return NULL;
- }
-
- /* Read the record/resource list */
- if (IS_RSRC_DB(retval))
- {
- /* Read the resource index */
- if ((err = pdb_LoadRsrcIndex(fd, retval)) < 0)
- {
- fprintf(stderr, _("Can't read resource index for "
- "\"%.*s\".\n"),
- PDB_DBNAMELEN, retval->name);
- free_pdb(retval);
- return NULL;
- }
- } else {
- /* Read the record index */
- if ((err = pdb_LoadRecIndex(fd, retval)) < 0)
- {
- fprintf(stderr, _("Can't read record index for "
- "\"%.*s\".\n"),
- PDB_DBNAMELEN, retval->name);
- free_pdb(retval);
- return NULL;
- }
- }
-
- /* In most PDBs, there are two NUL bytes here. They are allowed by
- * the spec, but not mandated, and some PDBs don't have them. We'll
- * ignore them for now, and have the appropriate pdb_Load*()
- * function lseek() to the proper position.
- */
-
- /* Load the AppInfo block, if any */
- if ((err = pdb_LoadAppBlock(fd, retval)) < 0)
- {
- fprintf(stderr, _("Can't read AppInfo block for "
- "\"%.*s\".\n"),
- PDB_DBNAMELEN, retval->name);
- free_pdb(retval);
- return NULL;
- }
-
- /* Load the sort block, if any */
- if ((err = pdb_LoadSortBlock(fd, retval)) < 0)
- {
- fprintf(stderr, _("Can't read sort block for "
- "\"%.*s\".\n"),
- PDB_DBNAMELEN, retval->name);
- free_pdb(retval);
- return NULL;
- }
-
- /* Load the records themselves */
- if (IS_RSRC_DB(retval))
- {
- /* Read the resources */
- if ((err = pdb_LoadResources(fd, retval)) < 0)
- {
- fprintf(stderr, _("Can't read resources for "
- "\"%.*s\".\n"),
- PDB_DBNAMELEN, retval->name);
- free_pdb(retval);
- return NULL;
- }
- } else {
- /* Read the records */
- if ((err = pdb_LoadRecords(fd, retval)) < 0)
- {
- fprintf(stderr, _("Can't read records for "
- "\"%.*s\".\n"),
- PDB_DBNAMELEN, retval->name);
- free_pdb(retval);
- return NULL;
- }
- }
-
- return retval; /* Success */
-}
-
-/* pdb_Write
- * Write 'db' to the file descriptor 'fd'. This must already have been
- * opened for writing.
- *
- * Note that while you can open the backup file for reading and writing,
- * read from it with pdb_Read() and save it with pdb_Write(), this is not
- * recommended: if anything should go wrong at the wrong time (e.g., the
- * disk fills up just as you're about to write the database back to disk),
- * you will lose the entire backup.
- * A better approach is to use a staging file: read from the backup file,
- * write to a temporary file, then use rename() to move the temporary file
- * onto the real one. Alternately, you can copy the original file to a
- * temporary one, then open the temporary for both reading and writing.
- * This might have some advantages, in that it allows you to lock a single
- * file for the duration of the sync.
- *
- * Note: this function does not lock the file. The caller is responsible
- * for that.
- */
-int
-pdb_Write(const struct pdb *db,
- int fd)
-{
- static ubyte header_buf[PDB_HEADER_LEN];
- /* Buffer for writing database header */
- static ubyte rlheader_buf[PDB_RECORDLIST_LEN];
- /* Buffer for writing the record list header */
- static ubyte nul_buf[2];
- /* Buffer for writing the two useless NULs */
- ubyte *wptr; /* Pointer into buffers, for writing */
- udword offset; /* The next offset we're interested in */
-
- /* Initialize 'offset': the next variable-sized item will go after
- * the header, after the index header, after the index, after the
- * two useless NULs.
- */
- offset = PDB_HEADER_LEN + PDB_RECORDLIST_LEN;
- if (IS_RSRC_DB(db))
- offset += db->numrecs * PDB_RESOURCEIX_LEN;
- else
- offset += db->numrecs * PDB_RECORDIX_LEN;
- offset += 2; /* Those two useless NUL bytes */
-
- /** Write the database header **/
-
- /* Construct the header in 'header_buf' */
- wptr = header_buf;
- memcpy(wptr, db->name, PDB_DBNAMELEN);
- wptr += PDB_DBNAMELEN;
- put_uword(&wptr, (uword) (db->attributes & ~PDB_ATTR_OPEN));
- /* Clear the 'open' flag before writing */
- put_uword(&wptr, db->version);
- put_udword(&wptr, db->ctime);
- put_udword(&wptr, db->mtime);
- put_udword(&wptr, db->baktime);
- put_udword(&wptr, db->modnum);
- if (db->appinfo == NULL) /* Write the AppInfo block, if any */
- /* This database doesn't have an AppInfo block */
- put_udword(&wptr, 0L);
- else {
- /* This database has an AppInfo block */
- put_udword(&wptr, offset);
- offset += db->appinfo_len;
- }
- if (db->sortinfo == NULL) /* Write the sort block, if any */
- /* This database doesn't have a sort block */
- put_udword(&wptr, 0L);
- else {
- put_udword(&wptr, offset);
- offset += db->sortinfo_len;
- }
- put_udword(&wptr, db->type);
- put_udword(&wptr, db->creator);
- put_udword(&wptr, db->uniqueIDseed);
-
- /* Write the database header */
- if (write(fd, header_buf, PDB_HEADER_LEN) != PDB_HEADER_LEN)
- {
- fprintf(stderr, _("%s: can't write database header for "
- "\"%.*s\".\n"),
- "pdb_Write",
- PDB_DBNAMELEN, db->name);
- perror("write");
- close(fd);
- return -1;
- }
-
- /** Write the record/resource index header **/
- /* Construct the record list header */
- wptr = rlheader_buf;
- put_udword(&wptr, 0L); /* nextID */
- /* XXX - What is this? Should this be something
- * other than 0? */
- put_uword(&wptr, db->numrecs);
-
- /* Write the record list header */
- if (write(fd, rlheader_buf, PDB_RECORDLIST_LEN) != PDB_RECORDLIST_LEN)
- {
- fprintf(stderr, _("%s: can't write record list header for "
- "\"%.*s\".\n"),
- "pdb_Write",
- PDB_DBNAMELEN, db->name);
- perror("write");
- return -1;
- }
-
- /* Write the record/resource index */
- if (IS_RSRC_DB(db))
- {
- /* It's a resource database */
- struct pdb_resource *rsrc; /* Current resource */
-
- /* Go through the list of resources, writing each one */
- for (rsrc = db->rec_index.rsrc;
- rsrc != NULL;
- rsrc = rsrc->next)
- {
- static ubyte rsrcbuf[PDB_RESOURCEIX_LEN];
- /* Buffer to hold the resource
- * index entry.
- */
-
- /* Construct the resource index entry */
- wptr = rsrcbuf;
- put_udword(&wptr, rsrc->type);
- put_uword(&wptr, rsrc->id);
- put_udword(&wptr, offset);
-
- /* Write the resource index entry */
- if (write(fd, rsrcbuf, PDB_RESOURCEIX_LEN) !=
- PDB_RESOURCEIX_LEN)
- {
- fprintf(stderr, _("%s: Can't write resource "
- "index entry for "
- "\"%.*s\".\n"),
- "pdb_Write",
- PDB_DBNAMELEN, db->name);
- perror("write");
- return -1;
- }
-
- /* Bump 'offset' up to point to the offset of the
- * next variable-sized thing in the file.
- */
- offset += rsrc->data_len;
- }
- } else {
- /* It's a record database */
- struct pdb_record *rec; /* Current record */
-
- /* Go through the list of records, writing each one */
- for (rec = db->rec_index.rec; rec != NULL; rec = rec->next)
- {
- static ubyte recbuf[PDB_RECORDIX_LEN];
- /* Buffer to hold the record index
- * entry.
- */
-
- /* Construct the record index entry */
- wptr = recbuf;
-
- /* Sanity check */
- if (rec->data_len == 0)
- {
- fprintf(stderr,
- _("\"%.*s\" record 0x%08lx has "
- "length 0.\n"),
- PDB_DBNAMELEN, db->name,
- (unsigned long) rec->id);
- }
-
- put_udword(&wptr, offset);
- put_ubyte(&wptr, merge_attributes(
- rec->flags,
- rec->category));
- put_ubyte(&wptr, (char) ((rec->id >> 16) & 0xff));
- put_ubyte(&wptr, (char) ((rec->id >> 8) & 0xff));
- put_ubyte(&wptr, (char) (rec->id & 0xff));
-
- /* Write the resource index entry */
- if (write(fd, recbuf, PDB_RECORDIX_LEN) !=
- PDB_RECORDIX_LEN)
- {
- fprintf(stderr, _("%s: Can't write record "
- "index entry for "
- "\"%.*s\".\n"),
- "pdb_Write",
- PDB_DBNAMELEN, db->name);
- perror("write");
- return -1;
- }
-
- /* Bump 'offset' up to point to the offset of the
- * next variable-sized thing in the file.
- */
- offset += rec->data_len;
- }
- }
-
- /* Write the two useless NUL bytes */
- nul_buf[0] = nul_buf[1] = '\0';
- if (write(fd, nul_buf, 2) != 2)
- {
- fprintf(stderr, _("%s: Can't write the two useless NULs to "
- "\"%.*s\".\n"),
- "pdb_Write",
- PDB_DBNAMELEN, db->name);
- perror("write");
- return -1;
- }
-
- /* Write the AppInfo block, if any */
- if (db->appinfo != NULL)
- {
- if (write(fd, db->appinfo, db->appinfo_len) !=
- db->appinfo_len)
- {
- fprintf(stderr, _("%s: Can't write AppInfo block for "
- "\"%.*s\".\n"),
- "pdb_Write",
- PDB_DBNAMELEN, db->name);
- perror("write");
- return -1;
- }
- }
-
- /* Write the sort block, if any */
- if (db->sortinfo != NULL)
- {
- if (write(fd, db->sortinfo, db->sortinfo_len) !=
- db->sortinfo_len)
- {
- fprintf(stderr, _("%s: Can't write sort block for "
- "\"%.*s\".\n"),
- "pdb_Write",
- PDB_DBNAMELEN, db->name);
- perror("write");
- return -1;
- }
- }
-
- /* Write the record/resource data */
- if (IS_RSRC_DB(db))
- {
- /* It's a resource database */
- struct pdb_resource *rsrc;
-
- /* Go through the list of resources, writing each one's
- * data.
- */
- for (rsrc = db->rec_index.rsrc;
- rsrc != NULL;
- rsrc = rsrc->next)
- {
- /* Write the data */
- if (write(fd, rsrc->data, rsrc->data_len) !=
- rsrc->data_len)
- {
- fprintf(stderr, _("%s: Can't write resource "
- "data for \"%.*s\".\n"),
- "pdb_Write",
- PDB_DBNAMELEN, db->name);
- perror("write");
- return -1;
- }
- }
- } else {
- /* It's a record database */
- struct pdb_record *rec;
-
- /* Go through the list of records, writing each one's data. */
- for (rec = db->rec_index.rec; rec != NULL; rec = rec->next)
- {
- /* Write the data */
- if (write(fd, rec->data, rec->data_len) !=
- rec->data_len)
- {
- fprintf(stderr,
- _("%s: Can't write record data for "
- "\"%.*s\".\n"),
- "pdb_Write",
- PDB_DBNAMELEN, db->name);
- perror("write");
- return -1;
- }
- }
- }
-
- return 0; /* Success */
-}
-
-#if 0
-/* pdb_FindRecordByID
- * Find the record in 'db' whose ID is 'id'. Return a pointer to it. If no
- * such record exists, or in case of error, returns NULL.
- */
-struct pdb_record *
-pdb_FindRecordByID(
- const struct pdb *db,
- const udword id)
-{
- struct pdb_record *rec;
-
- /* Walk the list of records, comparing IDs */
- for (rec = db->rec_index.rec; rec != NULL; rec = rec->next)
- {
- if (rec->id == id)
- return rec;
- }
-
- return NULL; /* Couldn't find it */
-}
-
-/* pdb_FindRecordByIndex
- * Find the 'index'th record in 'db', and return a pointer to it. If no
- * such record exists, or in case of error, return NULL.
- */
-struct pdb_record *
-pdb_FindRecordByIndex(
- const struct pdb *db, /* Database to look in */
- const uword index) /* Index of the record to look for */
-{
- struct pdb_record *rec;
- int i;
-
- /* Walk the list, decrementing the count as we go along. If it
- * reaches 0, we've found the record.
- */
- rec = db->rec_index.rec;
- for (i = index; i > 0; i--)
- {
- if (rec == NULL)
- /* Oops! We've fallen off the end of the list */
- return NULL;
- rec = rec->next;
- }
-
- return rec; /* Success */
-}
-
-/* pdb_NextRecord
- * Find the next record after 'rec' in 'db', and return a pointer to it. If
- * 'rec' is the last record in the list, return NULL.
- */
-struct pdb_record *
-pdb_NextRecord(const struct pdb *db, /* Database to look in */
- const struct pdb_record *rec)
- /* Return 'rec's successor */
-{
- return rec->next;
-}
-
-/* pdb_DeleteRecordByID
- * Find the record whose unique ID is 'id' and delete it from 'db'. If the
- * record isn't found, well, that's okay; we wanted to delete it anyway.
- * Returns 0 if successful, -1 in case of error.
- */
-int
-pdb_DeleteRecordByID(
- struct pdb *db,
- const udword id)
-{
- struct pdb_record *rec; /* Record we're looking at */
- struct pdb_record *last; /* Last record we saw */
-
- if (IS_RSRC_DB(db))
- /* This only works with record databases */
- return -1;
-
- /* Look through the list of records */
- last = NULL; /* Haven't seen any records yet */
- for (rec = db->rec_index.rec; rec != NULL; rec = rec->next)
- {
- /* See if the ID matches */
- if (rec->id == id)
- {
- /* Found it */
-
- /* XXX - Presumably better to use pdb_FreeRecord() */
- /* Free 'rec's data */
- if (rec->data != NULL)
- free(rec->data);
-
- /* Cut 'rec' out of the list. The first element of
- * the list is a special case.
- */
- if (last == NULL)
- db->rec_index.rec = rec->next;
- else
- last->next = rec->next;
-
- free(rec); /* Free it */
- db->numrecs--; /* Decrement record count */
-
- return 0; /* Success */
- }
-
- last = rec; /* Remember what we just saw */
- }
-
- /* Couldn't find it. Oh, well. Call it a success anyway. */
- return 0;
-}
-#endif
-
-/* pdb_AppendRecord
- * Append a new record to 'db's record list. 'newrec' is not copied, so it
- * is important that the caller not free it afterwards.
- */
-/* XXX - Ought to make sure that the ID is unique */
-int
-pdb_AppendRecord(struct pdb *db,
- struct pdb_record *newrec)
-{
- struct pdb_record *rec;
-
- /* Sanity check */
- if (IS_RSRC_DB(db))
- /* This only works with record databases */
- return -1;
-
- /* Check to see if the list is empty */
- if (db->rec_index.rec == NULL)
- {
- db->rec_index.rec = newrec;
- newrec->next = NULL;
-
- db->numrecs++; /* Bump record counter */
-
- return 0; /* Success */
- }
-
- /* Walk the list to find its end */
- for (rec = db->rec_index.rec; rec->next != NULL; rec = rec->next)
- ;
- rec->next = newrec;
- newrec->next = NULL;
-
- db->numrecs++; /* Bump record counter */
-
- return 0; /* Success */
-}
-
-/* pdb_AppendResource
- * Append a new resource to 'db's resource list. 'newrsrc' is not copied,
- * so it is important that the caller not free it afterwards.
- */
-int
-pdb_AppendResource(struct pdb *db,
- struct pdb_resource *newrsrc)
-{
- struct pdb_resource *rsrc;
-
- /* Sanity check */
- if (!IS_RSRC_DB(db))
- /* This only works with resource databases */
- return -1;
-
- /* Check to see if the list is empty */
- if (db->rec_index.rsrc == NULL)
- {
- db->rec_index.rsrc = newrsrc;
- newrsrc->next = NULL;
-
- db->numrecs++; /* Bump resource counter */
-
- return 0; /* Success */
- }
-
- /* Walk the list to find its end */
- for (rsrc = db->rec_index.rsrc; rsrc->next != NULL; rsrc = rsrc->next)
- ;
- rsrc->next = newrsrc;
- newrsrc->next = NULL;
-
- db->numrecs++; /* Bump resource counter */
-
- return 0; /* Success */
-}
-
-/* pdb_InsertRecord
- * Insert 'newrec' into 'db', just after 'prev'. If 'prev' is NULL,
- * 'newrec' is inserted at the beginning of the list.
- * Returns 0 if successful, -1 otherwise.
- * 'newrec' is not copied, so it is important that the caller not free it.
- */
-int
-pdb_InsertRecord(struct pdb *db, /* The database to insert into */
- struct pdb_record *prev,
- /* Insert after this record */
- struct pdb_record *newrec)
- /* The record to insert */
-{
- /* If 'prev' is NULL, insert at the beginning of the list */
- if (prev == NULL)
- {
- newrec->next = db->rec_index.rec;
- db->rec_index.rec = newrec;
- db->numrecs++; /* Increment record count */
-
- return 0; /* Success */
- }
-
- /* XXX - This function doesn't actually check to make sure that
- * 'prev' is in 'db'. You could really fuck yourself over with
- * this.
- * So make it a documented requirement.
- */
- /* The new record goes in the middle of the list. Insert it. */
- newrec->next = prev->next;
- prev->next = newrec;
- db->numrecs++; /* Increment record count */
-
- return 0; /* Success */
-}
-
-#if 0
-/* pdb_InsertResource
- * Insert 'newrsrc' into 'db', just after 'prev'. If 'prev' is NULL, 'newrsrc'
- * is inserted at the beginning of the list.
- * Returns 0 if successful, -1 otherwise.
- * 'newrec' is not copied, so it is important that the caller not free it.
- */
-int
-pdb_InsertResource(struct pdb *db, /* The database to insert into */
- struct pdb_resource *prev,
- /* Insert after this resource */
- struct pdb_resource *newrsrc)
- /* The resource to insert */
-{
- /* If 'prev' is NULL, insert at the beginning of the list */
- if (prev == NULL)
- {
- newrsrc->next = db->rec_index.rsrc;
- db->rec_index.rsrc = newrsrc;
- db->numrecs++; /* Increment record count */
-
- return 0; /* Success */
- }
-
- /* XXX - This function doesn't actually check to make sure that
- * 'prev' is in 'db'. You could really fuck yourself over with
- * this.
- * So make it a documented requirement.
- */
- /* The new resource goes in the middle of the list. Insert it. */
- newrsrc->next = prev->next;
- prev->next = newrsrc;
- db->numrecs++; /* Increment record count */
-
- return 0; /* Success */
-}
-#endif
-
-/* new_Record
- * Create a new record from the given arguments, and return a pointer to
- * it. Returns NULL in case of error.
- * The record data is copied, so the caller needs to take care of freeing
- * 'data'.
- *
- * The 'attributes' and 'category' arguments are combined into one field:
- * if the new record is deleted, then the category is silently dropped.
- * Otherwise, the category occupies the bottom 4 bits of the
- * attributes/category field.
- */
-struct pdb_record *
-new_Record(const ubyte flags,
- const ubyte category,
- const udword id,
- const uword len,
- const ubyte *data)
-{
- struct pdb_record *retval;
-
- PDB_TRACE(6)
- {
- fprintf(stderr, "new_Record: Creating new record:\n");
- fprintf(stderr, "\tflags == 0x%02x\n", flags);
- fprintf(stderr, "\tcategory == 0x%02x\n", category);
- fprintf(stderr, "\tid == 0x%08lx\n", (unsigned long) id);
- fprintf(stderr, "\tlen == %d\n", len);
- debug_dump(stderr, "NEW", data, len);
- }
-
- /* Allocate the record to be returned */
- if ((retval = (struct pdb_record *) malloc(sizeof(struct pdb_record)))
- == NULL)
- {
- fprintf(stderr, _("%s: Out of memory.\n"),
- "new_Record");
- return NULL;
- }
-
- /* Initialize the new record */
- retval->next = NULL;
- retval->offset = 0L;
- retval->flags = flags;
- retval->category = category;
- retval->id = id;
-
- /* Allocate space to put the record data */
- if (len == 0)
- {
- /* Special case: the record has no data (e.g., this is an
- * expunged record).
- */
- retval->data_len = len;
- retval->data = NULL;
- return retval;
- }
-
- if ((retval->data = (ubyte *) malloc(len)) == NULL)
- {
- /* Couldn't allocate data portion of record */
- fprintf(stderr, _("%s: can't allocate data.\n"),
- "new_Record");
- free(retval);
- return NULL;
- }
-
- /* Copy the data to the new record */
- retval->data_len = len;
- memcpy(retval->data, data, len);
-
- return retval; /* Success */
-}
-
-/* new_Resource
- * Create a new resource from the given arguments, and return a pointer to
- * it. Returns NULL in case of error.
- * The resource data is copied, so the caller needs to take care of freeing
- * 'data'.
- */
-struct pdb_resource *
-new_Resource(const udword type,
- const uword id,
- const uword len,
- const ubyte *data)
-{
- struct pdb_resource *retval;
-
- PDB_TRACE(6)
- {
- fprintf(stderr, "new_Resource: Creating new resource:\n");
- fprintf(stderr, "\ttype == 0x%08lx (%c%c%c%c)\n",
- (unsigned long) type,
- (int) ((type >> 24) & 0xff),
- (int) ((type >> 16) & 0xff),
- (int) ((type >> 8) & 0xff),
- (int) (type & 0xff));
- fprintf(stderr, "\tid == 0x%04x\n", (unsigned) id);
- fprintf(stderr, "\tlen == %d\n", len);
- debug_dump(stderr, "NEW", data, len);
- }
-
- /* Allocate the resource to be returned */
- if ((retval = (struct pdb_resource *)
- malloc(sizeof(struct pdb_resource))) == NULL)
- {
- fprintf(stderr, _("%s: Out of memory.\n"),
- "new_Resource");
- return NULL;
- }
-
- /* Initialize the new resource */
- retval->next = NULL;
- retval->offset = 0L;
- retval->type = type;
- retval->id = id;
-
- /* Allocate space to put the resource data */
- if (len == 0)
- {
- /* Special case: zero-length resource (dunno if this should
- * ever happen, but this way we avoid malloc(0).
- */
- retval->data_len = len;
- retval->data = NULL;
- return retval;
- }
-
- if ((retval->data = (ubyte *) malloc(len)) == NULL)
- {
- /* Couldn't allocate data portion of resource */
- fprintf(stderr, _("%s: can't allocate data.\n"),
- "new_Resource");
- free(retval);
- return NULL;
- }
-
- /* Copy the data to the new resource */
- retval->data_len = len;
- memcpy(retval->data, data, len);
-
- return retval; /* Success */
-}
-
-/* pdb_CopyRecord
- * Make a copy of record 'rec' in database 'db' (and its data), and return
- * it. The new record is allocated by pdb_CopyRecord(), so the caller has
- * to take care of freeing it.
- * Returns a pointer to the new copy, or NULL in case of error.
- */
-struct pdb_record *pdb_CopyRecord(
- const struct pdb *db,
- const struct pdb_record *rec)
-{
- struct pdb_record *retval;
-
- /* Allocate the record to be returned */
- if ((retval = (struct pdb_record *) malloc(sizeof(struct pdb_record)))
- == NULL)
- {
- fprintf(stderr, _("%s: Out of memory.\n"),
- "pdb_CopyRecord");
- return NULL;
- }
-
- retval->next = NULL; /* For cleanliness */
-
- /* Copy the old record to the new copy */
- retval->offset = rec->offset;
- retval->flags = rec->flags;
- retval->category = rec->category;
- retval->id = rec->id;
-
- /* Allocate space for the record data itself */
- if ((retval->data = (ubyte *) malloc(rec->data_len)) == NULL)
- {
- fprintf(stderr, _("%s: can't allocate record data for "
- "\"%.*s\".\n"),
- "pdb_CopyRecord",
- PDB_DBNAMELEN, db->name);
- free(retval);
- return NULL;
- }
-
- /* Copy the record data */
- retval->data_len = rec->data_len;
- memcpy(retval->data, rec->data, retval->data_len);
-
- return retval; /* Success */
-}
-
-/* pdb_CopyResource
- * Make a copy of resource 'rsrc' in database 'db' (and its data), and
- * return it. The new record is allocated by pdb_CopyResource(), so the
- * caller has to take care of freeing it.
- * Returns a pointer to the new copy, or NULL in case of error.
- */
-struct pdb_resource *pdb_CopyResource(
- const struct pdb *db,
- const struct pdb_resource *rsrc)
-{
- struct pdb_resource *retval;
-
- /* Allocate the resource to be returned */
- if ((retval = (struct pdb_resource *)
- malloc(sizeof(struct pdb_resource))) == NULL)
- {
- fprintf(stderr, _("%s: Out of memory.\n"),
- "pdb_CopyResource");
- return NULL;
- }
-
- retval->next = NULL; /* For cleanliness */
-
- /* Copy the old resource to the new copy */
- retval->type = rsrc->type;
- retval->id = rsrc->id;
- retval->offset = rsrc->offset;
-
- /* Allocate space for the record data itself */
- if ((retval->data = (ubyte *) malloc(rsrc->data_len)) == NULL)
- {
- fprintf(stderr, _("%s: can't allocate resource data for "
- "\"%.*s\".\n"),
- "pdb_CopyResource",
- PDB_DBNAMELEN, db->name);
- free(retval);
- return NULL;
- }
-
- /* Copy the resource data */
- retval->data_len = rsrc->data_len;
- memcpy(retval->data, rsrc->data, retval->data_len);
-
- return retval; /* Success */
-}
-
-/*** Helper functions ***/
-
-/* get_file_length
- * Return the length of a file, in bytes. In case of error, returns ~0.
- */
-static uword
-get_file_length(int fd)
-{
- off_t here;
- off_t eof;
-
- /* Get the current position within the file */
- here = lseek(fd, 0L, SEEK_CUR);
- if (here < 0)
- /* The file isn't seekable, presumably either because it
- * isn't open, or because it's a pipe/socket/FIFO/tty.
- */
- return ~0;
-
- /* Go to the end of the file */
- eof = lseek(fd, 0L, SEEK_END);
-
- /* And return to where we were before */
- lseek(fd, here, SEEK_SET);
-
- return (uword) (eof - here);
-}
-
-/* pdb_LoadHeader
- * Read the header of a pdb file, and fill in the appropriate fields in
- * 'db'.
- */
-int
-pdb_LoadHeader(int fd,
- struct pdb *db)
-{
- int err;
- static ubyte buf[PDB_HEADER_LEN];
- /* Buffer to hold the file header */
- const ubyte *rptr; /* Pointer into buffers, for reading */
-
- /* Read the header */
- if ((err = read(fd, buf, PDB_HEADER_LEN)) != PDB_HEADER_LEN)
- {
- perror("pdb_LoadHeader: read");
- return -1;
- }
-
- /* Parse the database header */
- rptr = buf;
- memcpy(db->name, buf, PDB_DBNAMELEN);
- rptr += PDB_DBNAMELEN;
- db->attributes = get_uword(&rptr);
- db->version = get_uword(&rptr);
- db->ctime = get_udword(&rptr);
- db->mtime = get_udword(&rptr);
- db->baktime = get_udword(&rptr);
- db->modnum = get_udword(&rptr);
- db->appinfo_offset = get_udword(&rptr);
- db->sortinfo_offset = get_udword(&rptr);
- db->type = get_udword(&rptr);
- db->creator = get_udword(&rptr);
- db->uniqueIDseed = get_udword(&rptr);
-
- PDB_TRACE(5)
- {
- time_t t;
-
- fprintf(stderr, "\tname: \"%s\"\n", db->name);
- fprintf(stderr, "\tattributes: 0x%04x", db->attributes);
- if (db->attributes & PDB_ATTR_RESDB)
- fprintf(stderr, " RESDB");
- if (db->attributes & PDB_ATTR_RO) fprintf(stderr, " RO");
- if (db->attributes & PDB_ATTR_APPINFODIRTY)
- fprintf(stderr, " APPINFODIRTY");
- if (db->attributes & PDB_ATTR_BACKUP)
- fprintf(stderr, " BACKUP");
- if (db->attributes & PDB_ATTR_OKNEWER)
- fprintf(stderr, " OKNEWER");
- if (db->attributes & PDB_ATTR_RESET) fprintf(stderr, " RESET");
- if (db->attributes & PDB_ATTR_NOCOPY)
- fprintf(stderr, " NOCOPY");
- if (db->attributes & PDB_ATTR_STREAM)
- fprintf(stderr, " STREAM");
- if (db->attributes & PDB_ATTR_OPEN)
- fprintf(stderr, " OPEN");
- fprintf(stderr, "\n");
- fprintf(stderr, "\tversion: %u\n", db->version);
- t = db->ctime - EPOCH_1904;
- fprintf(stderr, "\tctime: %lu %s", (unsigned long) db->ctime,
- ctime(&t));
- t = db->mtime - EPOCH_1904;
- fprintf(stderr, "\tmtime: %lu %s", (unsigned long) db->mtime,
- ctime(&t));
- t = db->baktime - EPOCH_1904;
- fprintf(stderr, "\tbaktime: %lu %s", (unsigned long) db->baktime,
- ctime(&t));
- fprintf(stderr, "\tmodnum: %lu\n", (unsigned long) db->modnum);
- fprintf(stderr, "\tappinfo_offset: 0x%08lx\n",
- (unsigned long) db->appinfo_offset);
- fprintf(stderr, "\tsortinfo_offset: 0x%08lx\n",
- (unsigned long) db->sortinfo_offset);
- fprintf(stderr, "\ttype: '%c%c%c%c' (0x%08lx)\n",
- (char) (db->type >> 24) & 0xff,
- (char) (db->type >> 16) & 0xff,
- (char) (db->type >> 8) & 0xff,
- (char) db->type & 0xff,
- (unsigned long) db->type);
- fprintf(stderr, "\tcreator: '%c%c%c%c' (0x%08lx)\n",
- (char) (db->creator >> 24) & 0xff,
- (char) (db->creator >> 16) & 0xff,
- (char) (db->creator >> 8) & 0xff,
- (char) db->creator & 0xff,
- (unsigned long) db->creator);
- fprintf(stderr, "\tuniqueIDseed: %lu\n",
- (unsigned long) db->uniqueIDseed);
- }
-
- return 0; /* Success */
-}
-
-/* pdb_LoadRecListHeader
- * Load the record list header from a pdb file, and fill in the appropriate
- * fields in 'db'.
- */
-static int
-pdb_LoadRecListHeader(int fd,
- struct pdb *db)
-{
- int err;
- static ubyte buf[PDB_RECORDLIST_LEN];
- const ubyte *rptr; /* Pointer into buffers, for reading */
-
- /* Read the record list header */
- if ((err = read(fd, buf, PDB_RECORDLIST_LEN)) != PDB_RECORDLIST_LEN)
- {
- perror("pdb_LoadRecListHeader: read2");
- return -1;
- }
-
- /* Parse the record list */
- rptr = buf;
- db->next_reclistID = get_udword(&rptr);
- db->numrecs = get_uword(&rptr);
-
- PDB_TRACE(6)
- {
- fprintf(stderr, "\tnextID: %ld\n", (long) db->next_reclistID);
- fprintf(stderr, "\tlen: %u\n", db->numrecs);
- }
-
- return 0;
-}
-
-/* pdb_LoadRsrcIndex
- * Read the resource index from a resource database file, and fill in the
- * appropriate fields in 'db'.
- */
-static int
-pdb_LoadRsrcIndex(int fd,
- struct pdb *db)
-{
- int i;
- int err;
- uword totalrsrcs; /* The real number of resources in the
- * database.
- */
-
- totalrsrcs = db->numrecs; /* Get the number of resources in
- * the database. It is necessary to
- * remember this here because
- * pdb_AppendResource() increments
- * db->numrecs in the name of
- * convenience.
- */
-
- if (totalrsrcs == 0)
- {
- /* There are no resources in this file */
- db->rec_index.rsrc = NULL;
- return 0;
- }
-
- /* Read the resource index */
- for (i = 0; i < totalrsrcs; i++)
- {
- static ubyte inbuf[PDB_RESOURCEIX_LEN];
- /* Input buffer */
- const ubyte *rptr; /* Pointer into buffers, for reading */
- struct pdb_resource *rsrc;
- /* New resource entry */
-
- /* Allocate the resource entry */
- if ((rsrc = (struct pdb_resource *)
- malloc(sizeof(struct pdb_resource)))
- == NULL)
- return -1;
- /* Scribble zeros all over it, just in case */
- memset((void *) rsrc, 0, sizeof(struct pdb_resource));
-
- /* Read the next resource index entry */
- if ((err = read(fd, inbuf, PDB_RESOURCEIX_LEN)) !=
- PDB_RESOURCEIX_LEN)
- return -1;
-
- /* Parse it */
- rptr = inbuf;
- rsrc->type = get_udword(&rptr);
- rsrc->id = get_uword(&rptr);
- rsrc->offset = get_udword(&rptr);
-
- PDB_TRACE(6)
- {
- fprintf(stderr,
- "\tResource %d: type '%c%c%c%c' (0x%08lx), "
- "id %u, offset 0x%08lx\n",
- i,
- (char) (rsrc->type >> 24) & 0xff,
- (char) (rsrc->type >> 16) & 0xff,
- (char) (rsrc->type >> 8) & 0xff,
- (char) rsrc->type & 0xff,
- (unsigned long) rsrc->type,
- rsrc->id,
- (unsigned long) rsrc->offset);
- }
-
- /* Append the new resource to the list */
- pdb_AppendResource(db, rsrc); /* XXX - Error-checking */
- db->numrecs = totalrsrcs; /* Kludge */
- }
-
- return 0;
-}
-
-/* pdb_LoadRecIndex
- * Read the record index from a record database file, and fill in the
- * appropriate fields in 'db'.
- */
-static int
-pdb_LoadRecIndex(int fd,
- struct pdb *db)
-{
- int i;
- int err;
- uword totalrecs; /* The real number of records in the
- * database.
- */
-
- totalrecs = db->numrecs; /* Get the number of records in the
- * database. It is necessary to
- * remember this here because
- * pdb_AppendResource() increments
- * db->numrecs in the name of
- * convenience.
- */
-
- if (totalrecs == 0)
- {
- /* There are no records in this file */
- db->rec_index.rec = NULL;
- return 0;
- }
-
- /* Read the record index */
- /* XXX - It would be a Good Thing to check for zero-length records
- * here. They've been known to appear as a result of a broken
- * conduit.
- */
- for (i = 0; i < totalrecs; i++)
- {
- static ubyte inbuf[PDB_RECORDIX_LEN];
- /* Input buffer */
- const ubyte *rptr; /* Pointer into buffers, for reading */
- struct pdb_record *rec;
- /* New record entry */
- ubyte attributes; /* Combined flags+category field */
-
- /* Allocate the record entry */
- if ((rec = (struct pdb_record *)
- malloc(sizeof(struct pdb_record)))
- == NULL)
- {
- fprintf(stderr, _("%s: Out of memory.\n"),
- "pdb_LoadRecIndex");
- return -1;
- }
-
- /* Scribble zeros all over it, just in case */
- memset((void *) rec, 0, sizeof(struct pdb_record));
-
- /* Read the next record index entry */
- if ((err = read(fd, inbuf, PDB_RECORDIX_LEN)) !=
- PDB_RECORDIX_LEN)
- {
- fprintf(stderr, _("%s: error reading record index "
- "entry for \"%.*s\" (%d bytes): "
- "%d.\n"),
- "LoadRecIndex",
- PDB_DBNAMELEN, db->name,
- PDB_RECORDIX_LEN,
- err);
- perror("read");
- free(rec);
- return -1;
- }
-
- /* Parse it */
- rptr = inbuf;
- rec->offset = get_udword(&rptr);
- attributes = get_ubyte(&rptr);
- split_attributes(attributes, &(rec->flags), &(rec->category));
-
- rec->id =
- ((udword) (get_ubyte(&rptr) << 16)) |
- ((udword) (get_ubyte(&rptr) << 8)) |
- ((udword) get_ubyte(&rptr));
-
- PDB_TRACE(6)
- fprintf(stderr,
- "\tRecord %d: offset 0x%08lx, flags 0x%02x, "
- " category 0x%02x, ID 0x%08lx\n",
- i,
- (unsigned long) rec->offset,
- (unsigned) rec->flags,
- rec->category,
- (unsigned long) rec->id);
-
- /* Append the new record to the database */
- pdb_AppendRecord(db, rec); /* XXX - Error-checking */
- db->numrecs = totalrecs; /* Kludge */
- }
-
- return 0;
-}
-
-/* pdb_LoadAppBlock
- * Read the AppInfo block from a database file, and fill in the appropriate
- * fields in 'db'. If the file doesn't have an AppInfo block, set it to
- * NULL.
- */
-static int
-pdb_LoadAppBlock(int fd,
- struct pdb *db)
-{
- int err;
- udword next_off; /* Offset of the next thing in the file
- * after the AppInfo block */
- off_t offset; /* Offset into file, for checking */
-
- /* Check to see if there even *is* an AppInfo block */
- if (db->appinfo_offset == 0L)
- {
- /* Nope */
- db->appinfo_len = 0L;
- db->appinfo = NULL;
- return 0;
- }
-
- /* Figure out how long the AppInfo block is, by comparing its
- * offset to that of the next thing in the file.
- */
- if (db->sortinfo_offset > 0L)
- /* There's a sort block */
- next_off = db->sortinfo_offset;
- else if (db->numrecs > 0)
- {
- /* There's no sort block, but there are records. Get the
- * offset of the first one.
- */
- if (IS_RSRC_DB(db))
- next_off = db->rec_index.rsrc->offset;
- else
- next_off = db->rec_index.rec->offset;
- } else
- /* There is neither sort block nor records, so the AppInfo
- * block must go to the end of the file.
- */
- next_off = db->file_size;
-
- /* Subtract the AppInfo block's offset from that of the next thing
- * in the file to get the AppInfo block's length.
- */
- db->appinfo_len = next_off - db->appinfo_offset;
-
- /* This is probably paranoid, but what the hell */
- if (db->appinfo_len == 0L)
- {
- /* An effective no-op */
- db->appinfo = NULL;
- return 0;
- }
-
- /* Now that we know the length of the AppInfo block, allocate space
- * for it and read it.
- */
- if ((db->appinfo = (ubyte *) malloc(db->appinfo_len)) == NULL)
- {
- fprintf(stderr, _("%s: Out of memory.\n"),
- "pdb_LoadAppBlock");
- return -1;
- }
-
- /* Just out of paranoia, make sure we're at the correct offset in
- * the file. Since the two NULs may or may not have appeared in the
- * file, the only thing that it makes sense to check is whether
- * we've already passed the beginning of the AppInfo block, as
- * given by its offset in the header.
- */
- offset = lseek(fd, 0L, SEEK_CUR); /* Find out where we are */
- if (offset != db->appinfo_offset)
- {
- if (offset > (off_t) db->appinfo_offset)
- {
- /* Oops! We're in the wrong place */
- fprintf(stderr, _("Warning: AppInfo block in \"%.*s\" "
- "isn't where I thought it would "
- "be.\n"
- "Expected 0x%lx, but we're at "
- "0x%lx.\n"),
- PDB_DBNAMELEN, db->name,
- (unsigned long) db->appinfo_offset, (unsigned long) offset);
- }
-
- /* Try to recover */
- offset = lseek(fd, db->appinfo_offset, SEEK_SET);
- /* Go to where the AppInfo block
- * ought to be */
- if (offset < 0)
- {
- /* Something's wrong */
- fprintf(stderr, _("Can't find the AppInfo block in "
- "\"%.*s\"!\n"),
- PDB_DBNAMELEN, db->name);
- return -1;
- }
- }
-
- /* Read the AppInfo block */
- if ((err = read(fd, db->appinfo, db->appinfo_len)) != db->appinfo_len)
- {
- perror("pdb_LoadAppBlock: read");
- return -1;
- }
- PDB_TRACE(6)
- debug_dump(stderr, "<APP", db->appinfo, db->appinfo_len);
-
- return 0;
-}
-
-/* pdb_LoadSortBlock
- * Read the sort block from a database file, and fill in the appropriate
- * fields in 'db'. If the file doesn't have a sort block, set it to NULL.
- *
- * XXX - Largely untested, since not that many databases have sort blocks.
- * But it's basically just a clone of pdb_LoadAppBlock(), so it should be
- * okay.
- */
-static int
-pdb_LoadSortBlock(int fd,
- struct pdb *db)
-{
- int err;
- localID next_off; /* Offset of the next thing in the file
- * after the sort block */
- off_t offset; /* Offset into file, for checking */
-
- /* Check to see if there even *is* a sort block */
- if (db->sortinfo_offset == 0L)
- {
- /* Nope */
- db->sortinfo_len = 0L;
- db->sortinfo = NULL;
- return 0;
- }
-
- /* Figure out how long the sort block is, by comparing its
- * offset to that of the next thing in the file.
- */
- if (db->numrecs > 0)
- {
- /* There are records. Get the offset of the first one.
- */
- if (IS_RSRC_DB(db))
- next_off = db->rec_index.rsrc->offset;
- else
- next_off = db->rec_index.rec->offset;
- } else
- /* There are no records, so the sort block must go to the
- * end of the file.
- */
- next_off = db->file_size;
-
- /* Subtract the sort block's offset from that of the next thing
- * in the file to get the sort block's length.
- */
- db->sortinfo_len = next_off - db->sortinfo_offset;
-
- /* This is probably paranoid, but what the hell */
- if (db->sortinfo_len == 0L)
- {
- /* An effective no-op */
- db->sortinfo = NULL;
- return 0;
- }
-
- /* Now that we know the length of the sort block, allocate space
- * for it and read it.
- */
- if ((db->sortinfo = (ubyte *) malloc(db->sortinfo_len)) == NULL)
- {
- fprintf(stderr, _("%s: Out of memory.\n"),
- "pdb_LoadSortBlock");
- return -1;
- }
-
- /* Just out of paranoia, make sure we're at the correct offset in
- * the file. Since the two NULs may or may not have appeared in the
- * file, the only thing that it makes sense to check is whether
- * we've already passed the beginning of the sort block, as given
- * by its offset in the header.
- */
- offset = lseek(fd, 0L, SEEK_CUR); /* Find out where we are */
- if (offset != db->sortinfo_offset)
- {
- if (offset > (off_t) db->sortinfo_offset)
- {
- /* Oops! We're in the wrong place */
- fprintf(stderr, _("Warning: sort block in \"%.*s\" "
- "isn't where I thought it would "
- "be.\n"
- "Expected 0x%lx, but we're at "
- "0x%lx.\n"),
- PDB_DBNAMELEN, db->name,
- (unsigned long) db->sortinfo_offset,
- (unsigned long) offset);
- }
-
- /* Try to recover */
- offset = lseek(fd, db->sortinfo_offset, SEEK_SET);
- /* Go to where the sort block
- * ought to be */
- if (offset < 0)
- {
- /* Something's wrong */
- fprintf(stderr, _("Can't find the sort block in "
- "\"%.*s\"!\n"),
- PDB_DBNAMELEN, db->name);
- return -1;
- }
- }
-
- /* Read the sort block */
- if ((err = read(fd, db->sortinfo, db->sortinfo_len)) !=
- db->sortinfo_len)
- {
- perror("pdb_LoadSortBlock: read");
- return -1;
- }
- PDB_TRACE(6)
- debug_dump(stderr, "<SORT", db->sortinfo, db->sortinfo_len);
-
- return 0;
-}
-
-/* pdb_LoadResources
- * Read each resource in turn from a resource database file.
- */
-static int
-pdb_LoadResources(int fd,
- struct pdb *db)
-{
- int i;
- int err;
- struct pdb_resource *rsrc;
-
- /* This assumes that the resource list has already been created by
- * 'pdb_LoadRsrcIndex()'.
- */
- for (i = 0, rsrc = db->rec_index.rsrc;
- i < db->numrecs;
- i++, rsrc = rsrc->next)
- {
- off_t offset; /* Current offset, for checking */
- udword next_off; /* Offset of next resource in file */
-
- /* Sanity check: make sure we haven't stepped off the end
- * of the list.
- */
- if (rsrc == NULL)
- {
- fprintf(stderr, _("Hey! I can't find the %dth "
- "resource in \"%.*s\"!\n"),
- i,
- PDB_DBNAMELEN, db->name);
- return -1;
- }
-
- PDB_TRACE(5)
- fprintf(stderr,
- "Reading resource %d (type '%c%c%c%c')\n",
- i,
- (char) (rsrc->type >> 24) & 0xff,
- (char) (rsrc->type >> 16) & 0xff,
- (char) (rsrc->type >> 8) & 0xff,
- (char) rsrc->type & 0xff);
-
- /* Out of paranoia, make sure we're in the right place.
- * Since the two NULs may or may not have appeared in the
- * file, the only thing that it makes sense to check is
- * whether we've already passed the beginning of the
- * resource, as given by its offset in the resource index.
- */
- offset = lseek(fd, 0L, SEEK_CUR);
- /* Find out where we are now */
- if (offset != rsrc->offset)
- {
- if (offset > (off_t) rsrc->offset)
- {
- fprintf(stderr, _("Warning: resource %d in "
- "\"%.*s\" isn't where "
- "I thought it would be.\n"
- "Expected 0x%lx, but we're "
- "at 0x%lx.\n"),
- i,
- PDB_DBNAMELEN, db->name,
- (unsigned long) rsrc->offset,
- (unsigned long) offset);
- }
-
- /* Try to recover */
- offset = lseek(fd, rsrc->offset, SEEK_SET);
- /* Go to where this
- * resource ought to be.
- */
- if (offset < 0)
- {
- /* Something's wrong */
- fprintf(stderr, _("Can't find resource %d in "
- "\"%.*s\".\n"),
- i,
- PDB_DBNAMELEN, db->name);
- return -1;
- }
- }
-
- /* Okay, now that we're in the right place, find out what
- * the next thing in the file is: its offset will tell us
- * how much to read.
- * It's debatable whether 'i' or 'rsrc' should be
- * authoritative for determining the offset of the next
- * resource. I'm going to choose 'rsrc', since I think
- * that's more likely to be immune to fencepost errors. The
- * two should, however, be equivalent. In fact, it might be
- * a Good Thing to add a check to make sure.
- */
- if (rsrc->next == NULL)
- {
- /* This is the last resource in the file, so it
- * goes to the end of the file.
- */
- next_off = db->file_size;
- } else {
- /* This isn't the last resource. Find the next
- * one's offset.
- */
- next_off = rsrc->next->offset;
- }
-
- /* Subtract this resource's index from that of the next
- * thing, to get the size of this resource.
- */
- rsrc->data_len = (uword) (next_off - rsrc->offset);
-
- /* Allocate space for this resource */
- if ((rsrc->data = (ubyte *) malloc(rsrc->data_len)) == NULL)
- {
- fprintf(stderr, _("%s: Out of memory.\n"),
- "pdb_LoadResources");
- return -1;
- }
-
- /* Read the resource */
- if ((err = read(fd, rsrc->data, rsrc->data_len)) !=
- rsrc->data_len)
- {
- fprintf(stderr, _("Can't read resource %d in "
- "\"%.*s\".\n"),
- i,
- PDB_DBNAMELEN, db->name);
- perror("pdb_LoadResources: read");
- return -1;
- }
- PDB_TRACE(6)
- {
- fprintf(stderr, "Contents of resource %d:\n", i);
- debug_dump(stderr, "<RSRC", rsrc->data,
- rsrc->data_len);
- }
- }
-
- return 0; /* Success */
-}
-
-/* pdb_LoadRecords
- * Read each record in turn from a record database file.
- */
-static int
-pdb_LoadRecords(int fd,
- struct pdb *db)
-{
- int i;
- int err;
- struct pdb_record *rec;
-
- /* This assumes that the record list has already been created by
- * 'pdb_LoadRecIndex()'.
- */
- for (i = 0, rec = db->rec_index.rec;
- i < db->numrecs;
- i++, rec = rec->next)
- {
- off_t offset; /* Current offset, for checking */
- localID next_off; /* Offset of next resource in file */
-
- /* Sanity check: make sure we haven't stepped off the end
- * of the list.
- */
- if (rec == NULL)
- {
- fprintf(stderr, _("Hey! I can't find the %dth "
- "record in \"%.*s\"!\n"),
- i,
- PDB_DBNAMELEN, db->name);
- return -1;
- }
-
- PDB_TRACE(5)
- fprintf(stderr, "Reading record %d (id 0x%08lx)\n",
- i, (unsigned long) rec->id);
-
- /* Out of paranoia, make sure we're in the right place.
- * Since the two NULs may or may not have appeared in the
- * file, the only thing that it makes sense to check is
- * whether we've already passed the beginning of the
- * record, as given by its offset in the record index.
- */
- offset = lseek(fd, 0L, SEEK_CUR);
- /* Find out where we are now */
- if (offset != rec->offset)
- {
- if (offset > (off_t) rec->offset)
- {
- fprintf(stderr, _("Warning: record %d in "
- "\"%.*s\" isn't where "
- "I thought it would be.\n"
- "Expected 0x%lx, but we're "
- "at 0x%lx.\n"),
- i,
- PDB_DBNAMELEN, db->name,
- (unsigned long) rec->offset,
- (unsigned long) offset);
- }
-
- /* Try to recover */
- offset = lseek(fd, rec->offset, SEEK_SET);
- /* Go to where this record
- * ought to be. */
- if (offset < 0)
- {
- /* Something's wrong */
- fprintf(stderr, _("Can't find record %d in "
- "\"%.*s\".\n"),
- i,
- PDB_DBNAMELEN, db->name);
- return -1;
- }
- }
-
- /* Okay, now that we're in the right place, find out what
- * the next thing in the file is: its offset will tell us
- * how much to read.
- * It's debatable whether 'i' or 'rec' should be
- * authoritative for determining the offset of the next
- * resource. I'm going to choose 'rec', since I think
- * that's more likely to be immune from fencepost errors.
- * The two should, however, be equivalent. In fact, it
- * might be a Good Thing to add a check to make sure.
- */
- if (rec->next == NULL)
- {
- /* This is the last record in the file, so it goes
- * to the end of the file.
- */
- next_off = db->file_size;
- } else {
- /* This isn't the last record. Find the next one's
- * offset.
- */
- next_off = rec->next->offset;
- }
-
- /* Subtract this record's index from that of the next one,
- * to get the size of this record.
- */
- rec->data_len = (uword) (next_off - rec->offset);
-
- /* Allocate space for this record
- * If there's a record with length zero, don't pass that to
- * malloc(). This is most likely due to a broken conduit.
- * XXX - The Right Thing to do would be not to read
- * zero-length records, but that would involve fixing the
- * record index.
- */
- if (rec->data_len > 0)
- {
- if ((rec->data = (ubyte *) malloc(rec->data_len)) ==
- NULL)
- {
- fprintf(stderr, _("%s: Out of memory.\n"),
- "pdb_LoadRecords");
- return -1;
- }
-
- /* Read the record */
- if ((err = read(fd, rec->data, rec->data_len)) !=
- rec->data_len)
- {
- fprintf(stderr, _("Can't read record %d in "
- "\"%.*s\".\n"),
- i,
- PDB_DBNAMELEN, db->name);
- perror("pdb_LoadRecords: read");
- return -1;
- }
-
- PDB_TRACE(6)
- {
- fprintf(stderr, "Contents of record %d:\n", i);
- debug_dump(stderr, "<REC", rec->data,
- rec->data_len);
- }
- }
- }
-
- return 0; /* Success */
-}
-
-\f/* This is for Emacs's benefit:
- * Local Variables: ***
- * fill-column: 75 ***
- * End: ***
- */
-#endif /* PDBFMTS_DISABLED */
+++ /dev/null
-/* pdb.h
- *
- * Definitions and such for Palm databases.
- *
- * Copyright (C) 1999-2000, Andrew Arensburger.
- * You may distribute this file under the terms of the Artistic
- * License, as specified in the README file.
- *
- * $Id: pdb.h,v 1.1 2002/08/16 06:13:10 robertl Exp $
- */
-#ifndef _pdb_h_
-#define _pdb_h_
-
-/* XXX - Add a type (and support functions) for those ubitquitous
- * 4-character IDs.
- */
-
-#define EPOCH_1904 2082844800L /* Difference, in seconds, between
- * Palm's epoch (Jan. 1, 1904) and
- * Unix's epoch (Jan. 1, 1970).
- */
-
-#define PDB_DBNAMELEN 32 /* Length of name field in database
- * header */
-
-/* Database attribute flags */
-#define PDB_ATTR_RESDB 0x0001 /* This is a resource database.
- * Resource databases are usually
- * saved in files with ".prc"
- * extensions. Other databases are
- * saved with a ".pdb" extension.
- */
-#define PDB_ATTR_RO 0x0002 /* Read-only database */
-#define PDB_ATTR_APPINFODIRTY 0x0004 /* App info block is dirty */
-#define PDB_ATTR_BACKUP 0x0008 /* Back up the database if no
- * app-specific conduit exists */
-#define PDB_ATTR_OKNEWER 0x0010 /* Tells the backup conduit that
- * it's okay to install a newer
- * version of this database with a
- * different name if this one is
- * open. Usually used for the
- * Graffiti Shortcuts database.
- */
-#define PDB_ATTR_RESET 0x0020 /* Reset the Palm after the
- * database is installed */
-#define PDB_ATTR_NOCOPY 0x0040 /* Database should not be copied(?) */
-#define PDB_ATTR_STREAM 0x0080 /* Database is used for file stream
- * implementation(?).
- */
-#define PDB_ATTR_OPEN 0x8000 /* Database is open */
-
-/* Record attributes
- * These are the attributes that individual records in a database can have.
- * I've taken the liberty of giving them different names from Palm's, since
- * Palm's names are rather confusing.
- *
- * PDB_REC_PRIVATE is set on a record that has been marked "private" by the
- * user. It is not encrypted, and if the desktop asks for this record, the
- * Palm will not refuse or ask for a password. In short, the Palm needs to
- * trust the desktop.
- *
- * PDB_REC_DIRTY is set on a record whose contents have been modified since
- * the last sync. If the user deletes a record without modifying it,
- * PDB_REC_DIRTY will not be set, but if he modifies it, then deletes it,
- * then both PDB_REC_DIRTY and PDB_REC_DELETED will be set.
- *
- * PDB_REC_DELETED is set on a record that has been deleted by the user
- * since the last sync. Unfortunately, it looks as if not all applications
- * are polite enough to set this flag, so you have to go with
- * PDB_REC_ARCHIVE and PDB_REC_EXPUNGED.
- *
- * If the user chose the "Save archive copy on PC" option when deleting a
- * record, then the PDB_REC_ARCHIVE bit will be set on the record (with any
- * luck, so will PDB_REC_DELETED).
- *
- * If the user did not choose the "Save archive copy on PC" option when
- * deleting a record, the PDB_REC_EXPUNGED bit will be set on the record
- * (as will PDB_REC_DELETED, perhaps). Apparently, what happens is this:
- * when the user deletes a record, a copy is left around so that HotSync
- * will know to delete this record. However, if the user chose not to keep
- * a copy, then, in order to conserve memory, the Palm will delete the
- * record data, although it will keep a copy of the record header for
- * HotSync.
- */
-#define PDB_REC_EXPUNGED 0x80 /* The contents of this record have
- * been deleted, leaving only the
- * record info. (Palm calls this
- * 'dlpRecAttrDeleted'.)
- */
-#define PDB_REC_DIRTY 0x40 /* Record has been modified. (Palm
- * calls this 'dlpRecAttrDirty'.)
- */
-#define PDB_REC_DELETED 0x20 /* This record has been deleted.
- * (Palm calls this
- * 'dlpRecAttrBusy'.)
- */
-#define PDB_REC_PRIVATE 0x10 /* Record is private: don't show to
- * anyone without asking for a
- * password. (Palm calls this
- * 'dlpRecAttrSecret'.)
- */
-#define PDB_REC_ARCHIVE 0x08 /* This record should be archived
- * at the next sync. (Palm calls
- * this 'dlpRecAttrArchived'.)
- */
-
-typedef udword localID; /* Local (card-relative) chunk ID
- * (basically, a pointer that can
- * be used as a unique ID).
- */
-
-#define PDB_HEADER_LEN 72 /* Length of header in a file */
-#define PDB_RECORDLIST_LEN 6 /* Length of record index header in
- * file */
-
-/* pdb_record
- * A plain old record, containing arbitrary data.
- */
-struct pdb_record
-{
- struct pdb_record *next; /* Next record on linked list */
- localID offset; /* Offset of record in file */
- ubyte flags; /* Record flags (PDB_REC_*) */
- ubyte category; /* Record's category */
- udword id; /* Record's unique ID. Actually,
- * only the bottom 3 bytes are
- * stored in the file, but for
- * everything else, it's much
- * easier to just consider this a
- * 32-bit integer.
- */
- uword data_len; /* Length of this record */
- ubyte *data; /* This record's data */
-};
-#define PDB_RECORDIX_LEN 8 /* Size of a pdb_record in a file */
-
-/* pdb_resource
- * Mac hackers should feel at home here: the type of a resource is really a
- * 4-character category identifier, and the ID is an integer within that
- * category.
- */
-struct pdb_resource
-{
- struct pdb_resource *next; /* Next resource on linked list */
- udword type; /* Resource type */
- uword id; /* Resource ID */
- localID offset; /* Offset of resource in file */
- uword data_len; /* Length of this resource */
- ubyte *data; /* This resource's data */
-};
-#define PDB_RESOURCEIX_LEN 10 /* Size of a pdb_resource in a file */
-
-/* pdb
- * Structure of a Palm database (file), both resource databases (.prc) and
- * record databases (.pdb).
- */
-struct pdb
-{
- long file_size; /* Total length of file */
-
- char name[PDB_DBNAMELEN]; /* Database name */
- uword attributes; /* Database attributes */
- uword version; /* Database version */
-
- udword ctime; /* Creation time */
- udword mtime; /* Time of last modification */
- udword baktime; /* Time of last backup */
- udword modnum; /* Modification number */
- /* XXX - What exactly is the modification number?
- * Does it get incremented each time you make any
- * kind of change to the database?
- */
- localID appinfo_offset; /* Offset of AppInfo block in the
- * file */
- localID sortinfo_offset; /* Offset of sort block in the file */
-
- udword type; /* Database type */
- udword creator; /* Database creator */
-
- udword uniqueIDseed; /* Used to generate unique IDs for
- * records and resources. Only the
- * lower 3 bytes are used. The high
- * byte is for alignment.
- */
-
- localID next_reclistID; /* ID of next record index in the
- * file. In practice, this field is
- * always zero.
- */
- uword numrecs; /* Number of records/resources in
- * the file.
- */
-
- long appinfo_len; /* Length of AppInfo block */
- void *appinfo; /* Optional AppInfo block */
- long sortinfo_len; /* Length of sort block */
- void *sortinfo; /* Optional sort block */
-
- /* Record/resource list. Each of these is actually a linked list,
- * to make it easy to insert and delete records.
- */
- union {
- struct pdb_record *rec;
- struct pdb_resource *rsrc;
- } rec_index;
-};
-
-/* Convenience macros */
-#define IS_RSRC_DB(db) ((db)->attributes & PDB_ATTR_RESDB)
- /* Is this a resource database? If
- * not, it must be a record
- * database.
- */
-
-extern int pdb_trace; /* Debugging level for PDB stuff */
-
-extern struct pdb *new_pdb();
-extern void free_pdb(struct pdb *db);
-extern void pdb_FreeRecord(struct pdb_record *rec);
-extern void pdb_FreeResource(struct pdb_resource *rsrc);
-extern struct pdb *pdb_Read(int fd); /* Load a pdb from a file. */
-extern int pdb_Write(const struct pdb *db, int fd);
- /* Write a pdb to a file */
-extern struct pdb_record *pdb_FindRecordByID(
- const struct pdb *db,
- const udword id);
-extern struct pdb_record *pdb_FindRecordByIndex(
- const struct pdb *db,
- const uword index);
-extern int pdb_DeleteRecordByID(
- struct pdb *db,
- const udword id);
-extern int pdb_AppendRecord(struct pdb *db, struct pdb_record *newrec);
-extern int pdb_AppendResource(struct pdb *db, struct pdb_resource *newrsrc);
-extern int pdb_InsertRecord(
- struct pdb *db,
- struct pdb_record *prev,
- struct pdb_record *newrec);
-extern int pdb_InsertResource(
- struct pdb *db,
- struct pdb_resource *prev,
- struct pdb_resource *newrsrc);
-extern struct pdb_record *new_Record(
- const ubyte attributes,
- const ubyte category,
- const udword id,
- const uword len,
- const ubyte *data);
-extern struct pdb_resource *new_Resource(
- const udword type,
- const uword id,
- const uword len,
- const ubyte *data);
-extern struct pdb_record *pdb_CopyRecord(
- const struct pdb *db,
- const struct pdb_record *rec);
-extern struct pdb_resource *pdb_CopyResource(
- const struct pdb *db,
- const struct pdb_resource *rsrc);
-extern int pdb_LoadHeader(int fd, struct pdb *db);
-
-/* XXX - Functions to write:
-pdb_setAppInfo set the appinfo block
-pdb_setSortInfo set the sortinfo block
-*/
-
-#endif /* _pdb_h_ */
-
-\f/* This is for Emacs's benefit:
- * Local Variables: ***
- * fill-column: 75 ***
- * End: ***
- */
+++ /dev/null
-/* util.c
- *
- * Misc. utility functions.
- *
- * Copyright (C) 1999, Andrew Arensburger.
- * You may distribute this file under the terms of the Artistic
- * License, as specified in the README file.
- *
- * The get_*() functions are used to extract values out of strings of
- * ubytes and convert them to the native format.
- * The put_*() functions, conversely, are used to take a value in the
- * native format, convert them to Palm (big-endian) format, and write
- * them to a ubyte string.
- *
- * $Id: util.c,v 1.6 2006/05/07 02:14:35 robertl Exp $
- */
-
-#include "config.h"
-#include "cs-config.h"
-#if PDBFMTS_ENABLED
-#include <stdio.h>
-#include <ctype.h> /* For isprint() */
-#include <pconn/util.h>
-
-#ifndef EPOCH_1904
-# define EPOCH_1904 2082844800L /* Difference, in seconds, between
- * Palm's epoch (Jan. 1, 1904) and
- * Unix's epoch (Jan. 1, 1970).
- */
-#endif /* EPOCH_1904 */
-
-/* XXX - Most of the functions below really ought to be inlined. Not sure
- * how to do this portably, though.
- */
-
-INLINE ubyte
-peek_ubyte(const ubyte *buf)
-{
- return buf[0];
-}
-
-INLINE uword
-peek_uword(const ubyte *buf)
-{
- return ((uword) buf[0] << 8) |
- buf[1];
-}
-
-INLINE udword
-peek_udword(const ubyte *buf)
-{
- return ((uword) buf[0] << 24) |
- ((uword) buf[1] << 16) |
- ((uword) buf[2] << 8) |
- buf[3];
-}
-
-INLINE ubyte
-get_ubyte(const ubyte **buf)
-{
- ubyte retval;
-
- retval = peek_ubyte(*buf);
- *buf += SIZEOF_UBYTE;
-
- return retval;
-}
-
-INLINE void
-put_ubyte(ubyte **buf, const ubyte value)
-{
- **buf = value;
- ++(*buf);
-}
-
-INLINE uword
-get_uword(const ubyte **buf)
-{
- uword retval;
-
- retval = peek_uword(*buf);
- *buf += SIZEOF_UWORD;
-
- return retval;
-}
-
-INLINE void
-put_uword(ubyte **buf, const uword value)
-{
- **buf = (value >> 8) & 0xff;
- ++(*buf);
- **buf = value & 0xff;
- ++(*buf);
-}
-
-INLINE udword
-get_udword(const ubyte **buf)
-{
- udword retval;
-
- retval = peek_udword(*buf);
- *buf += SIZEOF_UDWORD;
-
- return retval;
-}
-
-INLINE void
-put_udword(ubyte **buf, const udword value)
-{
- **buf = (ubyte) ((value >> 24) & 0xff);
- ++(*buf);
- **buf = (ubyte) ((value >> 16) & 0xff);
- ++(*buf);
- **buf = (ubyte) ((value >> 8) & 0xff);
- ++(*buf);
- **buf = (ubyte) (value & 0xff);
- ++(*buf);
-}
-#if TIME
-/* XXX - Figure out the timezone hairiness:
- * Palms don't have timezones. Hence, the Palm's epoch is Jan. 1, 1904 in
- * the local timezone.
- * Unless you're syncing across the network, in which case its epoch is
- * Jan. 1, 1904 in the timezone it happens to be in (which may not be the
- * same as the desktop's timezone).
- * Except that there are (I'm sure) tools that add timezones to the Palm.
- * These should be consulted.
- * Times generated locally are in the local timezone (i.e., the one that
- * the desktop machine is in).
- */
-
-/* time_dlp2time_t
- * Convert the DLP time structure into a Unix time_t, and return it.
- */
-time_t
-time_dlp2time_t(const struct dlp_time *dlpt)
-{
- struct tm tm;
-
- /* Convert the dlp_time into a struct tm, then just use mktime() to
- * do the conversion.
- */
- tm.tm_sec = dlpt->second;
- tm.tm_min = dlpt->minute;
- tm.tm_hour = dlpt->hour;
- tm.tm_mday = dlpt->day;
- tm.tm_mon = dlpt->month - 1;
- tm.tm_year = dlpt->year - 1900;
- tm.tm_wday = 0;
- tm.tm_yday = 0;
- tm.tm_isdst = 0;
-#if HAVE_TM_ZONE
- tm.tm_gmtoff = 0;
- tm.tm_zone = NULL;
-#else
-/* XXX - ANSI doesn't allow #warning, and we're not using the timezone for
- * anything yet.
- */
-/* #warning You do not have tm_zone */
-#endif
-
- return mktime(&tm);
-}
-
-/* time_dlp2palmtime
- * Convert a DLP time structure into a Palm time_t (number of seconds since
- * Jan. 1. 1904), and return it.
- */
-udword
-time_dlp2palmtime(const struct dlp_time *dlpt)
-{
- time_t now; /* The time, as a Unix time_t */
- struct tm tm;
-
- /* Convert the dlp_time into a struct tm, use mktime() to do the
- * conversion, and add the difference in epochs.
- */
- tm.tm_sec = dlpt->second;
- tm.tm_min = dlpt->minute;
- tm.tm_hour = dlpt->hour;
- tm.tm_mday = dlpt->day;
- tm.tm_mon = dlpt->month - 1;
- tm.tm_year = dlpt->year - 1900;
- tm.tm_wday = 0;
- tm.tm_yday = 0;
- tm.tm_isdst = 0;
-#if HAVE_TM_ZONE
- tm.tm_gmtoff = 0;
- tm.tm_zone = NULL;
-#endif
-
- now = mktime(&tm);
- now += EPOCH_1904;
-
- return now;
-}
-
-/* time_time_t2dlp
- * Convert a Unix time_t into a DLP time structure. Put the result in
- * 'dlpt'.
- */
-void
-time_time_t2dlp(const time_t t,
- struct dlp_time *dlpt)
-{
- struct tm *tm;
-
- tm = localtime(&t); /* Break 't' down into components */
-
- /* Copy the relevant fields over to 'dlpt' */
- dlpt->year = tm->tm_year + 1900;
- dlpt->month = tm->tm_mon + 1;
- dlpt->day = tm->tm_mday;
- dlpt->hour = tm->tm_hour;
- dlpt->minute = tm->tm_min;
- dlpt->second = tm->tm_sec;
-}
-
-/* time_palmtime2dlp
-
- * Convert a Palm time (seconds since the Jan. 1, 1904) to a DLP time
- * structure. Put the result in 'dlpt'.
- */
-void
-time_palmtime2dlp(const udword palmt,
- struct dlp_time *dlpt)
-{
- struct tm *tm;
-time_t t;
-
- /* Convert the Palm time to a Unix time_t */
- t = palmt - EPOCH_1904;
-
- /* Break the Unix time_t into components */
- tm = localtime(&t);
-
- /* Copy the relevant fields over to 'dlpt' */
- dlpt->year = tm->tm_year + 1900;
- dlpt->month = tm->tm_mon + 1;
- dlpt->day = tm->tm_mday;
- dlpt->hour = tm->tm_hour;
- dlpt->minute = tm->tm_min;
- dlpt->second = tm->tm_sec;
-}
-#endif
-
-/* debug_dump
- * Dump the contents of an array of ubytes to stderr, for debugging.
- */
-void
-debug_dump(FILE *outfile, const char *prefix,
- const ubyte *buf, const udword len)
-{
- unsigned int lineoff;
-
- for (lineoff = 0; lineoff < len; lineoff += 16)
- {
- int i;
-
- fprintf(outfile, "%s ", prefix);
- for (i = 0; i < 16; i++)
- {
- if (lineoff + i < len)
- {
- /* Regular bytes */
- fprintf(outfile, "%02x ", buf[lineoff+i]);
- } else {
- /* Filler at the end of the line */
- fprintf(outfile, " ");
- }
- }
- fprintf(outfile, " | ");
- for (i = 0; i < 16; i++)
- {
- if (lineoff + i < len)
- {
- /* Regular bytes */
- if (isprint(buf[lineoff+i]))
- fprintf(outfile, "%c", buf[lineoff+i]);
- else
- fprintf(outfile, ".");
- } else
- break;
- }
- fprintf(outfile, "\n");
- }
-}
-\f/* This is for Emacs's benefit:
- * Local Variables: ***
- * fill-column: 75 ***
- * End: ***
- */
-#endif
void fix_datum(double *lat, double *lon)
{
double amt;
- static int wgs84;
-
- if (wgs84 == 0) {
- wgs84 = GPS_Lookup_Datum_Index("WGS 84");
- }
/*
* Avoid FP jitter in the common case.
*/
- if (input_datum != wgs84) {
+ if (input_datum != DATUM_WGS84) {
GPS_Math_Known_Datum_To_WGS84_M(*lat, *lon, 0.0, lat, lon,
&amt, input_datum);
}
case 7: break; /* ??? */
case 8: /* radius */
fx = atof(c);
- if (fx > 0)
- wpt->proximity = fx;
+ if (fx > 0) WAYPT_SET(wpt, proximity, fx);
break;
}
}
compegps_rd_init(const char *fname)
{
fin = gbfopen(fname, "rb", MYNAME);
- input_datum = GPS_Lookup_Datum_Index("WGS 84");
+ input_datum = DATUM_WGS84;
}
static void
gbfprintf(fout, " %s", wpt->description);
gbfprintf(fout, "\n");
- if ((wpt->icon_descr != NULL) || (wpt->proximity > 0.0) || \
+ if ((wpt->icon_descr != NULL) || (wpt->wpt_flags.proximity) || \
(option_icon != NULL))
{
char *icon = option_icon;
gbfprintf(fout, "w %s,0,0.0,16777215,255,1,7,,%.1f\n",
(icon != NULL) ? icon : "Waypoint",
- (wpt->proximity > 0.0f) ? wpt->proximity : 0.0);
+ WAYPT_GET(wpt, proximity, 0));
}
xfree(name);
}
strftime(buff, sizeof(buff), "%d-%b-%y %H:%M:%S", &tm);
strupper(buff);
}
+ else strncpy(buff, "01-JAN-70 00:00:00", sizeof(buff));
gbfprintf(fout, "T A %.10f%c%c %.10f%c%c ",
fabs(wpt->latitude), 0xBA, (wpt->latitude >= 0) ? 'N' : 'S',
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.59 for GPSBabel 1.3.3.
+# Generated by GNU Autoconf 2.61 for GPSBabel 1.3.4.
#
# Report bugs to <BUG-REPORT-ADDRESS>.
#
-# Copyright (C) 2003 Free Software Foundation, Inc.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
# This configure script is free software; the Free Software Foundation
# gives unlimited permission to copy, distribute and modify it.
## --------------------- ##
## M4sh Initialization. ##
## --------------------- ##
-# Be Bourne compatible
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
emulate sh
NULLCMD=:
# Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
# is contrary to our usage. Disable this feature.
alias -g '${1+"$@"}'='"$@"'
-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
- set -o posix
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in
+ *posix*) set -o posix ;;
+esac
+
+fi
+
+
+
+
+# PATH needs CR
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
fi
-DUALCASE=1; export DUALCASE # for MKS sh
# Support unset when possible.
if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
fi
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+as_nl='
+'
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+case $0 in
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ { (exit 1); exit 1; }
+fi
+
# Work around bugs in pre-3.0 UWIN ksh.
-$as_unset ENV MAIL MAILPATH
+for as_var in ENV MAIL MAILPATH
+do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+done
PS1='$ '
PS2='> '
PS4='+ '
if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
eval $as_var=C; export $as_var
else
- $as_unset $as_var
+ ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
fi
done
# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1; then
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
as_expr=expr
else
as_expr=false
fi
-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
as_basename=basename
else
as_basename=false
# Name of the executable.
-as_me=`$as_basename "$0" ||
+as_me=`$as_basename -- "$0" ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)$' \| \
- . : '\(.\)' 2>/dev/null ||
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
- /^X\/\(\/\/\)$/{ s//\1/; q; }
- /^X\/\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+# CDPATH.
+$as_unset CDPATH
-# PATH needs CR, and LINENO needs CR and PATH.
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- echo "#! /bin/sh" >conf$$.sh
- echo "exit 0" >>conf$$.sh
- chmod +x conf$$.sh
- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
- PATH_SEPARATOR=';'
- else
- PATH_SEPARATOR=:
- fi
- rm -f conf$$.sh
+if test "x$CONFIG_SHELL" = x; then
+ if (eval ":") 2>/dev/null; then
+ as_have_required=yes
+else
+ as_have_required=no
fi
+ if test $as_have_required = yes && (eval ":
+(as_func_return () {
+ (exit \$1)
+}
+as_func_success () {
+ as_func_return 0
+}
+as_func_failure () {
+ as_func_return 1
+}
+as_func_ret_success () {
+ return 0
+}
+as_func_ret_failure () {
+ return 1
+}
- as_lineno_1=$LINENO
- as_lineno_2=$LINENO
- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
- test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x$as_lineno_3" = "x$as_lineno_2" || {
- # Find who we are. Look in the path if we contain no path at all
- # relative or not.
- case $0 in
- *[\\/]* ) as_myself=$0 ;;
- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
+exitcode=0
+if as_func_success; then
+ :
+else
+ exitcode=1
+ echo as_func_success failed.
+fi
- ;;
- esac
- # We did not find ourselves, most probably we were run as `sh COMMAND'
- # in which case we are not to be found in the path.
- if test "x$as_myself" = x; then
- as_myself=$0
- fi
- if test ! -f "$as_myself"; then
- { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
- { (exit 1); exit 1; }; }
- fi
- case $CONFIG_SHELL in
- '')
+if as_func_failure; then
+ exitcode=1
+ echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+ :
+else
+ exitcode=1
+ echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+ exitcode=1
+ echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
+ :
+else
+ exitcode=1
+ echo positional parameters were not saved.
+fi
+
+test \$exitcode = 0) || { (exit 1); exit 1; }
+
+(
+ as_lineno_1=\$LINENO
+ as_lineno_2=\$LINENO
+ test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" &&
+ test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; }
+") 2> /dev/null; then
+ :
+else
+ as_candidate_shells=
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
- for as_base in sh bash ksh sh5; do
- case $as_dir in
+ case $as_dir in
/*)
- if ("$as_dir/$as_base" -c '
+ for as_base in sh bash ksh sh5; do
+ as_candidate_shells="$as_candidate_shells $as_dir/$as_base"
+ done;;
+ esac
+done
+IFS=$as_save_IFS
+
+
+ for as_shell in $as_candidate_shells $SHELL; do
+ # Try only shells that exist, to save several forks.
+ if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+ { ("$as_shell") 2> /dev/null <<\_ASEOF
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in
+ *posix*) set -o posix ;;
+esac
+
+fi
+
+
+:
+_ASEOF
+}; then
+ CONFIG_SHELL=$as_shell
+ as_have_required=yes
+ if { "$as_shell" 2> /dev/null <<\_ASEOF
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in
+ *posix*) set -o posix ;;
+esac
+
+fi
+
+
+:
+(as_func_return () {
+ (exit $1)
+}
+as_func_success () {
+ as_func_return 0
+}
+as_func_failure () {
+ as_func_return 1
+}
+as_func_ret_success () {
+ return 0
+}
+as_func_ret_failure () {
+ return 1
+}
+
+exitcode=0
+if as_func_success; then
+ :
+else
+ exitcode=1
+ echo as_func_success failed.
+fi
+
+if as_func_failure; then
+ exitcode=1
+ echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+ :
+else
+ exitcode=1
+ echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+ exitcode=1
+ echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = "$1" ); then
+ :
+else
+ exitcode=1
+ echo positional parameters were not saved.
+fi
+
+test $exitcode = 0) || { (exit 1); exit 1; }
+
+(
as_lineno_1=$LINENO
as_lineno_2=$LINENO
- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then
- $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
- $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
- CONFIG_SHELL=$as_dir/$as_base
- export CONFIG_SHELL
- exec "$CONFIG_SHELL" "$0" ${1+"$@"}
- fi;;
- esac
- done
-done
-;;
- esac
+ test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; }
+
+_ASEOF
+}; then
+ break
+fi
+
+fi
+
+ done
+
+ if test "x$CONFIG_SHELL" != x; then
+ for as_var in BASH_ENV ENV
+ do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+ done
+ export CONFIG_SHELL
+ exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+fi
+
+
+ if test $as_have_required = no; then
+ echo This script requires a shell more modern than all the
+ echo shells that I found on your system. Please install a
+ echo modern shell, or manually run the script under such a
+ echo shell if you do have one.
+ { (exit 1); exit 1; }
+fi
+
+
+fi
+
+fi
+
+
+
+(eval "as_func_return () {
+ (exit \$1)
+}
+as_func_success () {
+ as_func_return 0
+}
+as_func_failure () {
+ as_func_return 1
+}
+as_func_ret_success () {
+ return 0
+}
+as_func_ret_failure () {
+ return 1
+}
+
+exitcode=0
+if as_func_success; then
+ :
+else
+ exitcode=1
+ echo as_func_success failed.
+fi
+
+if as_func_failure; then
+ exitcode=1
+ echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+ :
+else
+ exitcode=1
+ echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+ exitcode=1
+ echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
+ :
+else
+ exitcode=1
+ echo positional parameters were not saved.
+fi
+
+test \$exitcode = 0") || {
+ echo No shell found that supports shell functions.
+ echo Please tell autoconf@gnu.org about your system,
+ echo including any error possibly output before this
+ echo message
+}
+
+
+
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
# Create $as_me.lineno as a copy of $as_myself, but with $LINENO
# uniformly replaced by the line number. The first 'sed' inserts a
- # line-number line before each line; the second 'sed' does the real
- # work. The second script uses 'N' to pair each line-number line
- # with the numbered line, and appends trailing '-' during
- # substitution so that $LINENO is not a special case at line end.
+ # line-number line after each line using $LINENO; the second 'sed'
+ # does the real work. The second script uses 'N' to pair each
+ # line-number line with the line containing $LINENO, and appends
+ # trailing '-' during substitution so that $LINENO is not a special
+ # case at line end.
# (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
- # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-)
- sed '=' <$as_myself |
+ # scripts with optimization help from Paolo Bonzini. Blame Lee
+ # E. McMahon (1931-1989) for sed's syntax. :-)
+ sed -n '
+ p
+ /[$]LINENO/=
+ ' <$as_myself |
sed '
+ s/[$]LINENO.*/&-/
+ t lineno
+ b
+ :lineno
N
- s,$,-,
- : loop
- s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+ :loop
+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
t loop
- s,-$,,
- s,^['$as_cr_digits']*\n,,
+ s/-\n.*//
' >$as_me.lineno &&
- chmod +x $as_me.lineno ||
+ chmod +x "$as_me.lineno" ||
{ echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
{ (exit 1); exit 1; }; }
# Don't try to exec as it changes $[0], causing all sort of problems
# (the dirname of $[0] is not the place where we might find the
- # original and so on. Autoconf is especially sensible to this).
- . ./$as_me.lineno
+ # original and so on. Autoconf is especially sensitive to this).
+ . "./$as_me.lineno"
# Exit status is that of the last command.
exit
}
-case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
- *c*,-n*) ECHO_N= ECHO_C='
-' ECHO_T=' ' ;;
- *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
- *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in
+-n*)
+ case `echo 'x\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ *) ECHO_C='\c';;
+ esac;;
+*)
+ ECHO_N='-n';;
esac
-if expr a : '\(a\)' >/dev/null 2>&1; then
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
as_expr=expr
else
as_expr=false
fi
rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir
+fi
echo >conf$$.file
if ln -s conf$$.file conf$$ 2>/dev/null; then
- # We could just check for DJGPP; but this test a) works b) is more generic
- # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
- if test -f conf$$.exe; then
- # Don't use ln at all; we don't have any links
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -p'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
as_ln_s='cp -p'
- else
- as_ln_s='ln -s'
- fi
elif ln conf$$.file conf$$ 2>/dev/null; then
as_ln_s=ln
else
as_ln_s='cp -p'
fi
-rm -f conf$$ conf$$.exe conf$$.file
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
if mkdir -p . 2>/dev/null; then
as_mkdir_p=:
as_mkdir_p=false
fi
-as_executable_p="test -f"
+if test -x / >/dev/null 2>&1; then
+ as_test_x='test -x'
+else
+ if ls -dL / >/dev/null 2>&1; then
+ as_ls_L_option=L
+ else
+ as_ls_L_option=
+ fi
+ as_test_x='
+ eval sh -c '\''
+ if test -d "$1"; then
+ test -d "$1/.";
+ else
+ case $1 in
+ -*)set "./$1";;
+ esac;
+ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
+ ???[sx]*):;;*)false;;esac;fi
+ '\'' sh
+ '
+fi
+as_executable_p=$as_test_x
# Sed expression to map a string onto a valid CPP name.
as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-# IFS
-# We need space, tab and new line, in precisely that order.
-as_nl='
-'
-IFS=" $as_nl"
-
-# CDPATH.
-$as_unset CDPATH
+exec 7<&0 </dev/null 6>&1
# Name of the host.
# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
# so uname gets run too.
ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
-exec 6>&1
-
#
# Initializations.
#
ac_default_prefix=/usr/local
+ac_clean_files=
ac_config_libobj_dir=.
+LIBOBJS=
cross_compiling=no
subdirs=
MFLAGS=
MAKEFLAGS=
SHELL=${CONFIG_SHELL-/bin/sh}
-# Maximum number of lines to put in a shell here document.
-# This variable seems obsolete. It should probably be removed, and
-# only ac_max_sed_lines should be used.
-: ${ac_max_here_lines=38}
-
# Identity of this package.
PACKAGE_NAME='GPSBabel'
PACKAGE_TARNAME='gpsbabel'
-PACKAGE_VERSION='1.3.3'
-PACKAGE_STRING='GPSBabel 1.3.3'
+PACKAGE_VERSION='1.3.4'
+PACKAGE_STRING='GPSBabel 1.3.4'
PACKAGE_BUGREPORT='BUG-REPORT-ADDRESS'
-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS PACKAGE_RELEASE GBMAJOR GBMINOR GBMICRO build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA SET_MAKE FILEINFO RC LIBUSBCONFIG USB_LIBS USB_CFLAGS OSJEEPS GBSER ZLIB EXPAT_LIB EFENCE_LIB GPSBABEL_DEBUG INSTALL_DEBUG DOCDIR LIBOBJS LTLIBOBJS'
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+# include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_STRING_H
+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+# include <memory.h>
+# endif
+# include <string.h>
+#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_subst_vars='SHELL
+PATH_SEPARATOR
+PACKAGE_NAME
+PACKAGE_TARNAME
+PACKAGE_VERSION
+PACKAGE_STRING
+PACKAGE_BUGREPORT
+exec_prefix
+prefix
+program_transform_name
+bindir
+sbindir
+libexecdir
+datarootdir
+datadir
+sysconfdir
+sharedstatedir
+localstatedir
+includedir
+oldincludedir
+docdir
+infodir
+htmldir
+dvidir
+pdfdir
+psdir
+libdir
+localedir
+mandir
+DEFS
+ECHO_C
+ECHO_N
+ECHO_T
+LIBS
+build_alias
+host_alias
+target_alias
+PACKAGE_RELEASE
+GBMAJOR
+GBMINOR
+GBMICRO
+build
+build_cpu
+build_vendor
+build_os
+host
+host_cpu
+host_vendor
+host_os
+target
+target_cpu
+target_vendor
+target_os
+CC
+CFLAGS
+LDFLAGS
+CPPFLAGS
+ac_ct_CC
+EXEEXT
+OBJEXT
+INSTALL_PROGRAM
+INSTALL_SCRIPT
+INSTALL_DATA
+SET_MAKE
+
+CPP
+GREP
+EGREP
+PALM_DB_CMT
+FILEINFO
+RC
+LIBUSBCONFIG
+USB_LIBS
+USB_CFLAGS
+OSJEEPS
+GBSER
+ZLIB
+EXPAT_LIB
+EFENCE_LIB
+GPSBABEL_DEBUG
+INSTALL_DEBUG
+DOCDIR
+LIBOBJS
+LTLIBOBJS'
ac_subst_files=''
+ ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CPP'
+
# Initialize some variables set by options.
ac_init_help=
# and all the variables that are supposed to be based on exec_prefix
# by default will actually change.
# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
bindir='${exec_prefix}/bin'
sbindir='${exec_prefix}/sbin'
libexecdir='${exec_prefix}/libexec'
-datadir='${prefix}/share'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
sysconfdir='${prefix}/etc'
sharedstatedir='${prefix}/com'
localstatedir='${prefix}/var'
-libdir='${exec_prefix}/lib'
includedir='${prefix}/include'
oldincludedir='/usr/include'
-infodir='${prefix}/info'
-mandir='${prefix}/man'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
ac_prev=
+ac_dashdash=
for ac_option
do
# If the previous option needs an argument, assign it.
if test -n "$ac_prev"; then
- eval "$ac_prev=\$ac_option"
+ eval $ac_prev=\$ac_option
ac_prev=
continue
fi
- ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
+ case $ac_option in
+ *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+ *) ac_optarg=yes ;;
+ esac
# Accept the important Cygnus configure options, so we can diagnose typos.
- case $ac_option in
+ case $ac_dashdash$ac_option in
+ --)
+ ac_dashdash=yes ;;
-bindir | --bindir | --bindi | --bind | --bin | --bi)
ac_prev=bindir ;;
--config-cache | -C)
cache_file=config.cache ;;
- -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+ -datadir | --datadir | --datadi | --datad)
ac_prev=datadir ;;
- -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
- | --da=*)
+ -datadir=* | --datadir=* | --datadi=* | --datad=*)
datadir=$ac_optarg ;;
+ -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+ | --dataroo | --dataro | --datar)
+ ac_prev=datarootdir ;;
+ -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+ datarootdir=$ac_optarg ;;
+
-disable-* | --disable-*)
ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
# Reject names that are not valid shell variable names.
- expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null &&
{ echo "$as_me: error: invalid feature name: $ac_feature" >&2
{ (exit 1); exit 1; }; }
- ac_feature=`echo $ac_feature | sed 's/-/_/g'`
- eval "enable_$ac_feature=no" ;;
+ ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
+ eval enable_$ac_feature=no ;;
+
+ -docdir | --docdir | --docdi | --doc | --do)
+ ac_prev=docdir ;;
+ -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+ docdir=$ac_optarg ;;
+
+ -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+ ac_prev=dvidir ;;
+ -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+ dvidir=$ac_optarg ;;
-enable-* | --enable-*)
ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
# Reject names that are not valid shell variable names.
- expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null &&
{ echo "$as_me: error: invalid feature name: $ac_feature" >&2
{ (exit 1); exit 1; }; }
- ac_feature=`echo $ac_feature | sed 's/-/_/g'`
- case $ac_option in
- *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
- *) ac_optarg=yes ;;
- esac
- eval "enable_$ac_feature='$ac_optarg'" ;;
+ ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
+ eval enable_$ac_feature=\$ac_optarg ;;
-exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
| --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
-host=* | --host=* | --hos=* | --ho=*)
host_alias=$ac_optarg ;;
+ -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+ ac_prev=htmldir ;;
+ -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+ | --ht=*)
+ htmldir=$ac_optarg ;;
+
-includedir | --includedir | --includedi | --included | --include \
| --includ | --inclu | --incl | --inc)
ac_prev=includedir ;;
| --libexe=* | --libex=* | --libe=*)
libexecdir=$ac_optarg ;;
+ -localedir | --localedir | --localedi | --localed | --locale)
+ ac_prev=localedir ;;
+ -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+ localedir=$ac_optarg ;;
+
-localstatedir | --localstatedir | --localstatedi | --localstated \
- | --localstate | --localstat | --localsta | --localst \
- | --locals | --local | --loca | --loc | --lo)
+ | --localstate | --localstat | --localsta | --localst | --locals)
ac_prev=localstatedir ;;
-localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
- | --localstate=* | --localstat=* | --localsta=* | --localst=* \
- | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
localstatedir=$ac_optarg ;;
-mandir | --mandir | --mandi | --mand | --man | --ma | --m)
| --progr-tra=* | --program-tr=* | --program-t=*)
program_transform_name=$ac_optarg ;;
+ -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+ ac_prev=pdfdir ;;
+ -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+ pdfdir=$ac_optarg ;;
+
+ -psdir | --psdir | --psdi | --psd | --ps)
+ ac_prev=psdir ;;
+ -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+ psdir=$ac_optarg ;;
+
-q | -quiet | --quiet | --quie | --qui | --qu | --q \
| -silent | --silent | --silen | --sile | --sil)
silent=yes ;;
-with-* | --with-*)
ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
# Reject names that are not valid shell variable names.
- expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null &&
{ echo "$as_me: error: invalid package name: $ac_package" >&2
{ (exit 1); exit 1; }; }
- ac_package=`echo $ac_package| sed 's/-/_/g'`
- case $ac_option in
- *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
- *) ac_optarg=yes ;;
- esac
- eval "with_$ac_package='$ac_optarg'" ;;
+ ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
+ eval with_$ac_package=\$ac_optarg ;;
-without-* | --without-*)
ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
# Reject names that are not valid shell variable names.
- expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null &&
{ echo "$as_me: error: invalid package name: $ac_package" >&2
{ (exit 1); exit 1; }; }
- ac_package=`echo $ac_package | sed 's/-/_/g'`
- eval "with_$ac_package=no" ;;
+ ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
+ eval with_$ac_package=no ;;
--x)
# Obsolete; use --with-x.
expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
{ echo "$as_me: error: invalid variable name: $ac_envvar" >&2
{ (exit 1); exit 1; }; }
- ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
- eval "$ac_envvar='$ac_optarg'"
+ eval $ac_envvar=\$ac_optarg
export $ac_envvar ;;
*)
{ (exit 1); exit 1; }; }
fi
-# Be sure to have absolute paths.
-for ac_var in exec_prefix prefix
+# Be sure to have absolute directory names.
+for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
+ datadir sysconfdir sharedstatedir localstatedir includedir \
+ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+ libdir localedir mandir
do
- eval ac_val=$`echo $ac_var`
+ eval ac_val=\$$ac_var
case $ac_val in
- [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
- *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
- { (exit 1); exit 1; }; };;
- esac
-done
-
-# Be sure to have absolute paths.
-for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
- localstatedir libdir includedir oldincludedir infodir mandir
-do
- eval ac_val=$`echo $ac_var`
- case $ac_val in
- [\\/$]* | ?:[\\/]* ) ;;
- *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
- { (exit 1); exit 1; }; };;
+ [\\/$]* | ?:[\\/]* ) continue;;
+ NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
esac
+ { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+ { (exit 1); exit 1; }; }
done
# There might be people who depend on the old broken behavior: `$host'
test "$silent" = yes && exec 6>/dev/null
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+ { echo "$as_me: error: Working directory cannot be determined" >&2
+ { (exit 1); exit 1; }; }
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+ { echo "$as_me: error: pwd does not report name of working directory" >&2
+ { (exit 1); exit 1; }; }
+
+
# Find the source files, if location was not specified.
if test -z "$srcdir"; then
ac_srcdir_defaulted=yes
- # Try the directory containing this script, then its parent.
- ac_confdir=`(dirname "$0") 2>/dev/null ||
+ # Try the directory containing this script, then the parent directory.
+ ac_confdir=`$as_dirname -- "$0" ||
$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$0" : 'X\(//\)[^/]' \| \
X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
echo X"$0" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
srcdir=$ac_confdir
- if test ! -r $srcdir/$ac_unique_file; then
+ if test ! -r "$srcdir/$ac_unique_file"; then
srcdir=..
fi
else
ac_srcdir_defaulted=no
fi
-if test ! -r $srcdir/$ac_unique_file; then
- if test "$ac_srcdir_defaulted" = yes; then
- { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
- { (exit 1); exit 1; }; }
- else
- { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+if test ! -r "$srcdir/$ac_unique_file"; then
+ test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+ { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
{ (exit 1); exit 1; }; }
- fi
fi
-(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
- { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+ cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2
{ (exit 1); exit 1; }; }
-srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
-ac_env_build_alias_set=${build_alias+set}
-ac_env_build_alias_value=$build_alias
-ac_cv_env_build_alias_set=${build_alias+set}
-ac_cv_env_build_alias_value=$build_alias
-ac_env_host_alias_set=${host_alias+set}
-ac_env_host_alias_value=$host_alias
-ac_cv_env_host_alias_set=${host_alias+set}
-ac_cv_env_host_alias_value=$host_alias
-ac_env_target_alias_set=${target_alias+set}
-ac_env_target_alias_value=$target_alias
-ac_cv_env_target_alias_set=${target_alias+set}
-ac_cv_env_target_alias_value=$target_alias
-ac_env_CC_set=${CC+set}
-ac_env_CC_value=$CC
-ac_cv_env_CC_set=${CC+set}
-ac_cv_env_CC_value=$CC
-ac_env_CFLAGS_set=${CFLAGS+set}
-ac_env_CFLAGS_value=$CFLAGS
-ac_cv_env_CFLAGS_set=${CFLAGS+set}
-ac_cv_env_CFLAGS_value=$CFLAGS
-ac_env_LDFLAGS_set=${LDFLAGS+set}
-ac_env_LDFLAGS_value=$LDFLAGS
-ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
-ac_cv_env_LDFLAGS_value=$LDFLAGS
-ac_env_CPPFLAGS_set=${CPPFLAGS+set}
-ac_env_CPPFLAGS_value=$CPPFLAGS
-ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
-ac_cv_env_CPPFLAGS_value=$CPPFLAGS
+ pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+ srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+ eval ac_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_env_${ac_var}_value=\$${ac_var}
+ eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
#
# Report the --help message.
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures GPSBabel 1.3.3 to adapt to many kinds of systems.
+\`configure' configures GPSBabel 1.3.4 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
-n, --no-create do not create output files
--srcdir=DIR find the sources in DIR [configure dir or \`..']
-_ACEOF
-
- cat <<_ACEOF
Installation directories:
--prefix=PREFIX install architecture-independent files in PREFIX
[$ac_default_prefix]
--bindir=DIR user executables [EPREFIX/bin]
--sbindir=DIR system admin executables [EPREFIX/sbin]
--libexecdir=DIR program executables [EPREFIX/libexec]
- --datadir=DIR read-only architecture-independent data [PREFIX/share]
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
--libdir=DIR object code libraries [EPREFIX/lib]
--includedir=DIR C header files [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc [/usr/include]
- --infodir=DIR info documentation [PREFIX/info]
- --mandir=DIR man documentation [PREFIX/man]
+ --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
+ --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
+ --infodir=DIR info documentation [DATAROOTDIR/info]
+ --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
+ --mandir=DIR man documentation [DATAROOTDIR/man]
+ --docdir=DIR documentation root [DATAROOTDIR/doc/gpsbabel]
+ --htmldir=DIR html documentation [DOCDIR]
+ --dvidir=DIR dvi documentation [DOCDIR]
+ --pdfdir=DIR pdf documentation [DOCDIR]
+ --psdir=DIR ps documentation [DOCDIR]
_ACEOF
cat <<\_ACEOF
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of GPSBabel 1.3.3:";;
+ short | recursive ) echo "Configuration of GPSBabel 1.3.4:";;
esac
cat <<\_ACEOF
CFLAGS C compiler flags
LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
nonstandard directory <lib dir>
- CPPFLAGS C/C++ preprocessor flags, e.g. -I<include dir> if you have
- headers in a nonstandard directory <include dir>
+ LIBS libraries to pass to the linker, e.g. -l<library>
+ CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
+ you have headers in a nonstandard directory <include dir>
+ CPP C preprocessor
Use these variables to override the choices made by `configure' or to help
it to find libraries and programs with nonstandard names/locations.
Report bugs to <BUG-REPORT-ADDRESS>.
_ACEOF
+ac_status=$?
fi
if test "$ac_init_help" = "recursive"; then
# If there are subdirs, report their specific --help.
- ac_popdir=`pwd`
for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
- test -d $ac_dir || continue
+ test -d "$ac_dir" || continue
ac_builddir=.
-if test "$ac_dir" != .; then
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
- # A "../" for each directory in $ac_dir_suffix.
- ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
-else
- ac_dir_suffix= ac_top_builddir=
-fi
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
case $srcdir in
- .) # No --srcdir option. We are building in place.
+ .) # We are building in place.
ac_srcdir=.
- if test -z "$ac_top_builddir"; then
- ac_top_srcdir=.
- else
- ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
- fi ;;
- [\\/]* | ?:[\\/]* ) # Absolute path.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir ;;
- *) # Relative path.
- ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_builddir$srcdir ;;
-esac
-
-# Do not use `cd foo && pwd` to compute absolute paths, because
-# the directories may not exist.
-case `pwd` in
-.) ac_abs_builddir="$ac_dir";;
-*)
- case "$ac_dir" in
- .) ac_abs_builddir=`pwd`;;
- [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
- *) ac_abs_builddir=`pwd`/"$ac_dir";;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_builddir=${ac_top_builddir}.;;
-*)
- case ${ac_top_builddir}. in
- .) ac_abs_top_builddir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
- *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_srcdir=$ac_srcdir;;
-*)
- case $ac_srcdir in
- .) ac_abs_srcdir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
- *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_srcdir=$ac_top_srcdir;;
-*)
- case $ac_top_srcdir in
- .) ac_abs_top_srcdir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
- *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
- esac;;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
esac
-
- cd $ac_dir
- # Check for guested configure; otherwise get Cygnus style configure.
- if test -f $ac_srcdir/configure.gnu; then
- echo
- $SHELL $ac_srcdir/configure.gnu --help=recursive
- elif test -f $ac_srcdir/configure; then
- echo
- $SHELL $ac_srcdir/configure --help=recursive
- elif test -f $ac_srcdir/configure.ac ||
- test -f $ac_srcdir/configure.in; then
- echo
- $ac_configure --help
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+ cd "$ac_dir" || { ac_status=$?; continue; }
+ # Check for guested configure.
+ if test -f "$ac_srcdir/configure.gnu"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+ elif test -f "$ac_srcdir/configure"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure" --help=recursive
else
echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
- fi
- cd $ac_popdir
+ fi || ac_status=$?
+ cd "$ac_pwd" || { ac_status=$?; break; }
done
fi
-test -n "$ac_init_help" && exit 0
+test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-GPSBabel configure 1.3.3
-generated by GNU Autoconf 2.59
+GPSBabel configure 1.3.4
+generated by GNU Autoconf 2.61
-Copyright (C) 2003 Free Software Foundation, Inc.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
This configure script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it.
_ACEOF
- exit 0
+ exit
fi
-exec 5>config.log
-cat >&5 <<_ACEOF
+cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by GPSBabel $as_me 1.3.3, which was
-generated by GNU Autoconf 2.59. Invocation command line was
+It was created by GPSBabel $as_me 1.3.4, which was
+generated by GNU Autoconf 2.61. Invocation command line was
$ $0 $@
_ACEOF
+exec 5>>config.log
{
cat <<_ASUNAME
## --------- ##
/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
-hostinfo = `(hostinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
test -z "$as_dir" && as_dir=.
echo "PATH: $as_dir"
done
+IFS=$as_save_IFS
} >&5
ac_configure_args=
ac_configure_args0=
ac_configure_args1=
-ac_sep=
ac_must_keep_next=false
for ac_pass in 1 2
do
-q | -quiet | --quiet | --quie | --qui | --qu | --q \
| -silent | --silent | --silen | --sile | --sil)
continue ;;
- *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+ *\'*)
ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
esac
case $ac_pass in
-* ) ac_must_keep_next=true ;;
esac
fi
- ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
- # Get rid of the leading space.
- ac_sep=" "
+ ac_configure_args="$ac_configure_args '$ac_arg'"
;;
esac
done
# When interrupted or exit'd, cleanup temporary files, and complete
# config.log. We remove comments because anyway the quotes in there
# would cause problems or look ugly.
-# WARNING: Be sure not to use single quotes in there, as some shells,
-# such as our DU 5.0 friend, will then `close' the trap.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
trap 'exit_status=$?
# Save into config.log some information that might help in debugging.
{
_ASBOX
echo
# The following way of writing the cache mishandles newlines in values,
-{
+(
+ for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
+echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ *) $as_unset $ac_var ;;
+ esac ;;
+ esac
+ done
(set) 2>&1 |
- case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
- *ac_space=\ *)
+ case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
sed -n \
- "s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
- ;;
+ "s/'\''/'\''\\\\'\'''\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+ ;; #(
*)
- sed -n \
- "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
;;
- esac;
-}
+ esac |
+ sort
+)
echo
cat <<\_ASBOX
echo
for ac_var in $ac_subst_vars
do
- eval ac_val=$`echo $ac_var`
- echo "$ac_var='"'"'$ac_val'"'"'"
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ echo "$ac_var='\''$ac_val'\''"
done | sort
echo
if test -n "$ac_subst_files"; then
cat <<\_ASBOX
-## ------------- ##
-## Output files. ##
-## ------------- ##
+## ------------------- ##
+## File substitutions. ##
+## ------------------- ##
_ASBOX
echo
for ac_var in $ac_subst_files
do
- eval ac_val=$`echo $ac_var`
- echo "$ac_var='"'"'$ac_val'"'"'"
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ echo "$ac_var='\''$ac_val'\''"
done | sort
echo
fi
## ----------- ##
_ASBOX
echo
- sed "/^$/d" confdefs.h | sort
+ cat confdefs.h
echo
fi
test "$ac_signal" != 0 &&
echo "$as_me: caught signal $ac_signal"
echo "$as_me: exit $exit_status"
} >&5
- rm -f core *.core &&
- rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
+ rm -f core *.core core.conftest.* &&
+ rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
exit $exit_status
- ' 0
+' 0
for ac_signal in 1 2 13 15; do
trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
done
ac_signal=0
# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -rf conftest* confdefs.h
-# AIX cpp loses on an empty file, so make sure it contains at least a newline.
-echo >confdefs.h
+rm -f -r conftest* confdefs.h
# Predefined preprocessor variables.
# Let the site file select an alternate cache file if it wants to.
# Prefer explicitly selected file to automatically selected ones.
-if test -z "$CONFIG_SITE"; then
- if test "x$prefix" != xNONE; then
- CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
- else
- CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
- fi
+if test -n "$CONFIG_SITE"; then
+ set x "$CONFIG_SITE"
+elif test "x$prefix" != xNONE; then
+ set x "$prefix/share/config.site" "$prefix/etc/config.site"
+else
+ set x "$ac_default_prefix/share/config.site" \
+ "$ac_default_prefix/etc/config.site"
fi
-for ac_site_file in $CONFIG_SITE; do
+shift
+for ac_site_file
+do
if test -r "$ac_site_file"; then
{ echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
echo "$as_me: loading site script $ac_site_file" >&6;}
{ echo "$as_me:$LINENO: loading cache $cache_file" >&5
echo "$as_me: loading cache $cache_file" >&6;}
case $cache_file in
- [\\/]* | ?:[\\/]* ) . $cache_file;;
- *) . ./$cache_file;;
+ [\\/]* | ?:[\\/]* ) . "$cache_file";;
+ *) . "./$cache_file";;
esac
fi
else
# Check that the precious variables saved in the cache have kept the same
# value.
ac_cache_corrupted=false
-for ac_var in `(set) 2>&1 |
- sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
+for ac_var in $ac_precious_vars; do
eval ac_old_set=\$ac_cv_env_${ac_var}_set
eval ac_new_set=\$ac_env_${ac_var}_set
- eval ac_old_val="\$ac_cv_env_${ac_var}_value"
- eval ac_new_val="\$ac_env_${ac_var}_value"
+ eval ac_old_val=\$ac_cv_env_${ac_var}_value
+ eval ac_new_val=\$ac_env_${ac_var}_value
case $ac_old_set,$ac_new_set in
set,)
{ echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
# Pass precious variables to config.status.
if test "$ac_new_set" = set; then
case $ac_new_val in
- *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
- ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
*) ac_arg=$ac_var=$ac_new_val ;;
esac
case " $ac_configure_args " in
{ (exit 1); exit 1; }; }
fi
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
# YYYYMMDD, please, if beta, i.e. "-beta20060413"
-# PACKAGE_RELEASE="-beta20061125"
+# PACKAGE_RELEASE="-beta20070711"
cat >>confdefs.h <<_ACEOF
#define PACKAGE_RELEASE "$PACKAGE_RELEASE"
# AC_CONFIG_SRCDIR([nmea.c])
- ac_config_headers="$ac_config_headers config.h"
+ac_config_headers="$ac_config_headers config.h"
ac_aux_dir=
-for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
- if test -f $ac_dir/install-sh; then
+for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
+ if test -f "$ac_dir/install-sh"; then
ac_aux_dir=$ac_dir
ac_install_sh="$ac_aux_dir/install-sh -c"
break
- elif test -f $ac_dir/install.sh; then
+ elif test -f "$ac_dir/install.sh"; then
ac_aux_dir=$ac_dir
ac_install_sh="$ac_aux_dir/install.sh -c"
break
- elif test -f $ac_dir/shtool; then
+ elif test -f "$ac_dir/shtool"; then
ac_aux_dir=$ac_dir
ac_install_sh="$ac_aux_dir/shtool install -c"
break
fi
done
if test -z "$ac_aux_dir"; then
- { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5
-echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;}
+ { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5
+echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;}
{ (exit 1); exit 1; }; }
fi
-ac_config_guess="$SHELL $ac_aux_dir/config.guess"
-ac_config_sub="$SHELL $ac_aux_dir/config.sub"
-ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
+
# Make sure we can run config.sub.
-$ac_config_sub sun4 >/dev/null 2>&1 ||
- { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5
-echo "$as_me: error: cannot run $ac_config_sub" >&2;}
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+ { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5
+echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;}
{ (exit 1); exit 1; }; }
-echo "$as_me:$LINENO: checking build system type" >&5
-echo $ECHO_N "checking build system type... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking build system type" >&5
+echo $ECHO_N "checking build system type... $ECHO_C" >&6; }
if test "${ac_cv_build+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- ac_cv_build_alias=$build_alias
-test -z "$ac_cv_build_alias" &&
- ac_cv_build_alias=`$ac_config_guess`
-test -z "$ac_cv_build_alias" &&
+ ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+ ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
{ { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
{ (exit 1); exit 1; }; }
-ac_cv_build=`$ac_config_sub $ac_cv_build_alias` ||
- { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5
-echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;}
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+ { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5
+echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;}
{ (exit 1); exit 1; }; }
fi
-echo "$as_me:$LINENO: result: $ac_cv_build" >&5
-echo "${ECHO_T}$ac_cv_build" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_build" >&5
+echo "${ECHO_T}$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5
+echo "$as_me: error: invalid value of canonical build" >&2;}
+ { (exit 1); exit 1; }; };;
+esac
build=$ac_cv_build
-build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-
-
-echo "$as_me:$LINENO: checking host system type" >&5
-echo $ECHO_N "checking host system type... $ECHO_C" >&6
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ echo "$as_me:$LINENO: checking host system type" >&5
+echo $ECHO_N "checking host system type... $ECHO_C" >&6; }
if test "${ac_cv_host+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- ac_cv_host_alias=$host_alias
-test -z "$ac_cv_host_alias" &&
- ac_cv_host_alias=$ac_cv_build_alias
-ac_cv_host=`$ac_config_sub $ac_cv_host_alias` ||
- { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5
-echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;}
+ if test "x$host_alias" = x; then
+ ac_cv_host=$ac_cv_build
+else
+ ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+ { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5
+echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;}
{ (exit 1); exit 1; }; }
+fi
fi
-echo "$as_me:$LINENO: result: $ac_cv_host" >&5
-echo "${ECHO_T}$ac_cv_host" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_host" >&5
+echo "${ECHO_T}$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5
+echo "$as_me: error: invalid value of canonical host" >&2;}
+ { (exit 1); exit 1; }; };;
+esac
host=$ac_cv_host
-host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-
-
-echo "$as_me:$LINENO: checking target system type" >&5
-echo $ECHO_N "checking target system type... $ECHO_C" >&6
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+{ echo "$as_me:$LINENO: checking target system type" >&5
+echo $ECHO_N "checking target system type... $ECHO_C" >&6; }
if test "${ac_cv_target+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- ac_cv_target_alias=$target_alias
-test "x$ac_cv_target_alias" = "x" &&
- ac_cv_target_alias=$ac_cv_host_alias
-ac_cv_target=`$ac_config_sub $ac_cv_target_alias` ||
- { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_target_alias failed" >&5
-echo "$as_me: error: $ac_config_sub $ac_cv_target_alias failed" >&2;}
+ if test "x$target_alias" = x; then
+ ac_cv_target=$ac_cv_host
+else
+ ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` ||
+ { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&5
+echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&2;}
{ (exit 1); exit 1; }; }
+fi
fi
-echo "$as_me:$LINENO: result: $ac_cv_target" >&5
-echo "${ECHO_T}$ac_cv_target" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_target" >&5
+echo "${ECHO_T}$ac_cv_target" >&6; }
+case $ac_cv_target in
+*-*-*) ;;
+*) { { echo "$as_me:$LINENO: error: invalid value of canonical target" >&5
+echo "$as_me: error: invalid value of canonical target" >&2;}
+ { (exit 1); exit 1; }; };;
+esac
target=$ac_cv_target
-target_cpu=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-target_vendor=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-target_os=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_target
+shift
+target_cpu=$1
+target_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+target_os=$*
+IFS=$ac_save_IFS
+case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac
# The aliases save the names the user supplied, while $host etc.
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
set dummy ${ac_tool_prefix}gcc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_prog_CC+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_CC="${ac_tool_prefix}gcc"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
+ { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
if test -z "$ac_cv_prog_CC"; then
ac_ct_CC=$CC
# Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_ac_ct_CC="gcc"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
fi
fi
ac_ct_CC=$ac_cv_prog_ac_ct_CC
if test -n "$ac_ct_CC"; then
- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
+ { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
- CC=$ac_ct_CC
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
else
CC="$ac_cv_prog_CC"
fi
if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
set dummy ${ac_tool_prefix}cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_prog_CC+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_CC="${ac_tool_prefix}cc"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$ac_cv_prog_CC"; then
- ac_ct_CC=$CC
- # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ac_ct_CC="cc"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
+ { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
- CC=$ac_ct_CC
-else
- CC="$ac_cv_prog_CC"
-fi
+ fi
fi
if test -z "$CC"; then
# Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_prog_CC+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
ac_prog_rejected=yes
continue
fi
done
done
+IFS=$as_save_IFS
if test $ac_prog_rejected = yes; then
# We found a bogon in the path, so make sure we never use it.
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
+ { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
fi
if test -z "$CC"; then
if test -n "$ac_tool_prefix"; then
- for ac_prog in cl
+ for ac_prog in cl.exe
do
# Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_prog_CC+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
+ { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
test -n "$CC" && break
done
fi
if test -z "$CC"; then
ac_ct_CC=$CC
- for ac_prog in cl
+ for ac_prog in cl.exe
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_ac_ct_CC="$ac_prog"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
fi
fi
ac_ct_CC=$ac_cv_prog_ac_ct_CC
if test -n "$ac_ct_CC"; then
- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
+ { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
test -n "$ac_ct_CC" && break
done
- CC=$ac_ct_CC
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
fi
fi
{ (exit 1); exit 1; }; }
# Provide some information about the compiler.
-echo "$as_me:$LINENO:" \
- "checking for C compiler version" >&5
+echo "$as_me:$LINENO: checking for C compiler version" >&5
ac_compiler=`set X $ac_compile; echo $2`
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
- (eval $ac_compiler --version </dev/null >&5) 2>&5
+{ (ac_try="$ac_compiler --version >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compiler --version >&5") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
- (eval $ac_compiler -v </dev/null >&5) 2>&5
+{ (ac_try="$ac_compiler -v >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compiler -v >&5") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
- (eval $ac_compiler -V </dev/null >&5) 2>&5
+{ (ac_try="$ac_compiler -V >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compiler -V >&5") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }
# Try to create an executable without -o first, disregard a.out.
# It will help us diagnose broken compilers, and finding out an intuition
# of exeext.
-echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
-echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
+echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; }
ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
- (eval $ac_link_default) 2>&5
+#
+# List of possible output files, starting from the most likely.
+# The algorithm is not robust to junk in `.', hence go to wildcards (a.*)
+# only as a last resort. b.out is created by i960 compilers.
+ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out'
+#
+# The IRIX 6 linker writes into existing files which may not be
+# executable, retaining their permissions. Remove them first so a
+# subsequent execution test works.
+ac_rmfiles=
+for ac_file in $ac_files
+do
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;
+ * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+ esac
+done
+rm -f $ac_rmfiles
+
+if { (ac_try="$ac_link_default"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link_default") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; then
- # Find the output, starting from the most likely. This scheme is
-# not robust to junk in `.', hence go to wildcards (a.*) only as a last
-# resort.
-
-# Be careful to initialize this variable, since it used to be cached.
-# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
-ac_cv_exeext=
-# b.out is created by i960 compilers.
-for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
+ # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile. We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
do
test -f "$ac_file" || continue
case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
- ;;
- conftest.$ac_ext )
- # This is the source file.
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj )
;;
[ab].out )
# We found the default executable, but exeext='' is most
# certainly right.
break;;
*.* )
- ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- # FIXME: I believe we export ac_cv_exeext for Libtool,
- # but it would be cool to find out if it's true. Does anybody
- # maintain Libtool? --akim.
- export ac_cv_exeext
+ if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+ then :; else
+ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ fi
+ # We set ac_cv_exeext here because the later test for it is not
+ # safe: cross compilers may not add the suffix if given an `-o'
+ # argument, so we may need to know it at that point already.
+ # Even if this section looks crufty: it has the advantage of
+ # actually working.
break;;
* )
break;;
esac
done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
else
+ ac_file=''
+fi
+
+{ echo "$as_me:$LINENO: result: $ac_file" >&5
+echo "${ECHO_T}$ac_file" >&6; }
+if test -z "$ac_file"; then
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
fi
ac_exeext=$ac_cv_exeext
-echo "$as_me:$LINENO: result: $ac_file" >&5
-echo "${ECHO_T}$ac_file" >&6
-# Check the compiler produces executables we can run. If not, either
+# Check that the compiler produces executables we can run. If not, either
# the compiler is broken, or we cross compile.
-echo "$as_me:$LINENO: checking whether the C compiler works" >&5
-echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking whether the C compiler works" >&5
+echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; }
# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
# If not cross compiling, check that we can run a simple program.
if test "$cross_compiling" != yes; then
if { ac_try='./$ac_file'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
fi
fi
fi
-echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
+{ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
rm -f a.out a.exe conftest$ac_cv_exeext b.out
ac_clean_files=$ac_clean_files_save
-# Check the compiler produces executables we can run. If not, either
+# Check that the compiler produces executables we can run. If not, either
# the compiler is broken, or we cross compile.
-echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
-echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
-echo "$as_me:$LINENO: result: $cross_compiling" >&5
-echo "${ECHO_T}$cross_compiling" >&6
-
-echo "$as_me:$LINENO: checking for suffix of executables" >&5
-echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
+{ echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
+echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; }
+{ echo "$as_me:$LINENO: result: $cross_compiling" >&5
+echo "${ECHO_T}$cross_compiling" >&6; }
+
+{ echo "$as_me:$LINENO: checking for suffix of executables" >&5
+echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; }
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; then
for ac_file in conftest.exe conftest conftest.*; do
test -f "$ac_file" || continue
case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;
*.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- export ac_cv_exeext
break;;
* ) break;;
esac
fi
rm -f conftest$ac_cv_exeext
-echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
-echo "${ECHO_T}$ac_cv_exeext" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
+echo "${ECHO_T}$ac_cv_exeext" >&6; }
rm -f conftest.$ac_ext
EXEEXT=$ac_cv_exeext
ac_exeext=$EXEEXT
-echo "$as_me:$LINENO: checking for suffix of object files" >&5
-echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for suffix of object files" >&5
+echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; }
if test "${ac_cv_objext+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
}
_ACEOF
rm -f conftest.o conftest.obj
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>&5
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; then
- for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
+ for ac_file in conftest.o conftest.obj conftest.*; do
+ test -f "$ac_file" || continue;
case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;;
*) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
break;;
esac
rm -f conftest.$ac_cv_objext conftest.$ac_ext
fi
-echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
-echo "${ECHO_T}$ac_cv_objext" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
+echo "${ECHO_T}$ac_cv_objext" >&6; }
OBJEXT=$ac_cv_objext
ac_objext=$OBJEXT
-echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
-echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; }
if test "${ac_cv_c_compiler_gnu+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
ac_compiler_gnu=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_compiler_gnu=no
+ ac_compiler_gnu=no
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
ac_cv_c_compiler_gnu=$ac_compiler_gnu
fi
-echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
-echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; }
GCC=`test $ac_compiler_gnu = yes && echo yes`
ac_test_CFLAGS=${CFLAGS+set}
ac_save_CFLAGS=$CFLAGS
-CFLAGS="-g"
-echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
-echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; }
if test "${ac_cv_prog_cc_g+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
+ ac_save_c_werror_flag=$ac_c_werror_flag
+ ac_c_werror_flag=yes
+ ac_cv_prog_cc_g=no
+ CFLAGS="-g"
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_prog_cc_g=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ CFLAGS=""
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_c_werror_flag=$ac_save_c_werror_flag
+ CFLAGS="-g"
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
ac_cv_prog_cc_g=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_prog_cc_g=no
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_c_werror_flag=$ac_save_c_werror_flag
fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; }
if test "$ac_test_CFLAGS" = set; then
CFLAGS=$ac_save_CFLAGS
elif test $ac_cv_prog_cc_g = yes; then
CFLAGS=
fi
fi
-echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
-echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
-if test "${ac_cv_prog_cc_stdc+set}" = set; then
+{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
+echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- ac_cv_prog_cc_stdc=no
+ ac_cv_prog_cc_c89=no
ac_save_CC=$CC
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
function prototypes and stuff, but not '\xHH' hex character constants.
These don't provoke an error unfortunately, instead are silently treated
- as 'x'. The following induces an error, until -std1 is added to get
+ as 'x'. The following induces an error, until -std is added to get
proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
array size at least. It's necessary to write '\x00'==0 to get something
- that's true only with -std1. */
+ that's true only with -std. */
int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+ inside strings and character constants. */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
int test (int i, double x);
struct s1 {int (*f) (int a);};
struct s2 {int (*f) (double a);};
return 0;
}
_ACEOF
-# Don't try gcc -ansi; that turns off useful extensions and
-# breaks some systems' header files.
-# AIX -qlanglvl=ansi
-# Ultrix and OSF/1 -std1
-# HP-UX 10.20 and later -Ae
-# HP-UX older versions -Aa -D_HPUX_SOURCE
-# SVR4 -Xc -D__EXTENSIONS__
-for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
do
CC="$ac_save_CC $ac_arg"
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_prog_cc_stdc=$ac_arg
-break
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_prog_cc_c89=$ac_arg
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest.err conftest.$ac_objext
+
+rm -f core conftest.err conftest.$ac_objext
+ test "x$ac_cv_prog_cc_c89" != "xno" && break
done
-rm -f conftest.$ac_ext conftest.$ac_objext
+rm -f conftest.$ac_ext
CC=$ac_save_CC
fi
-
-case "x$ac_cv_prog_cc_stdc" in
- x|xno)
- echo "$as_me:$LINENO: result: none needed" >&5
-echo "${ECHO_T}none needed" >&6 ;;
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+ x)
+ { echo "$as_me:$LINENO: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6; } ;;
+ xno)
+ { echo "$as_me:$LINENO: result: unsupported" >&5
+echo "${ECHO_T}unsupported" >&6; } ;;
*)
- echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
- CC="$CC $ac_cv_prog_cc_stdc" ;;
+ CC="$CC $ac_cv_prog_cc_c89"
+ { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;;
esac
-# Some people use a C++ compiler to compile C. Since we use `exit',
-# in C++ we need to declare it. In case someone uses the same compiler
-# for both compiling C and C++ we need to have the C++ compiler decide
-# the declaration of exit, since it's the most demanding environment.
-cat >conftest.$ac_ext <<_ACEOF
-#ifndef __cplusplus
- choke me
-#endif
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- for ac_declaration in \
- '' \
- 'extern "C" void std::exit (int) throw (); using std::exit;' \
- 'extern "C" void std::exit (int); using std::exit;' \
- 'extern "C" void exit (int) throw ();' \
- 'extern "C" void exit (int);' \
- 'void exit (int);'
-do
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_declaration
-#include <stdlib.h>
-int
-main ()
-{
-exit (42);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- :
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-continue
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_declaration
-int
-main ()
-{
-exit (42);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- break
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-rm -f conftest*
-if test -n "$ac_declaration"; then
- echo '#ifdef __cplusplus' >>confdefs.h
- echo $ac_declaration >>confdefs.h
- echo '#endif' >>confdefs.h
-fi
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
# OS/2's system install, which has a completely different semantic
# ./install, which can be erroneously created by make from ./install.sh.
-echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
-echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; }
if test -z "$INSTALL"; then
if test "${ac_cv_path_install+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
# by default.
for ac_prog in ginstall scoinst install; do
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
if test $ac_prog = install &&
grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
# AIX install. It has an incompatible calling convention.
;;
esac
done
+IFS=$as_save_IFS
+
+
+fi
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL=$ac_cv_path_install
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ INSTALL=$ac_install_sh
+ fi
+fi
+{ echo "$as_me:$LINENO: result: $INSTALL" >&5
+echo "${ECHO_T}$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+{ echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; }
+set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+ @echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+ *@@@%%%=?*=@@@%%%*)
+ eval ac_cv_prog_make_${ac_make}_set=yes;;
+ *)
+ eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+ { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+ SET_MAKE=
+else
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
+echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+ CPP=
+fi
+if test -z "$CPP"; then
+ if test "${ac_cv_prog_CPP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ # Double quotes because CPP needs to be expanded
+ for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+ do
+ ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Broken: fails on valid input.
+continue
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then
+ # Broken: success on invalid input.
+continue
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+ break
+fi
+
+ done
+ ac_cv_prog_CPP=$CPP
+
+fi
+ CPP=$ac_cv_prog_CPP
+else
+ ac_cv_prog_CPP=$CPP
+fi
+{ echo "$as_me:$LINENO: result: $CPP" >&5
+echo "${ECHO_T}$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Broken: fails on valid input.
+continue
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then
+ # Broken: success on invalid input.
+continue
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+ :
+else
+ { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&5
+echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+{ echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5
+echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; }
+if test "${ac_cv_path_GREP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ # Extract the first word of "grep ggrep" to use in msg output
+if test -z "$GREP"; then
+set dummy grep ggrep; ac_prog_name=$2
+if test "${ac_cv_path_GREP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_path_GREP_found=false
+# Loop through the user's path and test for each of PROGNAME-LIST
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in grep ggrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+ { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+ # Check for GNU ac_path_GREP and select it if it is found.
+ # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+ ac_count=0
+ echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ echo 'GREP' >> "conftest.nl"
+ "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ ac_count=`expr $ac_count + 1`
+ if test $ac_count -gt ${ac_path_GREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_GREP="$ac_path_GREP"
+ ac_path_GREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+
+ $ac_path_GREP_found && break 3
+ done
+done
+
+done
+IFS=$as_save_IFS
+
+
+fi
+
+GREP="$ac_cv_path_GREP"
+if test -z "$GREP"; then
+ { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+else
+ ac_cv_path_GREP=$GREP
+fi
+
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5
+echo "${ECHO_T}$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ echo "$as_me:$LINENO: checking for egrep" >&5
+echo $ECHO_N "checking for egrep... $ECHO_C" >&6; }
+if test "${ac_cv_path_EGREP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+ then ac_cv_path_EGREP="$GREP -E"
+ else
+ # Extract the first word of "egrep" to use in msg output
+if test -z "$EGREP"; then
+set dummy egrep; ac_prog_name=$2
+if test "${ac_cv_path_EGREP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_path_EGREP_found=false
+# Loop through the user's path and test for each of PROGNAME-LIST
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in egrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+ { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+ # Check for GNU ac_path_EGREP and select it if it is found.
+ # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+ ac_count=0
+ echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ echo 'EGREP' >> "conftest.nl"
+ "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ ac_count=`expr $ac_count + 1`
+ if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_EGREP="$ac_path_EGREP"
+ ac_path_EGREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+
+ $ac_path_EGREP_found && break 3
+ done
+done
+
+done
+IFS=$as_save_IFS
+
+
+fi
+
+EGREP="$ac_cv_path_EGREP"
+if test -z "$EGREP"; then
+ { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+else
+ ac_cv_path_EGREP=$EGREP
+fi
+
+
+ fi
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5
+echo "${ECHO_T}$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; }
+if test "${ac_cv_header_stdc+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_header_stdc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_header_stdc=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "memchr" >/dev/null 2>&1; then
+ :
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "free" >/dev/null 2>&1; then
+ :
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+ if test "$cross_compiling" = yes; then
+ :
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+ (('a' <= (c) && (c) <= 'i') \
+ || ('j' <= (c) && (c) <= 'r') \
+ || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+ int i;
+ for (i = 0; i < 256; i++)
+ if (XOR (islower (i), ISLOWER (i))
+ || toupper (i) != TOUPPER (i))
+ return 2;
+ return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
fi
- if test "${ac_cv_path_install+set}" = set; then
- INSTALL=$ac_cv_path_install
- else
- # As a last resort, use the slow shell script. We don't cache a
- # path for INSTALL within a source directory, because that will
- # break other packages using the cache if that directory is
- # removed, or if the path is relative.
- INSTALL=$ac_install_sh
- fi
fi
-echo "$as_me:$LINENO: result: $INSTALL" >&5
-echo "${ECHO_T}$INSTALL" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+
+
+
+
+
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
-echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6
-set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'`
-if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+ inttypes.h stdint.h unistd.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.make <<\_ACEOF
-all:
- @echo 'ac_maketemp="$(MAKE)"'
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
_ACEOF
-# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
-eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
-if test -n "$ac_maketemp"; then
- eval ac_cv_prog_make_${ac_make}_set=yes
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ eval "$as_ac_Header=yes"
else
- eval ac_cv_prog_make_${ac_make}_set=no
-fi
-rm -f conftest.make
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$as_ac_Header=no"
fi
-if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
- SET_MAKE=
-else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
- SET_MAKE="MAKE=${MAKE-make}"
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+fi
+done
-echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5
-echo $ECHO_N "checking whether byte ordering is bigendian... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5
+echo $ECHO_N "checking whether byte ordering is bigendian... $ECHO_C" >&6; }
if test "${ac_cv_c_bigendian+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
int
main ()
{
-#if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN
+#if ! (defined BYTE_ORDER && defined BIG_ENDIAN && defined LITTLE_ENDIAN \
+ && BYTE_ORDER && BIG_ENDIAN && LITTLE_ENDIAN)
bogus endian macros
#endif
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
# It does; now see whether it defined to BIG_ENDIAN or not.
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
ac_cv_c_bigendian=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_c_bigendian=no
+ ac_cv_c_bigendian=no
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-# It does not; compile a test program.
+ # It does not; compile a test program.
if test "$cross_compiling" = yes; then
# try to guess the endianness by grepping values into an object file
ac_cv_c_bigendian=unknown
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-short ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
-short ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
+short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
+short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
void _ascii () { char *s = (char *) ascii_mm; s = (char *) ascii_ii; }
-short ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
-short ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
+short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
+short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
void _ebcdic () { char *s = (char *) ebcdic_mm; s = (char *) ebcdic_ii; }
int
main ()
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
if grep BIGenDianSyS conftest.$ac_objext >/dev/null ; then
ac_cv_c_bigendian=yes
fi
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
else
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
+$ac_includes_default
int
main ()
{
+
/* Are we little or big endian? From Harbison&Steele. */
union
{
- long l;
- char c[sizeof (long)];
+ long int l;
+ char c[sizeof (long int)];
} u;
u.l = 1;
- exit (u.c[sizeof (long) - 1] == 1);
+ return u.c[sizeof (long int) - 1] == 1;
+
+ ;
+ return 0;
}
_ACEOF
rm -f conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
( exit $ac_status )
ac_cv_c_bigendian=yes
fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
+
+
fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5
-echo "${ECHO_T}$ac_cv_c_bigendian" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5
+echo "${ECHO_T}$ac_cv_c_bigendian" >&6; }
case $ac_cv_c_bigendian in
yes)
# Checks for libraries.
-echo "$as_me:$LINENO: checking for cos in -lm" >&5
-echo $ECHO_N "checking for cos in -lm... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for cos in -lm" >&5
+echo $ECHO_N "checking for cos in -lm... $ECHO_C" >&6; }
if test "${ac_cv_lib_m_cos+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-/* Override any gcc2 internal prototype to avoid an error. */
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
char cos ();
int
main ()
{
-cos ();
+return cos ();
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
ac_cv_lib_m_cos=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_lib_m_cos=no
+ ac_cv_lib_m_cos=no
fi
-rm -f conftest.err conftest.$ac_objext \
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_m_cos" >&5
-echo "${ECHO_T}$ac_cv_lib_m_cos" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_m_cos" >&5
+echo "${ECHO_T}$ac_cv_lib_m_cos" >&6; }
if test $ac_cv_lib_m_cos = yes; then
cat >>confdefs.h <<_ACEOF
#define HAVE_LIBM 1
-# Check whether --with-cet or --without-cet was given.
+# Check whether --with-cet was given.
if test "${with_cet+set}" = set; then
- withval="$with_cet"
- cet="$withval"
+ withval=$with_cet; cet="$withval"
else
cet="default"
-fi;
+fi
+
if test $GCC = yes; then
CFLAGS="$CFLAGS -Wall"
fi
-echo "$as_me:$LINENO: checking whether to support shapefiles" >&5
-echo $ECHO_N "checking whether to support shapefiles... $ECHO_C" >&6
-# Check whether --enable-shapefile or --disable-shapefile was given.
+{ echo "$as_me:$LINENO: checking whether to support shapefiles" >&5
+echo $ECHO_N "checking whether to support shapefiles... $ECHO_C" >&6; }
+# Check whether --enable-shapefile was given.
if test "${enable_shapefile+set}" = set; then
- enableval="$enable_shapefile"
- enable_shapefile="$enableval"
+ enableval=$enable_shapefile; enable_shapefile="$enableval"
else
enable_shapefile="yes"
-fi;
+fi
+
if test "$enable_shapefile" != "no" ; then
cat >>confdefs.h <<\_ACEOF
#define SHAPELIB_ENABLED 1
_ACEOF
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
+ { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
-echo "$as_me:$LINENO: checking whether to support Palm/OS pdb formats" >&5
-echo $ECHO_N "checking whether to support Palm/OS pdb formats... $ECHO_C" >&6
-# Check whether --enable-pdb or --disable-pdb was given.
+{ echo "$as_me:$LINENO: checking whether to support Palm/OS pdb formats" >&5
+echo $ECHO_N "checking whether to support Palm/OS pdb formats... $ECHO_C" >&6; }
+# Check whether --enable-pdb was given.
if test "${enable_pdb+set}" = set; then
- enableval="$enable_pdb"
- enable_pdb="$enableval"
+ enableval=$enable_pdb; enable_pdb="$enableval"
else
enable_pdb="yes"
-fi;
+fi
+
if test "$enable_pdb" != "no" ; then
cat >>confdefs.h <<\_ACEOF
#define PDBFMTS_ENABLED 1
_ACEOF
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
+ { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ PALM_DB_CMT=#
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
-echo "$as_me:$LINENO: checking whether to support csv formats" >&5
-echo $ECHO_N "checking whether to support csv formats... $ECHO_C" >&6
-# Check whether --enable-csv or --disable-csv was given.
+
+{ echo "$as_me:$LINENO: checking whether to support csv formats" >&5
+echo $ECHO_N "checking whether to support csv formats... $ECHO_C" >&6; }
+# Check whether --enable-csv was given.
if test "${enable_csv+set}" = set; then
- enableval="$enable_csv"
- enable_csv="$enableval"
+ enableval=$enable_csv; enable_csv="$enableval"
else
enable_csv="yes"
-fi;
+fi
+
if test "$enable_csv" != "no" ; then
cat >>confdefs.h <<\_ACEOF
#define CSVFMTS_ENABLED 1
_ACEOF
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
+ { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
-echo "$as_me:$LINENO: checking whether to support filters" >&5
-echo $ECHO_N "checking whether to support filters... $ECHO_C" >&6
-# Check whether --enable-filters or --disable-filters was given.
+{ echo "$as_me:$LINENO: checking whether to support filters" >&5
+echo $ECHO_N "checking whether to support filters... $ECHO_C" >&6; }
+# Check whether --enable-filters was given.
if test "${enable_filters+set}" = set; then
- enableval="$enable_filters"
- enable_filters="$enableval"
+ enableval=$enable_filters; enable_filters="$enableval"
else
enable_filters="yes"
-fi;
+fi
+
if test "$enable_filters" != "no" ; then
cat >>confdefs.h <<\_ACEOF
#define FILTERS_ENABLED 1
_ACEOF
- echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
+ { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
-echo "$as_me:$LINENO: checking whether to support zlib" >&5
-echo $ECHO_N "checking whether to support zlib... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking whether to support zlib" >&5
+echo $ECHO_N "checking whether to support zlib... $ECHO_C" >&6; }
-# Check whether --with-zlib or --without-zlib was given.
+# Check whether --with-zlib was given.
if test "${with_zlib+set}" = set; then
- withval="$with_zlib"
+ withval=$with_zlib;
+fi
-fi;
case $with_zlib in
"system")
-echo "$as_me:$LINENO: checking for gzopen in -lz" >&5
-echo $ECHO_N "checking for gzopen in -lz... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for gzopen in -lz" >&5
+echo $ECHO_N "checking for gzopen in -lz... $ECHO_C" >&6; }
if test "${ac_cv_lib_z_gzopen+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-/* Override any gcc2 internal prototype to avoid an error. */
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
char gzopen ();
int
main ()
{
-gzopen ();
+return gzopen ();
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
ac_cv_lib_z_gzopen=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_lib_z_gzopen=no
+ ac_cv_lib_z_gzopen=no
fi
-rm -f conftest.err conftest.$ac_objext \
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_z_gzopen" >&5
-echo "${ECHO_T}$ac_cv_lib_z_gzopen" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_z_gzopen" >&5
+echo "${ECHO_T}$ac_cv_lib_z_gzopen" >&6; }
if test $ac_cv_lib_z_gzopen = yes; then
cat >>confdefs.h <<_ACEOF
#define HAVE_LIBZ 1
#define ZLIB_INHIBITED 1
_ACEOF
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
;;
*) ZLIB="\$(ZLIB)"
- echo "$as_me:$LINENO: result: using included version" >&5
-echo "${ECHO_T}using included version" >&6;;
+ { echo "$as_me:$LINENO: result: using included version" >&5
+echo "${ECHO_T}using included version" >&6; };;
esac
case "$target" in
GBSER=gbser_win.o
if test "$with_libusb" = no ; then
- echo "$as_me:$LINENO: result: USB skipped" >&5
-echo "${ECHO_T}USB skipped" >&6
+ { echo "$as_me:$LINENO: result: USB skipped" >&5
+echo "${ECHO_T}USB skipped" >&6; }
OSJEEPS=jeeps/gpsusbstub.o
else
OSJEEPS=jeeps/gpsusbwin.o
;;
*)
GBSER=gbser_posix.o
- echo "$as_me:$LINENO: checking for libusb" >&5
-echo $ECHO_N "checking for libusb... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for libusb" >&5
+echo $ECHO_N "checking for libusb... $ECHO_C" >&6; }
if test "$with_libusb" = no ; then
- echo "$as_me:$LINENO: result: check not done" >&5
-echo "${ECHO_T}check not done" >&6
+ { echo "$as_me:$LINENO: result: check not done" >&5
+echo "${ECHO_T}check not done" >&6; }
OSJEEPS=jeeps/gpsusbstub.o
else
# Extract the first word of "libusb-config", so it can be a program name with args.
set dummy libusb-config; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_prog_LIBUSBCONFIG+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_LIBUSBCONFIG="true"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
+IFS=$as_save_IFS
test -z "$ac_cv_prog_LIBUSBCONFIG" && ac_cv_prog_LIBUSBCONFIG="false"
fi
fi
LIBUSBCONFIG=$ac_cv_prog_LIBUSBCONFIG
if test -n "$LIBUSBCONFIG"; then
- echo "$as_me:$LINENO: result: $LIBUSBCONFIG" >&5
-echo "${ECHO_T}$LIBUSBCONFIG" >&6
+ { echo "$as_me:$LINENO: result: $LIBUSBCONFIG" >&5
+echo "${ECHO_T}$LIBUSBCONFIG" >&6; }
else
- echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
+
if test "$LIBUSBCONFIG" = true; then
OLDFLAGS=$LDFLAGS
OCFLAGS=$CFLAGS
LDFLAGS="$LDFLAGS `libusb-config --libs`"
CFLAGS="$OCFLAGS `libusb-config --cflags`"
- echo "$as_me:$LINENO: checking for usb_interrupt_read in -lusb" >&5
-echo $ECHO_N "checking for usb_interrupt_read in -lusb... $ECHO_C" >&6
+ { echo "$as_me:$LINENO: checking for usb_interrupt_read in -lusb" >&5
+echo $ECHO_N "checking for usb_interrupt_read in -lusb... $ECHO_C" >&6; }
if test "${ac_cv_lib_usb_usb_interrupt_read+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-/* Override any gcc2 internal prototype to avoid an error. */
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
char usb_interrupt_read ();
int
main ()
{
-usb_interrupt_read ();
+return usb_interrupt_read ();
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
ac_cv_lib_usb_usb_interrupt_read=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_lib_usb_usb_interrupt_read=no
+ ac_cv_lib_usb_usb_interrupt_read=no
fi
-rm -f conftest.err conftest.$ac_objext \
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_usb_usb_interrupt_read" >&5
-echo "${ECHO_T}$ac_cv_lib_usb_usb_interrupt_read" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_usb_usb_interrupt_read" >&5
+echo "${ECHO_T}$ac_cv_lib_usb_usb_interrupt_read" >&6; }
if test $ac_cv_lib_usb_usb_interrupt_read = yes; then
cat >>confdefs.h <<\_ACEOF
-echo "$as_me:$LINENO: checking for random stuff to make you feel better" >&5
-echo $ECHO_N "checking for random stuff to make you feel better... $ECHO_C" >&6
-echo "$as_me:$LINENO: result: failed" >&5
-echo "${ECHO_T}failed" >&6
+{ echo "$as_me:$LINENO: checking for random stuff to make you feel better" >&5
+echo $ECHO_N "checking for random stuff to make you feel better... $ECHO_C" >&6; }
+{ echo "$as_me:$LINENO: result: failed" >&5
+echo "${ECHO_T}failed" >&6; }
-# Check whether --with-expathdr or --without-expathdr was given.
+# Check whether --with-expathdr was given.
if test "${with_expathdr+set}" = set; then
- withval="$with_expathdr"
- xpathdr="$withval"
+ withval=$with_expathdr; xpathdr="$withval"
else
case "$target" in
esac
-fi;
+fi
+
if test "x-$xpathdr" != "x-" ; then
CFLAGS="$CFLAGS -I$xpathdr"
fi
-echo "$as_me:$LINENO: checking for libexpat" >&5
-echo $ECHO_N "checking for libexpat... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for libexpat" >&5
+echo $ECHO_N "checking for libexpat... $ECHO_C" >&6; }
-# Check whether --with-libexpat or --without-libexpat was given.
+# Check whether --with-libexpat was given.
if test "${with_libexpat+set}" = set; then
- withval="$with_libexpat"
- CFLAGS="$CFLAGS -L$withval"
+ withval=$with_libexpat; CFLAGS="$CFLAGS -L$withval"
EXPAT_LIB="-L$withval -lexpat"
else
esac
-fi;
-echo "$as_me:$LINENO: result: $EXPAT_LIB" >&5
-echo "${ECHO_T}$EXPAT_LIB" >&6
+fi
+
+{ echo "$as_me:$LINENO: result: $EXPAT_LIB" >&5
+echo "${ECHO_T}$EXPAT_LIB" >&6; }
-echo "$as_me:$LINENO: checking for XML_ParserCreate in -lexpat" >&5
-echo $ECHO_N "checking for XML_ParserCreate in -lexpat... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for XML_ParserCreate in -lexpat" >&5
+echo $ECHO_N "checking for XML_ParserCreate in -lexpat... $ECHO_C" >&6; }
if test "${ac_cv_lib_expat_XML_ParserCreate+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-/* Override any gcc2 internal prototype to avoid an error. */
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
char XML_ParserCreate ();
int
main ()
{
-XML_ParserCreate ();
+return XML_ParserCreate ();
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
ac_cv_lib_expat_XML_ParserCreate=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-ac_cv_lib_expat_XML_ParserCreate=no
+ ac_cv_lib_expat_XML_ParserCreate=no
fi
-rm -f conftest.err conftest.$ac_objext \
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_expat_XML_ParserCreate" >&5
-echo "${ECHO_T}$ac_cv_lib_expat_XML_ParserCreate" >&6
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_expat_XML_ParserCreate" >&5
+echo "${ECHO_T}$ac_cv_lib_expat_XML_ParserCreate" >&6; }
if test $ac_cv_lib_expat_XML_ParserCreate = yes; then
cat >>confdefs.h <<\_ACEOF
fi
-echo "$as_me:$LINENO: checking for efence" >&5
-echo $ECHO_N "checking for efence... $ECHO_C" >&6
-# Check whether --enable-efence or --disable-efence was given.
+{ echo "$as_me:$LINENO: checking for efence" >&5
+echo $ECHO_N "checking for efence... $ECHO_C" >&6; }
+# Check whether --enable-efence was given.
if test "${enable_efence+set}" = set; then
- enableval="$enable_efence"
- if test "$enable_efence" != "no" ; then
+ enableval=$enable_efence; if test "$enable_efence" != "no" ; then
EFENCE_LIB=-lefence
GPSBABEL_DEBUG=gpsbabel-debug
INSTALL_DEBUG=install-debug
fi
-fi;
+fi
+
-echo "$as_me:$LINENO: result: $EFENCE_LIB" >&5
-echo "${ECHO_T}$EFENCE_LIB" >&6
+{ echo "$as_me:$LINENO: result: $EFENCE_LIB" >&5
+echo "${ECHO_T}$EFENCE_LIB" >&6; }
-echo "$as_me:$LINENO: checking for docdir" >&5
-echo $ECHO_N "checking for docdir... $ECHO_C" >&6
+{ echo "$as_me:$LINENO: checking for docdir" >&5
+echo $ECHO_N "checking for docdir... $ECHO_C" >&6; }
-# Check whether --with-doc or --without-doc was given.
+# Check whether --with-doc was given.
if test "${with_doc+set}" = set; then
- withval="$with_doc"
- DOCDIR="$withval"
+ withval=$with_doc; DOCDIR="$withval"
else
DOCDIR="../babelweb/"
-fi;
+fi
+
# Checks for header files.
for ac_func in nanosleep sleep
do
as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
#undef $ac_func
-/* Override any gcc2 internal prototype to avoid an error. */
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
-{
#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
char $ac_func ();
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+#if defined __stub_$ac_func || defined __stub___$ac_func
choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
#endif
int
main ()
{
-return f != $ac_func;
+return $ac_func ();
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>conftest.er1
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
eval "$as_ac_var=yes"
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
-eval "$as_ac_var=no"
+ eval "$as_ac_var=no"
fi
-rm -f conftest.err conftest.$ac_objext \
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
conftest$ac_exeext conftest.$ac_ext
fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+ac_res=`eval echo '${'$as_ac_var'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
if test `eval echo '${'$as_ac_var'}'` = yes; then
cat >>confdefs.h <<_ACEOF
#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
done
- ac_config_files="$ac_config_files Makefile gbversion.h xmldoc/makedoc tools/mkcapabilities win32/gpsbabel.rc coldsync/Makefile jeeps/Makefile shapelib/Makefile zlib/empty"
+ac_config_files="$ac_config_files Makefile gbversion.h xmldoc/makedoc tools/mkcapabilities win32/gpsbabel.rc jeeps/Makefile shapelib/Makefile zlib/empty"
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
# The following way of writing the cache mishandles newlines in values,
# but we know of no workaround that is simple, portable, and efficient.
-# So, don't put newlines in cache variables' values.
+# So, we kill variables containing newlines.
# Ultrix sh set writes to stderr and can't be redirected directly,
# and sets the high bit in the cache file unless we assign to the vars.
-{
+(
+ for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
+echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ *) $as_unset $ac_var ;;
+ esac ;;
+ esac
+ done
+
(set) 2>&1 |
- case `(ac_space=' '; set | grep ac_space) 2>&1` in
- *ac_space=\ *)
+ case $as_nl`(ac_space=' '; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
# `set' does not quote correctly, so add quotes (double-quote
# substitution turns \\\\ into \\, and sed turns \\ into \).
sed -n \
"s/'/'\\\\''/g;
s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
- ;;
+ ;; #(
*)
# `set' quotes correctly as required by POSIX, so do not add quotes.
- sed -n \
- "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
;;
- esac;
-} |
+ esac |
+ sort
+) |
sed '
+ /^ac_cv_env_/b end
t clear
- : clear
+ :clear
s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
t end
- /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
- : end' >>confcache
-if diff $cache_file confcache >/dev/null 2>&1; then :; else
- if test -w $cache_file; then
- test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
+ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+ :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+ if test -w "$cache_file"; then
+ test "x$cache_file" != "x/dev/null" &&
+ { echo "$as_me:$LINENO: updating cache $cache_file" >&5
+echo "$as_me: updating cache $cache_file" >&6;}
cat confcache >$cache_file
else
- echo "not updating unwritable cache $cache_file"
+ { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5
+echo "$as_me: not updating unwritable cache $cache_file" >&6;}
fi
fi
rm -f confcache
# Let make expand exec_prefix.
test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-# VPATH may cause trouble with some makes, so we remove $(srcdir),
-# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
-# trailing colons and then remove the whole line if VPATH becomes empty
-# (actually we leave an empty line to preserve line numbers).
-if test "x$srcdir" = x.; then
- ac_vpsub='/^[ ]*VPATH[ ]*=/{
-s/:*\$(srcdir):*/:/;
-s/:*\${srcdir}:*/:/;
-s/:*@srcdir@:*/:/;
-s/^\([^=]*=[ ]*\):*/\1/;
-s/:*$//;
-s/^[^=]*=[ ]*$//;
-}'
-fi
-
DEFS=-DHAVE_CONFIG_H
ac_libobjs=
ac_ltlibobjs=
for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
# 1. Remove the extension, and $U if already installed.
- ac_i=`echo "$ac_i" |
- sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
- # 2. Add them.
- ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
- ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
+ ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+ ac_i=`echo "$ac_i" | sed "$ac_script"`
+ # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
+ # will be set to the directory where LIBOBJS objects are built.
+ ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+ ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo'
done
LIBOBJS=$ac_libobjs
## M4sh Initialization. ##
## --------------------- ##
-# Be Bourne compatible
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
emulate sh
NULLCMD=:
# Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
# is contrary to our usage. Disable this feature.
alias -g '${1+"$@"}'='"$@"'
-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
- set -o posix
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in
+ *posix*) set -o posix ;;
+esac
+
+fi
+
+
+
+
+# PATH needs CR
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
fi
-DUALCASE=1; export DUALCASE # for MKS sh
# Support unset when possible.
if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
fi
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+as_nl='
+'
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+case $0 in
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ { (exit 1); exit 1; }
+fi
+
# Work around bugs in pre-3.0 UWIN ksh.
-$as_unset ENV MAIL MAILPATH
+for as_var in ENV MAIL MAILPATH
+do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+done
PS1='$ '
PS2='> '
PS4='+ '
if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
eval $as_var=C; export $as_var
else
- $as_unset $as_var
+ ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
fi
done
# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1; then
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
as_expr=expr
else
as_expr=false
fi
-
-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
- as_basename=basename
-else
- as_basename=false
-fi
-
-
-# Name of the executable.
-as_me=`$as_basename "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)$' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
- /^X\/\(\/\/\)$/{ s//\1/; q; }
- /^X\/\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
-
-
-# PATH needs CR, and LINENO needs CR and PATH.
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- echo "#! /bin/sh" >conf$$.sh
- echo "exit 0" >>conf$$.sh
- chmod +x conf$$.sh
- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
- PATH_SEPARATOR=';'
- else
- PATH_SEPARATOR=:
- fi
- rm -f conf$$.sh
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
fi
- as_lineno_1=$LINENO
- as_lineno_2=$LINENO
- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
- test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x$as_lineno_3" = "x$as_lineno_2" || {
- # Find who we are. Look in the path if we contain no path at all
- # relative or not.
- case $0 in
- *[\\/]* ) as_myself=$0 ;;
- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
+# Name of the executable.
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# CDPATH.
+$as_unset CDPATH
+
+
- ;;
- esac
- # We did not find ourselves, most probably we were run as `sh COMMAND'
- # in which case we are not to be found in the path.
- if test "x$as_myself" = x; then
- as_myself=$0
- fi
- if test ! -f "$as_myself"; then
- { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
-echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
- { (exit 1); exit 1; }; }
- fi
- case $CONFIG_SHELL in
- '')
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for as_base in sh bash ksh sh5; do
- case $as_dir in
- /*)
- if ("$as_dir/$as_base" -c '
as_lineno_1=$LINENO
as_lineno_2=$LINENO
- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then
- $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
- $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
- CONFIG_SHELL=$as_dir/$as_base
- export CONFIG_SHELL
- exec "$CONFIG_SHELL" "$0" ${1+"$@"}
- fi;;
- esac
- done
-done
-;;
- esac
+ test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
# Create $as_me.lineno as a copy of $as_myself, but with $LINENO
# uniformly replaced by the line number. The first 'sed' inserts a
- # line-number line before each line; the second 'sed' does the real
- # work. The second script uses 'N' to pair each line-number line
- # with the numbered line, and appends trailing '-' during
- # substitution so that $LINENO is not a special case at line end.
+ # line-number line after each line using $LINENO; the second 'sed'
+ # does the real work. The second script uses 'N' to pair each
+ # line-number line with the line containing $LINENO, and appends
+ # trailing '-' during substitution so that $LINENO is not a special
+ # case at line end.
# (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
- # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-)
- sed '=' <$as_myself |
+ # scripts with optimization help from Paolo Bonzini. Blame Lee
+ # E. McMahon (1931-1989) for sed's syntax. :-)
+ sed -n '
+ p
+ /[$]LINENO/=
+ ' <$as_myself |
sed '
+ s/[$]LINENO.*/&-/
+ t lineno
+ b
+ :lineno
N
- s,$,-,
- : loop
- s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+ :loop
+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
t loop
- s,-$,,
- s,^['$as_cr_digits']*\n,,
+ s/-\n.*//
' >$as_me.lineno &&
- chmod +x $as_me.lineno ||
- { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
-echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
+ chmod +x "$as_me.lineno" ||
+ { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
{ (exit 1); exit 1; }; }
# Don't try to exec as it changes $[0], causing all sort of problems
# (the dirname of $[0] is not the place where we might find the
- # original and so on. Autoconf is especially sensible to this).
- . ./$as_me.lineno
+ # original and so on. Autoconf is especially sensitive to this).
+ . "./$as_me.lineno"
# Exit status is that of the last command.
exit
}
-case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
- *c*,-n*) ECHO_N= ECHO_C='
-' ECHO_T=' ' ;;
- *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
- *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in
+-n*)
+ case `echo 'x\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ *) ECHO_C='\c';;
+ esac;;
+*)
+ ECHO_N='-n';;
esac
-if expr a : '\(a\)' >/dev/null 2>&1; then
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
as_expr=expr
else
as_expr=false
fi
rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir
+fi
echo >conf$$.file
if ln -s conf$$.file conf$$ 2>/dev/null; then
- # We could just check for DJGPP; but this test a) works b) is more generic
- # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
- if test -f conf$$.exe; then
- # Don't use ln at all; we don't have any links
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -p'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
as_ln_s='cp -p'
- else
- as_ln_s='ln -s'
- fi
elif ln conf$$.file conf$$ 2>/dev/null; then
as_ln_s=ln
else
as_ln_s='cp -p'
fi
-rm -f conf$$ conf$$.exe conf$$.file
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
if mkdir -p . 2>/dev/null; then
as_mkdir_p=:
as_mkdir_p=false
fi
-as_executable_p="test -f"
+if test -x / >/dev/null 2>&1; then
+ as_test_x='test -x'
+else
+ if ls -dL / >/dev/null 2>&1; then
+ as_ls_L_option=L
+ else
+ as_ls_L_option=
+ fi
+ as_test_x='
+ eval sh -c '\''
+ if test -d "$1"; then
+ test -d "$1/.";
+ else
+ case $1 in
+ -*)set "./$1";;
+ esac;
+ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
+ ???[sx]*):;;*)false;;esac;fi
+ '\'' sh
+ '
+fi
+as_executable_p=$as_test_x
# Sed expression to map a string onto a valid CPP name.
as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-# IFS
-# We need space, tab and new line, in precisely that order.
-as_nl='
-'
-IFS=" $as_nl"
-
-# CDPATH.
-$as_unset CDPATH
-
exec 6>&1
-# Open the log real soon, to keep \$[0] and so on meaningful, and to
+# Save the log message, to keep $[0] and so on meaningful, and to
# report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling. Logging --version etc. is OK.
-exec 5>>config.log
-{
- echo
- sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
-} >&5
-cat >&5 <<_CSEOF
-
-This file was extended by GPSBabel $as_me 1.3.3, which was
-generated by GNU Autoconf 2.59. Invocation command line was
+# values after options handling.
+ac_log="
+This file was extended by GPSBabel $as_me 1.3.4, which was
+generated by GNU Autoconf 2.61. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
CONFIG_HEADERS = $CONFIG_HEADERS
CONFIG_COMMANDS = $CONFIG_COMMANDS
$ $0 $@
-_CSEOF
-echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
-echo >&5
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
# Files that config.status was made for.
-if test -n "$ac_config_files"; then
- echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
-fi
-
-if test -n "$ac_config_headers"; then
- echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
-fi
-
-if test -n "$ac_config_links"; then
- echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
-fi
+config_files="$ac_config_files"
+config_headers="$ac_config_headers"
-if test -n "$ac_config_commands"; then
- echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
-fi
+_ACEOF
cat >>$CONFIG_STATUS <<\_ACEOF
-
ac_cs_usage="\
\`$as_me' instantiates files from templates according to the
current configuration.
Usage: $0 [OPTIONS] [FILE]...
-h, --help print this help, then exit
- -V, --version print version number, then exit
+ -V, --version print version number and configuration settings, then exit
-q, --quiet do not print progress messages
-d, --debug don't remove temporary files
--recheck update $as_me by reconfiguring in the same conditions
$config_headers
Report bugs to <bug-autoconf@gnu.org>."
-_ACEOF
+_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF
ac_cs_version="\\
-GPSBabel config.status 1.3.3
-configured by $0, generated by GNU Autoconf 2.59,
- with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
+GPSBabel config.status 1.3.4
+configured by $0, generated by GNU Autoconf 2.61,
+ with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
-Copyright (C) 2003 Free Software Foundation, Inc.
+Copyright (C) 2006 Free Software Foundation, Inc.
This config.status script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it."
-srcdir=$srcdir
-INSTALL="$INSTALL"
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
_ACEOF
cat >>$CONFIG_STATUS <<\_ACEOF
do
case $1 in
--*=*)
- ac_option=`expr "x$1" : 'x\([^=]*\)='`
- ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
ac_shift=:
;;
- -*)
+ *)
ac_option=$1
ac_optarg=$2
ac_shift=shift
;;
- *) # This is not an option, so the user has probably given explicit
- # arguments.
- ac_option=$1
- ac_need_defaults=false;;
esac
case $ac_option in
# Handling of the options.
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
ac_cs_recheck=: ;;
- --version | --vers* | -V )
- echo "$ac_cs_version"; exit 0 ;;
- --he | --h)
- # Conflict between --help and --header
- { { echo "$as_me:$LINENO: error: ambiguous option: $1
-Try \`$0 --help' for more information." >&5
-echo "$as_me: error: ambiguous option: $1
-Try \`$0 --help' for more information." >&2;}
- { (exit 1); exit 1; }; };;
- --help | --hel | -h )
- echo "$ac_cs_usage"; exit 0 ;;
- --debug | --d* | -d )
+ --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+ echo "$ac_cs_version"; exit ;;
+ --debug | --debu | --deb | --de | --d | -d )
debug=: ;;
--file | --fil | --fi | --f )
$ac_shift
$ac_shift
CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
ac_need_defaults=false;;
+ --he | --h)
+ # Conflict between --help and --header
+ { echo "$as_me: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&2
+ { (exit 1); exit 1; }; };;
+ --help | --hel | -h )
+ echo "$ac_cs_usage"; exit ;;
-q | -quiet | --quiet | --quie | --qui | --qu | --q \
| -silent | --silent | --silen | --sile | --sil | --si | --s)
ac_cs_silent=: ;;
# This is an error.
- -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
-Try \`$0 --help' for more information." >&5
-echo "$as_me: error: unrecognized option: $1
-Try \`$0 --help' for more information." >&2;}
+ -*) { echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2
{ (exit 1); exit 1; }; } ;;
- *) ac_config_targets="$ac_config_targets $1" ;;
+ *) ac_config_targets="$ac_config_targets $1"
+ ac_need_defaults=false ;;
esac
shift
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF
if \$ac_cs_recheck; then
- echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
- exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+ echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
+ CONFIG_SHELL=$SHELL
+ export CONFIG_SHELL
+ exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
fi
_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+exec 5>>config.log
+{
+ echo
+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+ echo "$ac_log"
+} >&5
-
-
-
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+_ACEOF
cat >>$CONFIG_STATUS <<\_ACEOF
+
+# Handling of arguments.
for ac_config_target in $ac_config_targets
do
- case "$ac_config_target" in
- # Handling of arguments.
- "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
- "gbversion.h" ) CONFIG_FILES="$CONFIG_FILES gbversion.h" ;;
- "xmldoc/makedoc" ) CONFIG_FILES="$CONFIG_FILES xmldoc/makedoc" ;;
- "tools/mkcapabilities" ) CONFIG_FILES="$CONFIG_FILES tools/mkcapabilities" ;;
- "win32/gpsbabel.rc" ) CONFIG_FILES="$CONFIG_FILES win32/gpsbabel.rc" ;;
- "coldsync/Makefile" ) CONFIG_FILES="$CONFIG_FILES coldsync/Makefile" ;;
- "jeeps/Makefile" ) CONFIG_FILES="$CONFIG_FILES jeeps/Makefile" ;;
- "shapelib/Makefile" ) CONFIG_FILES="$CONFIG_FILES shapelib/Makefile" ;;
- "zlib/empty" ) CONFIG_FILES="$CONFIG_FILES zlib/empty" ;;
- "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
+ case $ac_config_target in
+ "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
+ "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+ "gbversion.h") CONFIG_FILES="$CONFIG_FILES gbversion.h" ;;
+ "xmldoc/makedoc") CONFIG_FILES="$CONFIG_FILES xmldoc/makedoc" ;;
+ "tools/mkcapabilities") CONFIG_FILES="$CONFIG_FILES tools/mkcapabilities" ;;
+ "win32/gpsbabel.rc") CONFIG_FILES="$CONFIG_FILES win32/gpsbabel.rc" ;;
+ "jeeps/Makefile") CONFIG_FILES="$CONFIG_FILES jeeps/Makefile" ;;
+ "shapelib/Makefile") CONFIG_FILES="$CONFIG_FILES shapelib/Makefile" ;;
+ "zlib/empty") CONFIG_FILES="$CONFIG_FILES zlib/empty" ;;
+
*) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
{ (exit 1); exit 1; }; };;
esac
done
+
# If the user did not use the arguments to specify the items to instantiate,
# then the envvar interface is used. Set only those that are not.
# We use the long form for the default assignment because of an extremely
fi
# Have a temporary directory for convenience. Make it in the build tree
-# simply because there is no reason to put it here, and in addition,
+# simply because there is no reason against having it here, and in addition,
# creating and moving files from /tmp can sometimes cause problems.
-# Create a temporary directory, and hook for its removal unless debugging.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
$debug ||
{
- trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
+ tmp=
+ trap 'exit_status=$?
+ { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
+' 0
trap '{ (exit 1); exit 1; }' 1 2 13 15
}
-
# Create a (secure) tmp directory for tmp files.
{
- tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
+ tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
test -n "$tmp" && test -d "$tmp"
} ||
{
- tmp=./confstat$$-$RANDOM
- (umask 077 && mkdir $tmp)
+ tmp=./conf$$-$RANDOM
+ (umask 077 && mkdir "$tmp")
} ||
{
echo "$me: cannot create a temporary directory in ." >&2
{ (exit 1); exit 1; }
}
-_ACEOF
-
-cat >>$CONFIG_STATUS <<_ACEOF
-
#
-# CONFIG_FILES section.
+# Set up the sed scripts for CONFIG_FILES section.
#
# No need to generate the scripts if there are no CONFIG_FILES.
# This happens for instance when ./config.status config.h
-if test -n "\$CONFIG_FILES"; then
- # Protect against being on the right side of a sed subst in config.status.
- sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
- s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
-s,@SHELL@,$SHELL,;t t
-s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
-s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
-s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
-s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
-s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
-s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
-s,@exec_prefix@,$exec_prefix,;t t
-s,@prefix@,$prefix,;t t
-s,@program_transform_name@,$program_transform_name,;t t
-s,@bindir@,$bindir,;t t
-s,@sbindir@,$sbindir,;t t
-s,@libexecdir@,$libexecdir,;t t
-s,@datadir@,$datadir,;t t
-s,@sysconfdir@,$sysconfdir,;t t
-s,@sharedstatedir@,$sharedstatedir,;t t
-s,@localstatedir@,$localstatedir,;t t
-s,@libdir@,$libdir,;t t
-s,@includedir@,$includedir,;t t
-s,@oldincludedir@,$oldincludedir,;t t
-s,@infodir@,$infodir,;t t
-s,@mandir@,$mandir,;t t
-s,@build_alias@,$build_alias,;t t
-s,@host_alias@,$host_alias,;t t
-s,@target_alias@,$target_alias,;t t
-s,@DEFS@,$DEFS,;t t
-s,@ECHO_C@,$ECHO_C,;t t
-s,@ECHO_N@,$ECHO_N,;t t
-s,@ECHO_T@,$ECHO_T,;t t
-s,@LIBS@,$LIBS,;t t
-s,@PACKAGE_RELEASE@,$PACKAGE_RELEASE,;t t
-s,@GBMAJOR@,$GBMAJOR,;t t
-s,@GBMINOR@,$GBMINOR,;t t
-s,@GBMICRO@,$GBMICRO,;t t
-s,@build@,$build,;t t
-s,@build_cpu@,$build_cpu,;t t
-s,@build_vendor@,$build_vendor,;t t
-s,@build_os@,$build_os,;t t
-s,@host@,$host,;t t
-s,@host_cpu@,$host_cpu,;t t
-s,@host_vendor@,$host_vendor,;t t
-s,@host_os@,$host_os,;t t
-s,@target@,$target,;t t
-s,@target_cpu@,$target_cpu,;t t
-s,@target_vendor@,$target_vendor,;t t
-s,@target_os@,$target_os,;t t
-s,@CC@,$CC,;t t
-s,@CFLAGS@,$CFLAGS,;t t
-s,@LDFLAGS@,$LDFLAGS,;t t
-s,@CPPFLAGS@,$CPPFLAGS,;t t
-s,@ac_ct_CC@,$ac_ct_CC,;t t
-s,@EXEEXT@,$EXEEXT,;t t
-s,@OBJEXT@,$OBJEXT,;t t
-s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
-s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
-s,@INSTALL_DATA@,$INSTALL_DATA,;t t
-s,@SET_MAKE@,$SET_MAKE,;t t
-s,@FILEINFO@,$FILEINFO,;t t
-s,@RC@,$RC,;t t
-s,@LIBUSBCONFIG@,$LIBUSBCONFIG,;t t
-s,@USB_LIBS@,$USB_LIBS,;t t
-s,@USB_CFLAGS@,$USB_CFLAGS,;t t
-s,@OSJEEPS@,$OSJEEPS,;t t
-s,@GBSER@,$GBSER,;t t
-s,@ZLIB@,$ZLIB,;t t
-s,@EXPAT_LIB@,$EXPAT_LIB,;t t
-s,@EFENCE_LIB@,$EFENCE_LIB,;t t
-s,@GPSBABEL_DEBUG@,$GPSBABEL_DEBUG,;t t
-s,@INSTALL_DEBUG@,$INSTALL_DEBUG,;t t
-s,@DOCDIR@,$DOCDIR,;t t
-s,@LIBOBJS@,$LIBOBJS,;t t
-s,@LTLIBOBJS@,$LTLIBOBJS,;t t
-CEOF
+if test -n "$CONFIG_FILES"; then
_ACEOF
- cat >>$CONFIG_STATUS <<\_ACEOF
- # Split the substitutions into bite-sized pieces for seds with
- # small command number limits, like on Digital OSF/1 and HP-UX.
- ac_max_sed_lines=48
- ac_sed_frag=1 # Number of current file.
- ac_beg=1 # First line for current file.
- ac_end=$ac_max_sed_lines # Line after last line for current file.
- ac_more_lines=:
- ac_sed_cmds=
- while $ac_more_lines; do
- if test $ac_beg -gt 1; then
- sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
- else
- sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
- fi
- if test ! -s $tmp/subs.frag; then
- ac_more_lines=false
- else
- # The purpose of the label and of the branching condition is to
- # speed up the sed processing (if there are no `@' at all, there
- # is no need to browse any of the substitutions).
- # These are the two extra sed commands mentioned above.
- (echo ':t
- /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
- if test -z "$ac_sed_cmds"; then
- ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
- else
- ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
- fi
- ac_sed_frag=`expr $ac_sed_frag + 1`
- ac_beg=$ac_end
- ac_end=`expr $ac_end + $ac_max_sed_lines`
- fi
- done
- if test -z "$ac_sed_cmds"; then
- ac_sed_cmds=cat
+
+
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+ cat >conf$$subs.sed <<_ACEOF
+SHELL!$SHELL$ac_delim
+PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim
+PACKAGE_NAME!$PACKAGE_NAME$ac_delim
+PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim
+PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim
+PACKAGE_STRING!$PACKAGE_STRING$ac_delim
+PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim
+exec_prefix!$exec_prefix$ac_delim
+prefix!$prefix$ac_delim
+program_transform_name!$program_transform_name$ac_delim
+bindir!$bindir$ac_delim
+sbindir!$sbindir$ac_delim
+libexecdir!$libexecdir$ac_delim
+datarootdir!$datarootdir$ac_delim
+datadir!$datadir$ac_delim
+sysconfdir!$sysconfdir$ac_delim
+sharedstatedir!$sharedstatedir$ac_delim
+localstatedir!$localstatedir$ac_delim
+includedir!$includedir$ac_delim
+oldincludedir!$oldincludedir$ac_delim
+docdir!$docdir$ac_delim
+infodir!$infodir$ac_delim
+htmldir!$htmldir$ac_delim
+dvidir!$dvidir$ac_delim
+pdfdir!$pdfdir$ac_delim
+psdir!$psdir$ac_delim
+libdir!$libdir$ac_delim
+localedir!$localedir$ac_delim
+mandir!$mandir$ac_delim
+DEFS!$DEFS$ac_delim
+ECHO_C!$ECHO_C$ac_delim
+ECHO_N!$ECHO_N$ac_delim
+ECHO_T!$ECHO_T$ac_delim
+LIBS!$LIBS$ac_delim
+build_alias!$build_alias$ac_delim
+host_alias!$host_alias$ac_delim
+target_alias!$target_alias$ac_delim
+PACKAGE_RELEASE!$PACKAGE_RELEASE$ac_delim
+GBMAJOR!$GBMAJOR$ac_delim
+GBMINOR!$GBMINOR$ac_delim
+GBMICRO!$GBMICRO$ac_delim
+build!$build$ac_delim
+build_cpu!$build_cpu$ac_delim
+build_vendor!$build_vendor$ac_delim
+build_os!$build_os$ac_delim
+host!$host$ac_delim
+host_cpu!$host_cpu$ac_delim
+host_vendor!$host_vendor$ac_delim
+host_os!$host_os$ac_delim
+target!$target$ac_delim
+target_cpu!$target_cpu$ac_delim
+target_vendor!$target_vendor$ac_delim
+target_os!$target_os$ac_delim
+CC!$CC$ac_delim
+CFLAGS!$CFLAGS$ac_delim
+LDFLAGS!$LDFLAGS$ac_delim
+CPPFLAGS!$CPPFLAGS$ac_delim
+ac_ct_CC!$ac_ct_CC$ac_delim
+EXEEXT!$EXEEXT$ac_delim
+OBJEXT!$OBJEXT$ac_delim
+INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim
+INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim
+INSTALL_DATA!$INSTALL_DATA$ac_delim
+SET_MAKE!$SET_MAKE$ac_delim
+CPP!$CPP$ac_delim
+GREP!$GREP$ac_delim
+EGREP!$EGREP$ac_delim
+PALM_DB_CMT!$PALM_DB_CMT$ac_delim
+FILEINFO!$FILEINFO$ac_delim
+RC!$RC$ac_delim
+LIBUSBCONFIG!$LIBUSBCONFIG$ac_delim
+USB_LIBS!$USB_LIBS$ac_delim
+USB_CFLAGS!$USB_CFLAGS$ac_delim
+OSJEEPS!$OSJEEPS$ac_delim
+GBSER!$GBSER$ac_delim
+ZLIB!$ZLIB$ac_delim
+EXPAT_LIB!$EXPAT_LIB$ac_delim
+EFENCE_LIB!$EFENCE_LIB$ac_delim
+GPSBABEL_DEBUG!$GPSBABEL_DEBUG$ac_delim
+INSTALL_DEBUG!$INSTALL_DEBUG$ac_delim
+DOCDIR!$DOCDIR$ac_delim
+LIBOBJS!$LIBOBJS$ac_delim
+LTLIBOBJS!$LTLIBOBJS$ac_delim
+_ACEOF
+
+ if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 83; then
+ break
+ elif $ac_last_try; then
+ { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+ { (exit 1); exit 1; }; }
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
fi
-fi # test -n "$CONFIG_FILES"
+done
+
+ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed`
+if test -n "$ac_eof"; then
+ ac_eof=`echo "$ac_eof" | sort -nru | sed 1q`
+ ac_eof=`expr $ac_eof + 1`
+fi
+cat >>$CONFIG_STATUS <<_ACEOF
+cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end
_ACEOF
+sed '
+s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g
+s/^/s,@/; s/!/@,|#_!!_#|/
+:n
+t n
+s/'"$ac_delim"'$/,g/; t
+s/$/\\/; p
+N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n
+' >>$CONFIG_STATUS <conf$$subs.sed
+rm -f conf$$subs.sed
+cat >>$CONFIG_STATUS <<_ACEOF
+:end
+s/|#_!!_#|//g
+CEOF$ac_eof
+_ACEOF
+
+
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=/{
+s/:*\$(srcdir):*/:/
+s/:*\${srcdir}:*/:/
+s/:*@srcdir@:*/:/
+s/^\([^=]*=[ ]*\):*/\1/
+s/:*$//
+s/^[^=]*=[ ]*$//
+}'
+fi
+
cat >>$CONFIG_STATUS <<\_ACEOF
-for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
- # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
- case $ac_file in
- - | *:- | *:-:* ) # input from stdin
- cat >$tmp/stdin
- ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
- *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
- * ) ac_file_in=$ac_file.in ;;
+fi # test -n "$CONFIG_FILES"
+
+
+for ac_tag in :F $CONFIG_FILES :H $CONFIG_HEADERS
+do
+ case $ac_tag in
+ :[FHLC]) ac_mode=$ac_tag; continue;;
+ esac
+ case $ac_mode$ac_tag in
+ :[FHL]*:*);;
+ :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5
+echo "$as_me: error: Invalid tag $ac_tag." >&2;}
+ { (exit 1); exit 1; }; };;
+ :[FH]-) ac_tag=-:-;;
+ :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+ esac
+ ac_save_IFS=$IFS
+ IFS=:
+ set x $ac_tag
+ IFS=$ac_save_IFS
+ shift
+ ac_file=$1
+ shift
+
+ case $ac_mode in
+ :L) ac_source=$1;;
+ :[FH])
+ ac_file_inputs=
+ for ac_f
+ do
+ case $ac_f in
+ -) ac_f="$tmp/stdin";;
+ *) # Look for the file first in the build tree, then in the source tree
+ # (if the path is not absolute). The absolute path cannot be DOS-style,
+ # because $ac_f cannot contain `:'.
+ test -f "$ac_f" ||
+ case $ac_f in
+ [\\/$]*) false;;
+ *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+ esac ||
+ { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5
+echo "$as_me: error: cannot find input file: $ac_f" >&2;}
+ { (exit 1); exit 1; }; };;
+ esac
+ ac_file_inputs="$ac_file_inputs $ac_f"
+ done
+
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ configure_input="Generated from "`IFS=:
+ echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure."
+ if test x"$ac_file" != x-; then
+ configure_input="$ac_file. $configure_input"
+ { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+ fi
+
+ case $ac_tag in
+ *:-:* | *:-) cat >"$tmp/stdin";;
+ esac
+ ;;
esac
- # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
- ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+ ac_dir=`$as_dirname -- "$ac_file" ||
$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$ac_file" : 'X\(//\)[^/]' \| \
X"$ac_file" : 'X\(//\)$' \| \
- X"$ac_file" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
+ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
echo X"$ac_file" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
- { if $as_mkdir_p; then
- mkdir -p "$ac_dir"
- else
- as_dir="$ac_dir"
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ { as_dir="$ac_dir"
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
as_dirs=
- while test ! -d "$as_dir"; do
- as_dirs="$as_dir $as_dirs"
- as_dir=`(dirname "$as_dir") 2>/dev/null ||
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$as_dir" : 'X\(//\)[^/]' \| \
X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
done
- test ! -n "$as_dirs" || mkdir $as_dirs
- fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
+echo "$as_me: error: cannot create directory $as_dir" >&2;}
{ (exit 1); exit 1; }; }; }
-
ac_builddir=.
-if test "$ac_dir" != .; then
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
- # A "../" for each directory in $ac_dir_suffix.
- ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
-else
- ac_dir_suffix= ac_top_builddir=
-fi
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
case $srcdir in
- .) # No --srcdir option. We are building in place.
+ .) # We are building in place.
ac_srcdir=.
- if test -z "$ac_top_builddir"; then
- ac_top_srcdir=.
- else
- ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
- fi ;;
- [\\/]* | ?:[\\/]* ) # Absolute path.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir ;;
- *) # Relative path.
- ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_builddir$srcdir ;;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-# Do not use `cd foo && pwd` to compute absolute paths, because
-# the directories may not exist.
-case `pwd` in
-.) ac_abs_builddir="$ac_dir";;
-*)
- case "$ac_dir" in
- .) ac_abs_builddir=`pwd`;;
- [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
- *) ac_abs_builddir=`pwd`/"$ac_dir";;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_builddir=${ac_top_builddir}.;;
-*)
- case ${ac_top_builddir}. in
- .) ac_abs_top_builddir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
- *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_srcdir=$ac_srcdir;;
-*)
- case $ac_srcdir in
- .) ac_abs_srcdir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
- *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
- esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_srcdir=$ac_top_srcdir;;
-*)
- case $ac_top_srcdir in
- .) ac_abs_top_srcdir=$ac_abs_builddir;;
- [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
- *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
- esac;;
-esac
+ case $ac_mode in
+ :F)
+ #
+ # CONFIG_FILE
+ #
case $INSTALL in
[\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
- *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
+ *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
esac
+_ACEOF
- if test x"$ac_file" != x-; then
- { echo "$as_me:$LINENO: creating $ac_file" >&5
-echo "$as_me: creating $ac_file" >&6;}
- rm -f "$ac_file"
- fi
- # Let's still pretend it is `configure' which instantiates (i.e., don't
- # use $as_me), people would be surprised to read:
- # /* config.h. Generated by config.status. */
- if test x"$ac_file" = x-; then
- configure_input=
- else
- configure_input="$ac_file. "
- fi
- configure_input=$configure_input"Generated from `echo $ac_file_in |
- sed 's,.*/,,'` by configure."
-
- # First look for the input files in the build tree, otherwise in the
- # src tree.
- ac_file_inputs=`IFS=:
- for f in $ac_file_in; do
- case $f in
- -) echo $tmp/stdin ;;
- [\\/$]*)
- # Absolute (can't be DOS-style, as IFS=:)
- test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
- { (exit 1); exit 1; }; }
- echo "$f";;
- *) # Relative
- if test -f "$f"; then
- # Build tree
- echo "$f"
- elif test -f "$srcdir/$f"; then
- # Source tree
- echo "$srcdir/$f"
- else
- # /dev/null tree
- { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
- { (exit 1); exit 1; }; }
- fi;;
- esac
- done` || { (exit 1); exit 1; }
+cat >>$CONFIG_STATUS <<\_ACEOF
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+
+case `sed -n '/datarootdir/ {
+ p
+ q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p
+' $ac_file_inputs` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+ { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+ ac_datarootdir_hack='
+ s&@datadir@&$datadir&g
+ s&@docdir@&$docdir&g
+ s&@infodir@&$infodir&g
+ s&@localedir@&$localedir&g
+ s&@mandir@&$mandir&g
+ s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
cat >>$CONFIG_STATUS <<_ACEOF
sed "$ac_vpsub
$extrasub
cat >>$CONFIG_STATUS <<\_ACEOF
:t
/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s,@configure_input@,$configure_input,;t t
-s,@srcdir@,$ac_srcdir,;t t
-s,@abs_srcdir@,$ac_abs_srcdir,;t t
-s,@top_srcdir@,$ac_top_srcdir,;t t
-s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t
-s,@builddir@,$ac_builddir,;t t
-s,@abs_builddir@,$ac_abs_builddir,;t t
-s,@top_builddir@,$ac_top_builddir,;t t
-s,@abs_top_builddir@,$ac_abs_top_builddir,;t t
-s,@INSTALL@,$ac_INSTALL,;t t
-" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
- rm -f $tmp/stdin
- if test x"$ac_file" != x-; then
- mv $tmp/out $ac_file
- else
- cat $tmp/out
- rm -f $tmp/out
- fi
-
-done
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-
-#
-# CONFIG_HEADER section.
-#
-
-# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
-# NAME is the cpp macro being defined and VALUE is the value it is being given.
-#
-# ac_d sets the value in "#define NAME VALUE" lines.
-ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)'
-ac_dB='[ ].*$,\1#\2'
-ac_dC=' '
-ac_dD=',;t'
-# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
-ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
-ac_uB='$,\1#\2define\3'
-ac_uC=' '
-ac_uD=',;t'
-
-for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
- # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+s&@configure_input@&$configure_input&;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+$ac_datarootdir_hack
+" $ac_file_inputs | sed -f "$tmp/subs-1.sed" >$tmp/out
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+ { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
+ { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
+ { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined." >&5
+echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined." >&2;}
+
+ rm -f "$tmp/stdin"
case $ac_file in
- - | *:- | *:-:* ) # input from stdin
- cat >$tmp/stdin
- ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
- *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
- * ) ac_file_in=$ac_file.in ;;
+ -) cat "$tmp/out"; rm -f "$tmp/out";;
+ *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;;
esac
-
- test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
-echo "$as_me: creating $ac_file" >&6;}
-
- # First look for the input files in the build tree, otherwise in the
- # src tree.
- ac_file_inputs=`IFS=:
- for f in $ac_file_in; do
- case $f in
- -) echo $tmp/stdin ;;
- [\\/$]*)
- # Absolute (can't be DOS-style, as IFS=:)
- test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
- { (exit 1); exit 1; }; }
- # Do quote $f, to prevent DOS paths from being IFS'd.
- echo "$f";;
- *) # Relative
- if test -f "$f"; then
- # Build tree
- echo "$f"
- elif test -f "$srcdir/$f"; then
- # Source tree
- echo "$srcdir/$f"
- else
- # /dev/null tree
- { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
- { (exit 1); exit 1; }; }
- fi;;
- esac
- done` || { (exit 1); exit 1; }
- # Remove the trailing spaces.
- sed 's/[ ]*$//' $ac_file_inputs >$tmp/in
-
+ ;;
+ :H)
+ #
+ # CONFIG_HEADER
+ #
_ACEOF
-# Transform confdefs.h into two sed scripts, `conftest.defines' and
-# `conftest.undefs', that substitutes the proper values into
-# config.h.in to produce config.h. The first handles `#define'
-# templates, and the second `#undef' templates.
-# And first: Protect against being on the right side of a sed subst in
-# config.status. Protect against being in an unquoted here document
-# in config.status.
-rm -f conftest.defines conftest.undefs
-# Using a here document instead of a string reduces the quoting nightmare.
-# Putting comments in sed scripts is not portable.
-#
-# `end' is used to avoid that the second main sed command (meant for
-# 0-ary CPP macros) applies to n-ary macro definitions.
-# See the Autoconf documentation for `clear'.
-cat >confdef2sed.sed <<\_ACEOF
-s/[\\&,]/\\&/g
-s,[\\$`],\\&,g
-t clear
-: clear
-s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
-t end
-s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
-: end
-_ACEOF
-# If some macros were called several times there might be several times
-# the same #defines, which is useless. Nevertheless, we may not want to
-# sort them, since we want the *last* AC-DEFINE to be honored.
-uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
-sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
-rm -f confdef2sed.sed
-
-# This sed command replaces #undef with comments. This is necessary, for
+# Transform confdefs.h into a sed script `conftest.defines', that
+# substitutes the proper values into config.h.in to produce config.h.
+rm -f conftest.defines conftest.tail
+# First, append a space to every undef/define line, to ease matching.
+echo 's/$/ /' >conftest.defines
+# Then, protect against being on the right side of a sed subst, or in
+# an unquoted here document, in config.status. If some macros were
+# called several times there might be several #defines for the same
+# symbol, which is useless. But do not sort them, since the last
+# AC_DEFINE must be honored.
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+# These sed commands are passed to sed as "A NAME B PARAMS C VALUE D", where
+# NAME is the cpp macro being defined, VALUE is the value it is being given.
+# PARAMS is the parameter list in the macro definition--in most cases, it's
+# just an empty string.
+ac_dA='s,^\\([ #]*\\)[^ ]*\\([ ]*'
+ac_dB='\\)[ (].*,\\1define\\2'
+ac_dC=' '
+ac_dD=' ,'
+
+uniq confdefs.h |
+ sed -n '
+ t rset
+ :rset
+ s/^[ ]*#[ ]*define[ ][ ]*//
+ t ok
+ d
+ :ok
+ s/[\\&,]/\\&/g
+ s/^\('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/ '"$ac_dA"'\1'"$ac_dB"'\2'"${ac_dC}"'\3'"$ac_dD"'/p
+ s/^\('"$ac_word_re"'\)[ ]*\(.*\)/'"$ac_dA"'\1'"$ac_dB$ac_dC"'\2'"$ac_dD"'/p
+ ' >>conftest.defines
+
+# Remove the space that was appended to ease matching.
+# Then replace #undef with comments. This is necessary, for
# example, in the case of _POSIX_SOURCE, which is predefined and required
# on some systems where configure will not decide to define it.
-cat >>conftest.undefs <<\_ACEOF
-s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
-_ACEOF
-
-# Break up conftest.defines because some shells have a limit on the size
-# of here documents, and old seds have small limits too (100 cmds).
-echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
-echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
-echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
-echo ' :' >>$CONFIG_STATUS
-rm -f conftest.tail
-while grep . conftest.defines >/dev/null
+# (The regexp can be short, since the line contains either #define or #undef.)
+echo 's/ $//
+s,^[ #]*u.*,/* & */,' >>conftest.defines
+
+# Break up conftest.defines:
+ac_max_sed_lines=50
+
+# First sed command is: sed -f defines.sed $ac_file_inputs >"$tmp/out1"
+# Second one is: sed -f defines.sed "$tmp/out1" >"$tmp/out2"
+# Third one will be: sed -f defines.sed "$tmp/out2" >"$tmp/out1"
+# et cetera.
+ac_in='$ac_file_inputs'
+ac_out='"$tmp/out1"'
+ac_nxt='"$tmp/out2"'
+
+while :
do
- # Write a limited-size here document to $tmp/defines.sed.
- echo ' cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
- # Speed up: don't consider the non `#define' lines.
- echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS
- # Work around the forget-to-reset-the-flag bug.
- echo 't clr' >>$CONFIG_STATUS
- echo ': clr' >>$CONFIG_STATUS
- sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
+ # Write a here document:
+ cat >>$CONFIG_STATUS <<_ACEOF
+ # First, check the format of the line:
+ cat >"\$tmp/defines.sed" <<\\CEOF
+/^[ ]*#[ ]*undef[ ][ ]*$ac_word_re[ ]*\$/b def
+/^[ ]*#[ ]*define[ ][ ]*$ac_word_re[( ]/b def
+b
+:def
+_ACEOF
+ sed ${ac_max_sed_lines}q conftest.defines >>$CONFIG_STATUS
echo 'CEOF
- sed -f $tmp/defines.sed $tmp/in >$tmp/out
- rm -f $tmp/in
- mv $tmp/out $tmp/in
-' >>$CONFIG_STATUS
- sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
+ sed -f "$tmp/defines.sed"' "$ac_in >$ac_out" >>$CONFIG_STATUS
+ ac_in=$ac_out; ac_out=$ac_nxt; ac_nxt=$ac_in
+ sed 1,${ac_max_sed_lines}d conftest.defines >conftest.tail
+ grep . conftest.tail >/dev/null || break
rm -f conftest.defines
mv conftest.tail conftest.defines
done
-rm -f conftest.defines
-echo ' fi # grep' >>$CONFIG_STATUS
-echo >>$CONFIG_STATUS
-
-# Break up conftest.undefs because some shells have a limit on the size
-# of here documents, and old seds have small limits too (100 cmds).
-echo ' # Handle all the #undef templates' >>$CONFIG_STATUS
-rm -f conftest.tail
-while grep . conftest.undefs >/dev/null
-do
- # Write a limited-size here document to $tmp/undefs.sed.
- echo ' cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
- # Speed up: don't consider the non `#undef'
- echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS
- # Work around the forget-to-reset-the-flag bug.
- echo 't clr' >>$CONFIG_STATUS
- echo ': clr' >>$CONFIG_STATUS
- sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
- echo 'CEOF
- sed -f $tmp/undefs.sed $tmp/in >$tmp/out
- rm -f $tmp/in
- mv $tmp/out $tmp/in
-' >>$CONFIG_STATUS
- sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
- rm -f conftest.undefs
- mv conftest.tail conftest.undefs
-done
-rm -f conftest.undefs
+rm -f conftest.defines conftest.tail
+echo "ac_result=$ac_in" >>$CONFIG_STATUS
cat >>$CONFIG_STATUS <<\_ACEOF
- # Let's still pretend it is `configure' which instantiates (i.e., don't
- # use $as_me), people would be surprised to read:
- # /* config.h. Generated by config.status. */
- if test x"$ac_file" = x-; then
- echo "/* Generated by configure. */" >$tmp/config.h
- else
- echo "/* $ac_file. Generated by configure. */" >$tmp/config.h
- fi
- cat $tmp/in >>$tmp/config.h
- rm -f $tmp/in
if test x"$ac_file" != x-; then
- if diff $ac_file $tmp/config.h >/dev/null 2>&1; then
+ echo "/* $configure_input */" >"$tmp/config.h"
+ cat "$ac_result" >>"$tmp/config.h"
+ if diff $ac_file "$tmp/config.h" >/dev/null 2>&1; then
{ echo "$as_me:$LINENO: $ac_file is unchanged" >&5
echo "$as_me: $ac_file is unchanged" >&6;}
else
- ac_dir=`(dirname "$ac_file") 2>/dev/null ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$ac_file" : 'X\(//\)[^/]' \| \
- X"$ac_file" : 'X\(//\)$' \| \
- X"$ac_file" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X"$ac_file" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
- { if $as_mkdir_p; then
- mkdir -p "$ac_dir"
- else
- as_dir="$ac_dir"
- as_dirs=
- while test ! -d "$as_dir"; do
- as_dirs="$as_dir $as_dirs"
- as_dir=`(dirname "$as_dir") 2>/dev/null ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| \
- . : '\(.\)' 2>/dev/null ||
-echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
- /^X\(\/\/\)$/{ s//\1/; q; }
- /^X\(\/\).*/{ s//\1/; q; }
- s/.*/./; q'`
- done
- test ! -n "$as_dirs" || mkdir $as_dirs
- fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
- { (exit 1); exit 1; }; }; }
-
rm -f $ac_file
- mv $tmp/config.h $ac_file
+ mv "$tmp/config.h" $ac_file
fi
else
- cat $tmp/config.h
- rm -f $tmp/config.h
+ echo "/* $configure_input */"
+ cat "$ac_result"
fi
-done
-_ACEOF
+ rm -f "$tmp/out12"
+ ;;
+
+
+ esac
+
+done # for ac_tag
-cat >>$CONFIG_STATUS <<\_ACEOF
{ (exit 0); exit 0; }
_ACEOF
AC_PREREQ(2.59)
-AC_INIT(GPSBabel, 1.3.3, BUG-REPORT-ADDRESS)
+AC_INIT(GPSBabel, 1.3.4, BUG-REPORT-ADDRESS)
# YYYYMMDD, please, if beta, i.e. "-beta20060413"
-# PACKAGE_RELEASE="-beta20061125"
+# PACKAGE_RELEASE="-beta20070711"
AC_DEFINE_UNQUOTED(PACKAGE_RELEASE, "$PACKAGE_RELEASE", [Define to the release name of this package.])
AC_SUBST(PACKAGE_RELEASE)
AC_DEFINE(PDBFMTS_ENABLED, 1, [1 to enable Palm PDB support])
AC_MSG_RESULT(yes)
else
+ PALM_DB_CMT=#
AC_MSG_RESULT(no)
fi
+AC_SUBST(PALM_DB_CMT)
AC_MSG_CHECKING(whether to support csv formats)
AC_ARG_ENABLE(csv,
# AC_CHECK_FUNCS([atexit floor localtime_r memmove memset pow select sqrt strchr strcspn strdup strerror strncasecmp strrchr strspn strstr strtol strtoul])
AC_CHECK_FUNCS([nanosleep sleep])
-AC_CONFIG_FILES([Makefile gbversion.h xmldoc/makedoc tools/mkcapabilities win32/gpsbabel.rc coldsync/Makefile jeeps/Makefile shapelib/Makefile zlib/empty])
+AC_CONFIG_FILES([Makefile gbversion.h xmldoc/makedoc tools/mkcapabilities win32/gpsbabel.rc jeeps/Makefile shapelib/Makefile zlib/empty])
AC_OUTPUT
#include "defs.h"
#if PDBFMTS_ENABLED
-#include "coldsync/palm.h"
-#include "coldsync/pdb.h"
+#include "pdbfile.h"
#include "grtcirc.h"
#define MYNAME "CoPilot Waypoint"
pdb_double latitude; /* PDB double format, */
pdb_double longitude; /* similarly, neg = east */
pdb_double magvar; /* magnetic variation in degrees, neg = east */
- udword elevation; /* feet */
+ gbuint32 elevation; /* feet */
};
struct record1 {
pdb_float elevation; /* feet */
};
-static FILE *file_in;
-static FILE *file_out;
+static pdbfile *file_in, *file_out;
static const char *out_fname;
-static struct pdb *opdb;
-static struct pdb_record *opdb_rec;
+static int ct;
static void
rd_init(const char *fname)
{
- file_in = xfopen(fname, "rb", MYNAME);
+ file_in = pdb_open(fname, MYNAME);
}
static void
rd_deinit(void)
{
- fclose(file_in);
+ pdb_close(file_in);
}
static void
wr_init(const char *fname)
{
- file_out = xfopen(fname, "wb", MYNAME);
+ file_out = pdb_create(fname, MYNAME);
out_fname = fname;
+ ct = 0;
}
static void
wr_deinit(void)
{
- fclose(file_out);
+ pdb_close(file_out);
}
static waypoint*
-read_version0(ubyte* data)
+read_version0(void *data)
{
char *vdata;
waypoint *wpt_tmp;
}
static waypoint*
-read_version1(ubyte* data)
+read_version1(void *data)
{
char *vdata;
waypoint *wpt_tmp;
}
static waypoint*
-read_version3(ubyte* data)
+read_version3(void *data)
{
char *vdata;
waypoint *wpt_tmp;
}
static waypoint*
-read_version4(ubyte* data)
+read_version4(void *data)
{
char *vdata;
waypoint *wpt_tmp;
static void
data_read(void)
{
- struct pdb *pdb;
- struct pdb_record *pdb_rec;
+ pdbrec_t *pdb_rec;
- if (NULL == (pdb = pdb_Read(fileno(file_in)))) {
- fatal(MYNAME ": pdb_Read failed\n");
- }
-
- if ((pdb->creator != GXPU_CREATOR && pdb->creator != AP_P_CREATOR) ||
- (pdb->type != wayp_TYPE && pdb->type != swpu_TYPE &&
- pdb->type != wayu_TYPE)) {
+ if ((file_in->creator != GXPU_CREATOR && file_in->creator != AP_P_CREATOR) ||
+ (file_in->type != wayp_TYPE && file_in->type != swpu_TYPE &&
+ file_in->type != wayu_TYPE)) {
fatal(MYNAME ": Not a CoPilot file.\n");
}
- if (pdb->version > 4) {
- fatal(MYNAME ": %d is not a known version.\n", pdb->version);
+ if (file_in->version > 4) {
+ fatal(MYNAME ": %d is not a known version.\n", file_in->version);
}
- for(pdb_rec = pdb->rec_index.rec; pdb_rec; pdb_rec=pdb_rec->next) {
+ for(pdb_rec = file_in->rec_list; pdb_rec; pdb_rec = pdb_rec->next) {
waypoint *wpt_tmp;
- switch (pdb->version)
+ switch (file_in->version)
{
case 0:
wpt_tmp = read_version0(pdb_rec->data);
wpt_tmp = read_version4(pdb_rec->data);
break;
default:
- fatal(MYNAME ": Unknown version %d.\n", pdb->version);
+ fatal(MYNAME ": Unknown version %d.\n", file_in->version);
}
waypt_add(wpt_tmp);
-
}
- free_pdb(pdb);
}
static void
copilot_writewpt(const waypoint *wpt)
{
struct record4 *rec;
- static int ct = 0;
char *vdata;
rec = xcalloc(sizeof(*rec)+1141,1);
}
vdata += strlen( vdata ) + 1;
- opdb_rec = new_Record (0, 2, ct++, (uword) (vdata-(char *)rec), (const ubyte *)rec);
-
- if (opdb_rec == NULL) {
- fatal(MYNAME ": libpdb couldn't create record\n");
- }
+ pdb_write_rec(file_out, 0, 2, ct++, rec, (char *)vdata - (char *)rec);
- if (pdb_AppendRecord(opdb, opdb_rec)) {
- fatal(MYNAME ": libpdb couldn't append record\n");
- }
xfree(rec);
}
static void
data_write(void)
{
- if (NULL == (opdb = new_pdb())) {
- fatal (MYNAME ": new_pdb failed\n");
- }
-
- strncpy(opdb->name, out_fname, PDB_DBNAMELEN);
- opdb->name[PDB_DBNAMELEN-1] = 0;
- opdb->attributes = PDB_ATTR_BACKUP;
- opdb->ctime = opdb->mtime = current_time() + 2082844800U;
- opdb->type = wayp_TYPE;
- opdb->creator = GXPU_CREATOR;
- opdb->version = 4;
+ strncpy(file_out->name, out_fname, PDB_DBNAMELEN);
+ file_out->name[PDB_DBNAMELEN-1] = 0;
+ file_out->attr = PDB_FLAG_BACKUP;
+ file_out->ctime = file_out->mtime = current_time() + 2082844800U;
+ file_out->type = wayp_TYPE;
+ file_out->creator = GXPU_CREATOR;
+ file_out->version = 4;
waypt_disp_all(copilot_writewpt);
-
- pdb_Write(opdb, fileno(file_out));
}
#include "defs.h"
#if PDBFMTS_ENABLED
#include "csv_util.h"
-#include "coldsync/palm.h"
-#include "coldsync/pdb.h"
+#include "pdbfile.h"
#include "grtcirc.h"
#define MYNAME "cotoGPS"
pdb_double arc; /* Course, unknown dimension */
pdb_double x,y; /* Internal virtual coordinates used for drawing the track on the Palm */
- word alt; /* Altitude */
+ gbuint16 alt; /* Altitude */
/* accuracy and precision information for use where applicable */
gbuint16 hdop; /* _dop * 10 */
gbuint16 vdop;
gbuint16 pdop;
- ubyte sat_tracked;
- ubyte fix_quality;
+ gbuint8 sat_tracked;
+ gbuint8 fix_quality;
gbuint16 speed; /* *10 */
gbuint32 time; /* Palm Time */
typedef char appinfo_category[16];
typedef struct appinfo {
- ubyte U0;
- ubyte renamedCategories;
+ gbuint8 U0;
+ gbuint8 renamedCategories;
appinfo_category categories[CATEGORY_NAME_LENGTH];
- ubyte ids[16];
- ubyte maxid;
+ gbuint8 ids[16];
+ gbuint8 maxid;
} appinfo_t;
#define APPINFO_SIZE sizeof(appinfo_t)
-static FILE *file_in;
-static FILE *file_out;
+static pdbfile *file_in, *file_out;
static const char *out_fname;
static const char *in_fname; /* We might need that for naming tracks */
-static struct pdb *opdb;
static short_handle mkshort_wr_handle;
+static int ct;
static char *zerocat = NULL;
static char *internals = NULL;
static void
rd_init(const char *fname)
{
- file_in = xfopen(fname, "rb", MYNAME);
+ file_in = pdb_open(fname, MYNAME);
in_fname = fname;
}
static void
rd_deinit(void)
{
- fclose(file_in);
+ pdb_close(file_in);
}
static void
wr_init(const char *fname)
{
- file_out = xfopen(fname, "wb", MYNAME);
+ file_out = pdb_create(fname, MYNAME);
out_fname = fname;
+ ct = 0;
}
static void
wr_deinit(void)
{
- fclose(file_out);
+ pdb_close(file_out);
}
/* helpers */
}
static void
-coto_track_read(struct pdb *pdb)
+coto_track_read(void)
{
struct record_track *rec;
- struct pdb_record *pdb_rec;
+ pdbrec_t *pdb_rec;
route_head *trk_head;
char *track_name;
- if (strncmp(pdb->name, "cotoGPS TrackDB", PDB_DBNAMELEN) != 0)
+ if (strncmp(file_in->name, "cotoGPS TrackDB", PDB_DBNAMELEN) != 0)
// Use database name if not default
- track_name = xstrndup(pdb->name, PDB_DBNAMELEN);
+ track_name = xstrndup(file_in->name, PDB_DBNAMELEN);
else {
// Use filename for new track title
const char *fnametmp = strrchr(in_fname, '/');
trk_head->rte_name = track_name;
- for(pdb_rec = pdb->rec_index.rec; pdb_rec; pdb_rec=pdb_rec->next)
+ for (pdb_rec = file_in->rec_list; pdb_rec; pdb_rec = pdb_rec->next)
{
waypoint *wpt_tmp;
wpt_tmp->latitude = DEG(pdb_read_double(&rec->latitude));
// It's not the course, so leave it out for now
- // wpt_tmp->course = pdb_read_double(&rec->arc);
+ // WAYPT_SET(wpt_tmp, course, pdb_read_double(&rec->arc));
wpt_tmp->altitude = be_read16(&rec->alt);
if (internals)
wpt_tmp->fix = fix_dgps;
break;
}
- wpt_tmp->speed = be_read16(&rec->speed)/10.0;
+ WAYPT_SET(wpt_tmp, speed, be_read16(&rec->speed)/10.0);
rec->time = be_read32(&rec->time);
if (rec->time != 0)
{
}
static void
-coto_wpt_read(struct pdb *pdb)
+coto_wpt_read(void)
{
struct record_wpt *rec;
- struct pdb_record *pdb_rec;
+ pdbrec_t *pdb_rec;
appinfo_t *app;
- app = (struct appinfo *) pdb->appinfo;
+ app = (struct appinfo *) file_in->appinfo;
- for(pdb_rec = pdb->rec_index.rec; pdb_rec; pdb_rec=pdb_rec->next)
+ for(pdb_rec = file_in->rec_list; pdb_rec; pdb_rec = pdb_rec->next)
{
waypoint *wpt_tmp;
char *c;
static void
data_read(void)
{
- struct pdb *pdb;
-
- if (NULL == (pdb = pdb_Read(fileno(file_in)))) {
- fatal(MYNAME ": pdb_Read failed\n");
- }
-
- if ((pdb->creator != MYCREATOR) || ((pdb->type != MYTYPETRACK) && (pdb->type != MYTYPEWPT))) {
- warning("Creator %x Type %x Version %d\n", (int) pdb->creator, (int) pdb->type, (int) pdb->version);
+ if ((file_in->creator != MYCREATOR) || ((file_in->type != MYTYPETRACK) && (file_in->type != MYTYPEWPT))) {
+ warning("Creator %x Type %x Version %d\n", (int) file_in->creator, (int) file_in->type, (int) file_in->version);
fatal(MYNAME ": Not a cotoGPS file.\n");
}
- is_fatal((pdb->version > 0),
+ is_fatal((file_in->version > 0),
MYNAME ": This file is from an unsupported newer version of cotoGPS. It may be supported in a newer version of GPSBabel.\n");
- switch(pdb->type)
+ switch(file_in->type)
{
case MYTYPETRACK:
- coto_track_read(pdb);
+ coto_track_read();
break;
case MYTYPEWPT:
- coto_wpt_read(pdb);
+ coto_wpt_read();
break;
}
-
- free_pdb(pdb);
}
static void
-coto_prepare_wpt_write(struct pdb *opdb)
+coto_prepare_wpt_write(void)
{
struct appinfo *ai;
- opdb->name[PDB_DBNAMELEN-1] = 0;
- opdb->attributes = PDB_ATTR_BACKUP;
- opdb->type = MYTYPEWPT;
- opdb->creator = MYCREATOR;
- opdb->version = 0;
+
+ file_out->name[PDB_DBNAMELEN-1] = 0;
+ file_out->attr = PDB_FLAG_BACKUP;
+ file_out->type = MYTYPEWPT;
+ file_out->creator = MYCREATOR;
+ file_out->version = 0;
- strncpy(opdb->name, "cotoGPS MarkerDB", PDB_DBNAMELEN);
+ strncpy(file_out->name, "cotoGPS MarkerDB", PDB_DBNAMELEN);
- opdb->appinfo_len = APPINFO_SIZE;
- opdb->appinfo = calloc(APPINFO_SIZE,1);
+ file_out->appinfo_len = APPINFO_SIZE;
+ file_out->appinfo = calloc(APPINFO_SIZE,1);
- ai = (struct appinfo *) opdb->appinfo;
+ ai = (struct appinfo *) file_out->appinfo;
be_write16(&ai->renamedCategories, 31); // Don't ask me why...
if (zerocat)
strncpy(ai->categories[0], zerocat, 16);
coto_wpt_write(const waypoint *wpt)
{
struct record_wpt *rec;
- struct appinfo *ai = (struct appinfo *) opdb->appinfo;
- static int ct;
- struct pdb_record *opdb_rec;
+ struct appinfo *ai = (struct appinfo *) file_out->appinfo;
char *notes = NULL;
char *shortname = NULL;
int size;
- ubyte cat = 0;
+ gbuint8 cat = 0;
int i;
mkshort_wr_handle = mkshort_new_handle();
}
}
- opdb_rec = new_Record (0, cat, ct++, size, (const ubyte *)rec);
+ pdb_write_rec(file_out, 0, cat, ct++, (const gbuint8 *)rec, size);
- if (opdb_rec == NULL)
- fatal(MYNAME ": libpdb couldn't create record\n");
-
- if (pdb_AppendRecord(opdb, opdb_rec))
- fatal(MYNAME ": libpdb couldn't append record\n");
-
xfree(shortname);
xfree(rec);
static void
data_write(void)
{
- if (NULL == (opdb = new_pdb())) {
- fatal (MYNAME ": new_pdb failed\n");
- }
-
- coto_prepare_wpt_write(opdb);
-
+ coto_prepare_wpt_write();
waypt_disp_all(coto_wpt_write);
- /*
- if we want waypoints from all data, we should create a new filter for that
-
- track_disp_all(NULL, NULL, coto_wpt_write);
- route_disp_all(NULL, NULL, coto_wpt_write);
- */
-
- pdb_Write(opdb, fileno(file_out));
-
}
*/
#include <ctype.h>
+#include <math.h>
#include "defs.h"
#include "csv_util.h"
#include "grtcirc.h"
#include "strptime.h"
#include "jeeps/gpsmath.h"
+#include "xmlgeneric.h" // for xml_fill_in_time.
#define MYNAME "CSV_UTIL"
static double oldlat = 999;
static int waypt_out_count;
+static route_head *csv_track, *csv_route;
/*********************************************************************/
/* csv_stringclean() - remove any unwanted characters from string. */
if ( strptime( s, format, &stm ) )
{
+ if ((stm.tm_mday == 0) && (stm.tm_mon == 0) && (stm.tm_year == 0)) {
+ stm.tm_mday = 1;
+ stm.tm_mon = 0;
+ stm.tm_year = 70;
+ }
stm.tm_isdst = -1;
if (gmt)
return mkgmtime(&stm);
if ( strcmp(fmp->key, "LAT_NMEA") == 0) {
wpt->latitude = ddmm2degrees(atof(s));
} else
+ if ( strncmp(fmp->key, "LAT_10E", 7) == 0) {
+ wpt->latitude = atof(s) / pow((double)10, atof(fmp->key+7));
+ } else
/* LONGITUDE CONVERSIONS ***********************************************/
if (strcmp(fmp->key, "LON_DECIMAL") == 0) {
/* longitude as a pure decimal value */
if ( strcmp(fmp->key, "LON_NMEA") == 0) {
wpt->longitude = ddmm2degrees(atof(s));
} else
+ if ( strncmp(fmp->key, "LON_10E", 7) == 0) {
+ wpt->longitude = atof(s) / pow((double)10, atof(fmp->key+7));
+ } else
/* LAT AND LON CONVERSIONS ********************************************/
if ( strcmp(fmp->key, "LATLON_HUMAN_READABLE") == 0) {
human_to_dec( s, &wpt->latitude, &wpt->longitude, 0 );
if (strcmp(fmp->key, "LON_DIR") == 0) {
/* longitude E/W. Ingore on input for now */
} else
-
+ /* SPECIAL COORDINATES/GRID */
+ if (strcmp(fmp->key, "MAP_EN_BNG") == 0) {
+ parse_coordinates(s, DATUM_OSGB36, grid_bng,
+ &wpt->latitude, &wpt->longitude, MYNAME);
+ } else
/* ALTITUDE CONVERSIONS ************************************************/
if (strcmp(fmp->key, "ALT_FEET") == 0) {
/* altitude in feet as a decimal value */
wpt->altitude = FEET_TO_METERS(atof(s));
+ if (wpt->altitude < unknown_alt + 1)
+ wpt->altitude = unknown_alt;
} else
if (strcmp(fmp->key, "ALT_METERS") == 0) {
/* altitude in meters as a decimal value */
wpt->altitude = atof(s);
+ if (wpt->altitude < unknown_alt + 1)
+ wpt->altitude = unknown_alt;
} else
/* PATH CONVERSIONS ************************************************/
if (strcmp(fmp->key, "PATH_SPEED") == 0) {
- wpt->speed = atof(s);
+ WAYPT_SET(wpt, speed, atof(s));
+ } else
+ if (strcmp(fmp->key, "PATH_SPEED_KPH") == 0) {
+ WAYPT_SET(wpt, speed, KPH_TO_MPS(atof(s)));
+ } else
+ if (strcmp(fmp->key, "PATH_SPEED_MPH") == 0) {
+ WAYPT_SET(wpt, speed, MPH_TO_MPS(atof(s)));
+ } else
+ if (strcmp(fmp->key, "PATH_SPEED_KNOTS") == 0) {
+ WAYPT_SET(wpt, speed, KNOTS_TO_MPS(atof(s)));
} else
if (strcmp(fmp->key, "PATH_COURSE") == 0) {
- wpt->course = atof(s);
+ WAYPT_SET(wpt, course, atof(s));
} else
/* TIME CONVERSIONS ***************************************************/
(strcmp(fmp->key, "HMSL_TIME") == 0) ) {
wpt->creation_time += addhms(s, fmp->printfc);
} else
- if (strcmp(fmp->key, "ISO_TIME") == 0) {
- wpt->creation_time = xml_parse_time(s, NULL);
+ if ((strcmp(fmp->key, "ISO_TIME") == 0) ||
+ (strcmp(fmp->key, "ISO_TIME_MS") == 0)) {
+ wpt->creation_time = xml_parse_time(s, &wpt->microseconds);
} else
if (strcmp(fmp->key, "GEOCACHE_LAST_FOUND") == 0) {
wpt->gc_data.last_found = yyyymmdd_to_time(s);
wpt->fix = fix_unknown;
}
} else
+ /* Tracks and routes *********************************************/
+ if ( strcmp ( fmp->key, "ROUTE_NAME") == 0) {
+ if (csv_route) csv_route->rte_name = csv_stringtrim(s, enclosure, 0);
+ } else
+ if ( strcmp ( fmp->key, "TRACK_NAME") == 0) {
+ if (csv_track) csv_track->rte_name = csv_stringtrim(s, enclosure, 0);
+ } else
/* OTHER STUFF ***************************************************/
if ( strcmp( fmp->key, "PATH_DISTANCE_MILES") == 0) {
route_head *rte = NULL;
route_head *trk = NULL;
+ csv_route = csv_track = NULL;
if (xcsv_file.datatype == trkdata) {
trk = route_head_alloc();
track_add_head(trk);
+ csv_track = trk;
} else
if (xcsv_file.datatype == rtedata) {
rte = route_head_alloc();
route_add_head(rte);
+ csv_route = rte;
}
while ((buff = gbfgetstr(xcsv_file.xcsvfp))) {
s = buff;
s = csv_lineparse(s, xcsv_file.field_delimiter, "", linecount);
+ if (QUEUE_EMPTY(&xcsv_file.ifield)) {
+ fatal(MYNAME ": attempt to read, but style '%s' has no IFIELDs in it.\n", xcsv_file.description? xcsv_file.description : "unknown");
+ }
+
/* reset the ifield queue */
elem = QUEUE_FIRST(&xcsv_file.ifield);
pathdist = 0;
oldlat = 999;
oldlon = 999;
+ csv_route = csv_track = NULL;
+ switch (xcsv_file.datatype) {
+ case trkdata:
+ csv_track = (route_head *) head;
+ break;
+ case rtedata:
+ csv_route = (route_head *) head;
+ break;
+ default:
+ break;
+ }
}
/*****************************************************************************/
field_map_t *fmp;
queue *elem, *tmp;
double latitude, longitude;
+
+ buff[0] = '\0';
if ( oldlon < 900 ) {
pathdist += radtomiles(gcdist(RAD(oldlat),RAD(oldlon),
if (strcmp(fmp->key, "LAT_NMEA") == 0) {
writebuff(buff, fmp->printfc, degrees2ddmm(lat));
} else
+ if (strncmp(fmp->key, "LAT_10E", 7) == 0) {
+ writebuff(buff, fmp->printfc, lat * pow((double)10, atof(fmp->key+7)));
+ } else
/* LONGITUDE CONVERSIONS*********************************************/
if (strcmp(fmp->key, "LON_DECIMAL") == 0) {
if (strcmp(fmp->key, "LON_NMEA") == 0) {
writebuff(buff, fmp->printfc, degrees2ddmm(lon));
} else
+ if (strncmp(fmp->key, "LON_10E", 7) == 0) {
+ writebuff(buff, fmp->printfc, lon * pow((double)10, atof(fmp->key+7)));
+ } else
/* DIRECTIONS *******************************************************/
if (strcmp(fmp->key, "LAT_DIR") == 0) {
writebuff(buff, fmp->printfc,
LON_DIR(lon));
} else
+
+ /* SPECIAL COORDINATES */
+ if (strcmp(fmp->key, "MAP_EN_BNG") == 0) {
+ char map[3];
+ double north, east;
+ if (! GPS_Math_WGS84_To_UKOSMap_M(wpt->latitude, wpt->longitude, &east, &north, map))
+ fatal(MYNAME ": Position (%.5f/%.5f) outside of BNG.\n",
+ wpt->latitude, wpt->longitude);
+ snprintf(buff, sizeof(buff), fmp->printfc, map, (int)(east + 0.5), (int)(north + 0.5));
+ } else
/* ALTITUDE CONVERSIONS**********************************************/
if (strcmp(fmp->key, "ALT_FEET") == 0) {
if (strcmp(fmp->key, "PATH_SPEED") == 0) {
writebuff( buff, fmp->printfc, wpt->speed );
} else
+ if (strcmp(fmp->key, "PATH_SPEED_KPH") == 0) {
+ writebuff( buff, fmp->printfc, MPS_TO_KPH(wpt->speed));
+ } else
+ if (strcmp(fmp->key, "PATH_SPEED_MPH") == 0) {
+ writebuff( buff, fmp->printfc, MPS_TO_MPH(wpt->speed));
+ } else
+ if (strcmp(fmp->key, "PATH_SPEED_KNOTS") == 0) {
+ writebuff( buff, fmp->printfc, MPS_TO_KNOTS(wpt->speed));
+ } else
if (strcmp(fmp->key, "PATH_COURSE") == 0) {
writebuff( buff, fmp->printfc, wpt->course );
} else
if (strcmp(fmp->key, "ISO_TIME") == 0) {
writetime(buff, sizeof buff, "%Y-%m-%dT%H:%M:%SZ", wpt->creation_time, 1 );
} else
+ if (strcmp(fmp->key, "ISO_TIME_MS") == 0) {
+ xml_fill_in_time(buff, wpt->creation_time,
+ wpt->microseconds, XML_LONG_TIME);
+ } else
if (strcmp(fmp->key, "GEOCACHE_LAST_FOUND") == 0) {
writebuff(buff, fmp->printfc, time_to_yyyymmdd(wpt->gc_data.last_found));
} else
writebuff(buff, fmp->printfc, NONULL(wpt->gc_data.placer));
field_is_unknown = !wpt->gc_data.placer;
} else
+ /* Tracks and Routes ***********************************************/
+ if (strcmp(fmp->key, "TRACK_NAME") == 0) {
+ if (csv_track) writebuff(buff, fmp->printfc, NONULL(csv_track->rte_name));
+ } else
+ if (strcmp(fmp->key, "ROUTE_NAME") == 0) {
+ if (csv_route) writebuff(buff, fmp->printfc, NONULL(csv_route->rte_name));
+ } else
/* GPS STUFF *******************************************************/
if (strcmp(fmp->key, "GPS_HDOP") == 0) {
break;
}
writebuff(buff, fmp->printfc, fix);
- } else
-
- {
- /* this should probably never happen */
+ } else {
+ warning( MYNAME ": Unknown style directive: %s\n", fmp->key);
}
{
queue *elem, *tmp;
ogue_t *ogp;
+ time_t time;
+ struct tm tm;
+ char tbuf[32];
/* reset the index counter */
waypt_out_count = 0;
+
+ time = gpsbabel_time;
+ if (time == 0) /* testo script ? */
+ tm = *gmtime(&time);
+ else
+ tm = *localtime(&time);
/* output prologue lines, if any. */
QUEUE_FOR_EACH(&xcsv_file.prologue, elem, tmp) {
- char *ol;
+ char *cout, *ctmp;
ogp = (ogue_t *) elem;
- ol = strsub(ogp->val, "__FILE__", xcsv_file.fname);
+ cout = xstrdup((ogp->val) ? ogp->val : "");
+
+ while ((ctmp = strsub(cout, "__FILE__", xcsv_file.fname))) {
+ xfree(cout);
+ cout = ctmp;
+ }
+
+ while ((ctmp = strsub(cout, "__VERSION__", (time == 0) ? "" : gpsbabel_version))) {
+ xfree(cout);
+ cout = ctmp;
+ }
+
+ while (strstr(cout, "__DATE__")) {
+ strftime(tbuf, sizeof(tbuf), "%m/%d/%Y", &tm);
+ ctmp = strsub(cout, "__DATE__", tbuf);
+ xfree(cout);
+ cout = ctmp;
+ }
- if (ol) {
- gbfprintf(xcsv_file.xcsvfp, "%s", ol);
- xfree(ol);
- } else {
- gbfprintf(xcsv_file.xcsvfp, "%s", ogp->val);
+ while (strstr(cout, "__TIME__")) {
+ strftime(tbuf, sizeof(tbuf), "%H:%S:%M", &tm);
+ ctmp = strsub(cout, "__TIME__", tbuf);
+ xfree(cout);
+ cout = ctmp;
}
+
+ while (strstr(cout, "__DATE_AND_TIME__")) {
+ strftime(tbuf, sizeof(tbuf), "%a %b %d %H:%M:%S %Y", &tm);
+ ctmp = strsub(cout, "__DATE_AND_TIME__", tbuf);
+ xfree(cout);
+ cout = ctmp;
+ }
+
+ gbfprintf(xcsv_file.xcsvfp, "%s", cout);
+ xfree(cout);
gbfprintf(xcsv_file.xcsvfp, "%s", xcsv_file.record_delimiter);
}
if ((xcsv_file.datatype == 0) || (xcsv_file.datatype == wptdata))
waypt_disp_all(xcsv_waypt_pr);
- if ((xcsv_file.datatype == 0) || (xcsv_file.datatype == rtedata))
+ if ((xcsv_file.datatype == 0) || (xcsv_file.datatype == rtedata))
route_disp_all(xcsv_resetpathlen,xcsv_noop,xcsv_waypt_pr);
if ((xcsv_file.datatype == 0) || (xcsv_file.datatype == trkdata))
track_disp_all(xcsv_resetpathlen,xcsv_noop,xcsv_waypt_pr);
/*
- Copyright (C) 2002, 2003, 2004, 2005 Robert Lipe, robertlipe@usa.net
+ Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Robert Lipe, robertlipe@usa.net
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
#define SECONDS_PER_HOUR (60L*60)
#define SECONDS_PER_DAY (24L*60*60)
+/* meters/second to kilometers/hour */
+#define MPS_TO_KPH(a) ((double)(a)*SECONDS_PER_HOUR/1000)
+
+/* meters/second to miles/hour */
+#define MPS_TO_MPH(a) (METERS_TO_MILES(a) * SECONDS_PER_HOUR)
+
+/* meters/second to knots */
+#define MPS_TO_KNOTS(a) (MPS_TO_KPH((a)/1.852))
+
+/* kilometers/hour to meters/second */
+#define KPH_TO_MPS(a) ((double)(a)*1000/SECONDS_PER_HOUR)
+
+/* miles/hour to meters/second */
+#define MPH_TO_MPS(a) (MILES_TO_METERS(a) / SECONDS_PER_HOUR)
+
+/* knots to meters/second */
+#define KNOTS_TO_MPS(a) (KPH_TO_MPS((a)*1.852))
+
/*
* Snprintf is in SUS (so it's in most UNIX-like substance) and it's in
* C99 (albeit with slightly different semantics) but it isn't in C89.
time_t exported;
time_t last_found;
char *placer; /* Placer name */
+ int placer_id; /* Placer id */
char *hint; /* all these UTF8, XML entities removed, May be not HTML. */
utf_string desc_short;
utf_string desc_long;
#define FS_OZI 0x6f7a6900L
#define FS_GMSD 0x474d5344L /* GMSD = Garmin specific data */
+/*
+ * Structures and functions for multiple URLs per waypoint.
+ */
+typedef struct url_link {
+ struct url_link *url_next;
+ char *url;
+ char *url_link_text;
+} url_link;
+
/*
* Misc bitfields inside struct waypoint;
*/
unsigned int icon_descr_is_dynamic:1;
unsigned int shortname_is_synthetic:1;
unsigned int cet_converted:1; /* strings are converted to UTF8; interesting only for input */
+ /* "flagged fields" */
+ unsigned int temperature:1; /* temperature field is set */
+ unsigned int proximity:1; /* proximity field is set */
+ unsigned int course:1; /* course field is set */
+ unsigned int speed:1; /* speed field is set */
+ unsigned int depth:1; /* depth field is set */
+ /* !ToDo!
+ unsigned int altitude:1; /+ altitude field is set +/
+ ... and others
+ */
+
} wp_flags;
+#define WAYPT_SET(wpt,member,val) { wpt->member = (val); wpt->wpt_flags.member = 1; }
+#define WAYPT_GET(wpt,member,def) (wpt->wpt_flags.member) ? (wpt->member) : (def)
+#define WAYPT_UNSET(wpt,member) wpt->wpt_flags.member = 0
+#define WAYPT_HAS(wpt,member) (wpt->wpt_flags.member)
/*
* This is a waypoint, as stored in the GPSR. It tries to not
* cater to any specific model or protocol. Anything that needs to
* Few formats support this.
*/
char *notes;
+
+ /* This is a bit icky. Multiple waypoint support is an
+ * afterthought and I don't want to change our data structures.
+ * So we have the first in the waypoint itself and subsequent
+ * ones in a linked list.
+ * We also use an implicit anonymous union here, so these three
+ * members must match struct url_link...
+ */
+ struct url_link *url_next;
char *url;
char *url_link_text;
typedef struct {
double max_lat;
double max_lon;
+ double max_alt;
double min_lat;
double min_lon;
+ double min_alt;
} bounds;
typedef struct {
- int request_terminate;
+ volatile int request_terminate;
} posn_status;
+extern posn_status tracking_status;
+
typedef void (*ff_init) (char const *);
typedef void (*ff_deinit) (void);
typedef void (*ff_read) (void);
void waypt_flush_all(void);
unsigned int waypt_count(void);
void set_waypt_count(unsigned int nc);
+void waypt_add_url(waypoint *wpt, char *link, char *url_link_text);
void free_gpx_extras (xml_tag * tag);
void xcsv_setup_internal_style(const char *style_buf);
void xcsv_read_internal_style(const char *style_buf);
void route_init(void);
void waypt_disp(const waypoint *);
void waypt_status_disp(int total_ct, int myct);
+double waypt_time(const waypoint *wpt);
+double waypt_speed(const waypoint *A, const waypoint *B);
NORETURN fatal(const char *, ...) PRINTFLIKE(1, 2);
void is_fatal(const int condition, const char *, ...) PRINTFLIKE(2, 3);
int case_ignore_strncmp(const char *s1, const char *s2, int n);
int str_match(const char *str, const char *match);
int case_ignore_str_match(const char *str, const char *match);
+char * strenquote(const char *str, const char quot_char);
char *strsub(const char *s, const char *search, const char *replace);
char *gstrsub(const char *s, const char *search, const char *replace);
char * strip_nastyhtml(const char * in);
char * convert_human_date_format(const char *human_datef); /* "MM,YYYY,DD" -> "%m,%Y,%d" */
char * convert_human_time_format(const char *human_timef); /* "HH+mm+ss" -> "%H+%M+%S" */
-char * pretty_deg_format(double lat, double lon, char fmt, int html); /* decimal -> dd.dddd or dd mm.mmm or dd mm ss */
+char * pretty_deg_format(double lat, double lon, char fmt, char *sep, int html); /* decimal -> dd.dddd or dd mm.mmm or dd mm ss */
char * get_filename(const char *fname); /* extract the filename portion */
double ddmm2degrees(double ddmm_val);
double degrees2ddmm(double deg_val);
+typedef enum {
+ grid_unknown = -1,
+ grid_lat_lon_ddd = 0,
+ grid_lat_lon_dmm = 1,
+ grid_lat_lon_dms = 2,
+ grid_bng = 3,
+ grid_utm = 4
+} grid_type;
+
+#define GRID_INDEX_MIN grid_lat_lon_ddd
+#define GRID_INDEX_MAX grid_utm
+
+#define DATUM_OSGB36 86
+#define DATUM_WGS84 118
+
+int parse_coordinates(const char *str, int datum, const grid_type grid,
+ double *latitude, double *longitude, const char *module);
+
/*
* From util_crc.c
*/
* but that's not very nice for the folks near sea level.
*/
#define unknown_alt -99999999.0
-#define unknown_course -999.0
-#define unknown_speed -999.0
-/*
- * textfile: buffered OS independent (CRLF,NL,CR) text reader
- */
-
-typedef struct
-{
- FILE *file_in;
- char buf[1024];
- char *buf_pos;
- char *buf_end;
- char *line;
- int line_size;
- int line_no;
- unsigned char tfclose:1;
-} textfile_t;
-
-textfile_t *textfile_init(const FILE *file_in);
-textfile_t *textfile_open_read(const char *filename, const char *module);
-void textfile_done(textfile_t *tf);
-char *textfile_read(textfile_t *tf);
-int textfile_getc(textfile_t *tf);
#endif /* gpsbabel_defs_h_included */
wpt_tmp->longitude = le_read_double(&gp.lon);
alt_feet = le_read_double(&gp.alt);
wpt_tmp->altitude = FEET_TO_METERS(alt_feet);
+ if (wpt_tmp->altitude <= unknown_alt + 1)
+ wpt_tmp->altitude = unknown_alt;
wpt_tmp->creation_time = le_read32(&gp.tm);
- wpt_tmp->course = le_read_double(&gp.heading);
- wpt_tmp->speed = le_read_double(&gp.speed);
- wpt_tmp->speed = MILES_TO_METERS(wpt_tmp->speed)/3600;
+ WAYPT_SET(wpt_tmp, course, le_read_double(&gp.heading));
+ WAYPT_SET(wpt_tmp, speed, le_read_double(&gp.speed));
+ WAYPT_SET(wpt_tmp, speed, MILES_TO_METERS(wpt_tmp->speed)/3600);
track_add_wpt(track_head, wpt_tmp);
}
static waypoint *xmlwpt;
static route_head *xmltrk;
static char *xmlgrid;
-static int xmldatum, datum_WGS84, datum_OSGB36;
+static int xmldatum;
static double xmlEasting, xmlNorthing;
static double xmlLatitude, xmlLongitude;
static double xmlAltitude;
static void
convert_datum(waypoint *wpt, int datum)
{
- if (datum != datum_WGS84) {
+ if (datum != DATUM_WGS84) {
double lat = wpt->latitude;
double lon = wpt->longitude;
double alt = wpt->altitude;
if (strcmp(xmlgrid, "BNG") == 0) {
GPS_Math_NGENToAiry1830LatLon(xmlEasting, xmlNorthing,
&wpt->latitude, &wpt->longitude);
- xmldatum = datum_OSGB36;
+ xmldatum = DATUM_OSGB36;
}
else {
wpt->latitude = xmlLatitude;
tlog3b_xgcb_wptst(const char *args, const char **unused)
{
xmlwpt = waypt_new();
- xmldatum = datum_WGS84;
+ xmldatum = DATUM_WGS84;
}
tlog3b_xgcb_tptst(const char *args, const char **unused)
{
xmlwpt = waypt_new();
- xmldatum = datum_WGS84;
+ xmldatum = DATUM_WGS84;
}
{
fin = gbfopen_le(fname, "rb", MYNAME);
- datum_OSGB36 = GPS_Lookup_Datum_Index("OSGB36");
- datum_WGS84 = GPS_Lookup_Datum_Index("WGS84");
-
xmlbin = NULL;
xmltrk = NULL;
xmlwpt = NULL;
--- /dev/null
+/*
+
+ Support for G7ToWin data files (.g7t),
+ Copyright (C) 2007 Olaf Klein, o.b.klein@gpsbabel.org
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
+*/
+
+/*
+ History:
+ 04/07/2007: start programming
+ 04/15/2007: added to gpsbabel
+*/
+
+#include "defs.h"
+#include "csv_util.h"
+#include "garmin_fs.h"
+#include "garmin_tables.h"
+#include "jeeps/gpsmath.h"
+#include "strptime.h"
+
+#include <time.h>
+
+#if CSVFMTS_ENABLED
+
+#define MYNAME "g7towin"
+
+#define G7T_HEADER "Version 2:G7T"
+
+static gbfile *fin;
+static grid_type grid;
+static int datum;
+static gpsdata_type mode;
+static double altf;
+static int gardown;
+static int event_ct;
+
+static
+arglist_t g7towin_args[] = {
+ ARG_TERMINATOR
+};
+
+#define WAYPT__OFS 0x00000
+#define TRKPT__OFS 0x01000
+
+#define WPT_c0_OFS 0x0c000
+#define WPT_c1_OFS 0x0c100
+#define WPT_c2_OFS 0x0c200
+#define WPT_c3_OFS 0x0c300
+#define WPT_c4_OFS 0x0c400
+#define WPT_c5_OFS 0x0c500
+#define WPT_c6_OFS 0x0c600
+#define WPT_c7_OFS 0x0c700
+#define WPT_c8_OFS 0x0c800
+#define WPT_cA_OFS 0x0cA00
+#define WPT_cB_OFS 0x0cB00
+#define WPT_cC_OFS 0x0cC00
+#define WPT_cD_OFS 0x0cD00
+
+static void
+parse_line(char *buff, int index, const char *delimiter, waypoint *wpt)
+{
+ char *cin;
+ garmin_fs_p gmsd = GMSD_FIND(wpt);
+
+ while ((cin = csv_lineparse(buff, delimiter, "", index++))) {
+
+ buff = NULL;
+ cin = lrtrim(cin);
+
+ if ((*cin == '\0') ||
+ (strcmp(cin, "INF") == 0) ||
+ (strcmp(cin, "1e25") == 0) ||
+ (strcmp(cin, "1.0e25") == 0)) continue;
+
+ switch(index) {
+
+ int categories, dyn;
+ struct tm tm;
+ char *cerr;
+
+ case TRKPT__OFS + 1:
+ cin += parse_coordinates(cin, datum, grid,
+ &wpt->latitude, &wpt->longitude, MYNAME);
+ while (isspace(*cin)) cin++;
+
+ memset(&tm, 0, sizeof(tm));
+ cerr = strptime(cin, "%a %b %d %H:%M:%S %Y", &tm);
+ if (cerr == NULL) {
+ fatal(MYNAME ": Unable to convert date (%s)!\n", cin);
+ }
+ wpt->creation_time = mkgmtime(&tm);
+ break;
+
+ case WAYPT__OFS + 1:
+ wpt->description = xstrdup(cin);
+ break;
+
+ case WAYPT__OFS + 2:
+ wpt->icon_descr = gt_find_desc_from_icon_number(
+ atoi(cin), PCX, &dyn);
+ wpt->wpt_flags.icon_descr_is_dynamic = dyn;
+ break;
+
+ case WAYPT__OFS + 4:
+ if (strcmp(cin, "S+C") == 0) {
+ GMSD_SET(display, gt_display_mode_symbol_and_comment);
+ }
+ else if (strcmp(cin, "S") == 0) {
+ GMSD_SET(display, gt_display_mode_symbol);
+ }
+ else if (strcmp(cin, "S+N") == 0) {
+ GMSD_SET(display, gt_display_mode_symbol_and_name);
+ }
+ break;
+
+ case WPT_cA_OFS + 1:
+ case WPT_c1_OFS + 1:
+ if (wpt->shortname) xfree(wpt->shortname);
+ wpt->shortname = xstrdup(cin);
+ break;
+
+ case WPT_cA_OFS + 4:
+ case WPT_c4_OFS + 2:
+ GMSD_SETSTR(city, cin);
+ break;
+
+ case WPT_cA_OFS + 5:
+ case WPT_c4_OFS + 3:
+ GMSD_SETSTR(state, cin);
+ break;
+
+ case WPT_cA_OFS + 6:
+ case WPT_c4_OFS + 4:
+ GMSD_SETSTR(cc, cin);
+ break;
+
+ case WPT_cB_OFS + 1:
+ case WPT_c6_OFS + 2:
+ GMSD_SETSTR(facility, cin);
+ break;
+
+ case WPT_cB_OFS + 2:
+ case WPT_c6_OFS + 3:
+ GMSD_SETSTR(addr, cin);
+ break;
+
+ case WPT_cB_OFS + 3: /*cross road */
+ case WPT_c6_OFS + 4:
+ GMSD_SETSTR(cross_road, cin);
+ break;
+
+ case TRKPT__OFS + 2: /* altitude */
+ case WPT_cC_OFS + 1:
+ case WPT_c5_OFS + 1:
+ case WPT_c8_OFS + 1:
+ wpt->altitude = altf * atof(cin);
+ break;
+
+ case TRKPT__OFS + 3: /* depth */
+ case WPT_cC_OFS + 2:
+ case WPT_c5_OFS + 2:
+ case WPT_c8_OFS + 2:
+ WAYPT_SET(wpt, depth, altf * atof(cin));
+ break;
+
+ case TRKPT__OFS + 10: /* temperature */
+ if (*cin == '|') cin++; /* in track points */
+ if (strcmp(cin, "1e25") == 0) break;
+ if (strcmp(cin, "1.0e25") == 0) break;
+ /* !!! NO BREAK !!! */
+ case WPT_cD_OFS + 1:
+ case WPT_cB_OFS + 6:
+ WAYPT_SET(wpt, temperature, atof(cin));
+ break;
+
+ case WAYPT__OFS + 6: /* proximity */
+ case WPT_cD_OFS + 2:
+ WAYPT_SET(wpt, proximity, atof(cin));
+ break;
+
+ case WPT_cB_OFS + 5:
+ case WPT_cD_OFS + 3:
+ categories = atoi(cin);
+ if (categories != 0)
+ GMSD_SET(category, atoi(cin));
+ break;
+
+#if 0
+
+/* currently unused */
+
+ case TRKPT__OFS + 5: /* distance from previous point */
+ case TRKPT__OFS + 6: /* distance from segment start */
+ case TRKPT__OFS + 7: /* distance from start */
+ case TRKPT__OFS + 8: /* velocity from previous point */
+ case TRKPT__OFS + 9: /* time (in seconds) from previous point */
+ break;
+
+ case WAYPT__OFS + 3: /* ignore color */
+ break;
+
+ case WAYPT__OFS + 5: /* always '0' */
+ break;
+
+ case TRKPT__OFS + 4:
+ if (case_ignore_strcmp(cin, "FT") == 0) ;
+ else if (case_ignore_strcmp(cin, "M") == 0) ;
+ else if (case_ignore_strcmp(cin, "SM") == 0) ;
+ else if (case_ignore_strcmp(cin, "NM") == 0) ;
+ else if (case_ignore_strcmp(cin, "KM") == 0) ;
+ break;
+
+ case WPT_cB_OFS + 4: /* unknown (datatype) */
+ break;
+
+ case WPT_cC_OFS + 3: /* waypt_class (always FF) */
+ break;
+
+ case WPT_cC_OFS + 4: /* class & subclass */
+ case WPT_cC_OFS + 5:
+ case WPT_cC_OFS + 6:
+ case WPT_cC_OFS + 7:
+ case WPT_cC_OFS + 8:
+ case WPT_cC_OFS + 9:
+ case WPT_cC_OFS + 10:
+ case WPT_cC_OFS + 11:
+ case WPT_cC_OFS + 12:
+ case WPT_cC_OFS + 13:
+ case WPT_cC_OFS + 14:
+ case WPT_cC_OFS + 15:
+ case WPT_cC_OFS + 16:
+ case WPT_cC_OFS + 17:
+ case WPT_cC_OFS + 18:
+ case WPT_cC_OFS + 19:
+ case WPT_cC_OFS + 20:
+ case WPT_cC_OFS + 21:
+ break;
+
+ case WPT_cC_OFS + 22:
+ /* distance */
+ break;
+#endif
+ }
+ }
+}
+
+static waypoint *
+parse_waypt(char *buff)
+{
+ char *cin, *cerr;
+ int i;
+ struct tm tm;
+ waypoint *wpt;
+ garmin_fs_p gmsd;
+
+ wpt = waypt_new();
+ gmsd = garmin_fs_alloc(-1);
+ fs_chain_add(&wpt->fs, (format_specific_data *) gmsd);
+
+ if (gardown)
+ cin = buff + 6;
+ else {
+ /* We've seen waypoints with length of 14 and 15 !!! */
+ cin = buff + 15;
+ while ((cin > buff) && (! isspace(*cin))) cin--;
+ }
+
+ while (isspace(*cin)) cin--;
+ if (cin >= buff)
+ wpt->shortname = xstrndup(buff, cin - buff + 1);
+
+ if (gardown)
+ buff += 6;
+ else
+ buff += 15;
+ while (isspace(*buff)) buff++;
+
+ buff += parse_coordinates(buff, datum, grid,
+ &wpt->latitude, &wpt->longitude, MYNAME);
+ while (isspace(*buff)) buff++;
+
+ memset(&tm, 0, sizeof(tm));
+ cerr = strptime(buff, "%a %b %d %H:%M:%S %Y", &tm);
+ if (cerr == NULL)
+ fatal(MYNAME ": Unable to convert date (%s)!\n", buff);
+ wpt->creation_time = mkgmtime(&tm);
+
+ /* go over time stamp */
+ i = 5;
+ while (buff && i) {
+ i--;
+ buff = strchr(buff, ' ');
+ if (buff) buff++;
+ }
+ if (gardown && (buff == NULL)) return wpt;
+ is_fatal((buff == NULL), MYNAME ": Incomplete waypoint line!");
+
+ while (isspace(*buff)) buff++;
+
+ parse_line(buff, WAYPT__OFS, "^", wpt);
+
+ return wpt;
+}
+
+static waypoint *
+parse_trkpt(char *buff)
+{
+ garmin_fs_p gmsd;
+ waypoint *wpt;
+
+ wpt = waypt_new();
+ gmsd = garmin_fs_alloc(-1);
+ fs_chain_add(&wpt->fs, (format_specific_data *) gmsd);
+
+ parse_line(buff, TRKPT__OFS, ";", wpt);
+
+ return wpt;
+}
+
+/*
+ * parse_categories is currently only a dummy procedure.
+ * w'll need a central storage with binding to the module
+ * which has established a list of category names.
+ */
+
+static void
+parse_categories(char *buff)
+{
+ char *cin;
+ int cat = 0;
+
+ while ((cin = csv_lineparse(buff, ",", "", cat++))) {
+ gbuint16 cx;
+
+ buff = NULL;
+
+ cin = lrtrim(cin);
+ if (*cin == 0) continue;
+
+ garmin_fs_convert_category(cin, &cx);
+ }
+}
+
+
+/* main functions */
+
+static void
+rd_init(const char *fname)
+{
+ fin = gbfopen(fname, "rb", MYNAME);
+
+ gardown = 1;
+ mode = wptdata;
+ grid = grid_lat_lon_dmm;
+ datum = DATUM_WGS84;
+ altf = 1;
+ event_ct = 0;
+}
+
+static void
+rd_deinit(void)
+{
+ gbfclose(fin);
+}
+
+static void
+data_read(void)
+{
+ char *buff;
+ int line = 0;
+ waypoint *wpt = NULL;
+ waypoint *prev = NULL;
+ route_head *head = NULL;
+
+ while ((buff = gbfgetstr(fin))) {
+ char *cin = buff;
+ char *cdata;
+
+ line++;
+
+ cin = lrtrim(buff);
+ if (!*cin) continue;
+
+ cdata = cin+1;
+ while (! isspace(*cdata)) cdata++;
+ while (isspace(*cdata)) cdata++;
+ if (! *cdata) continue;
+
+ switch(*cin) {
+
+ case '#': /* comment */
+ break;
+
+ case 'A':
+ if (case_ignore_strncmp(cdata, "Meter", 5) == 0)
+ altf = 1.0;
+ else if (case_ignore_strncmp(cdata, "Feet", 4) == 0)
+ altf = FEET_TO_METERS(1.0);
+ break;
+
+ case 'C': /* categories */
+ parse_categories(cdata);
+ break;
+
+ case 'D':
+ datum = gt_lookup_datum_index(cdata, MYNAME);
+ break;
+
+ case 'I': /* event point */
+ wpt = waypt_new();
+ cdata += parse_coordinates(cdata, datum, grid,
+ &wpt->latitude, &wpt->longitude, MYNAME);
+ xasprintf(&wpt->shortname, "Event%d", ++event_ct);
+ while (isspace(*cdata)) cdata++;
+ if (*cdata == ';') {
+ int dyn;
+
+ cdata++;
+ wpt->icon_descr = gt_find_desc_from_icon_number(
+ atoi(cdata), PCX, &dyn);
+ wpt->wpt_flags.icon_descr_is_dynamic = dyn;
+ }
+ waypt_add(wpt);
+ break;
+
+ case 'M':
+ grid = gt_lookup_grid_type(cdata, MYNAME);
+ break;
+
+ case 'P': /* proximity waypoint */
+ case 'W': /* normal waypoint */
+ wpt = parse_waypt(cin + 3);
+ prev = wpt;
+ if (wpt) {
+ if (mode == rtedata)
+ route_add_wpt(head, wpt);
+ else
+ waypt_add(wpt);
+ }
+ break;
+
+ case 'c': /* additional lines */
+ switch(*(cin+1)) {
+ int index;
+
+ case 'A': case 'B':
+ case 'C': case 'D':
+
+ index = WPT_cA_OFS + ((*(cin+1) - 'A') * 256);
+ parse_line(cdata, index, "|", wpt);
+ break;
+
+ case '1': case '2': case '3': case '4':
+ case '5': case '6': case '7': case '8':
+
+ index = WPT_c0_OFS + ((*(cin+1) - '0') * 256);
+ parse_line(cdata, index, ";", wpt);
+ break;
+
+ case 'L':
+ waypt_add_url(wpt, xstrdup(cdata), NULL);
+ break;
+
+ default:
+ break;
+ }
+ break;
+
+ case 'N': /* track log header */
+ mode = trkdata;
+ head = route_head_alloc();
+ cdata = strchr(cdata, '-');
+ if (cdata) {
+ while (isspace(*cdata)) cdata++;
+ if (*cdata) {
+ char *s;
+ s = strrchr(cdata, ',');
+ if (s) {
+ *s = '\0';
+ s = strrchr(cdata, ',');
+ if (s) {
+ *s = '\0';
+ head->rte_name = xstrdup(cdata);
+ }
+ }
+ }
+ }
+ track_add_head(head);
+ break;
+
+ case 'R': /* route header */
+ mode = rtedata;
+ head = route_head_alloc();
+ cdata += 3; /*skip route number */
+ if (*cdata) head->rte_name = xstrdup(cdata);
+ route_add_head(head);
+ break;
+
+ case 'T':
+ wpt = parse_trkpt(cdata);
+ if (wpt) track_add_wpt(head, wpt);
+ break;
+
+ case 'V':
+ if (strcmp(cin, G7T_HEADER) != 0) {
+ fatal(MYNAME ": Invalid version or invalid file!\n");
+ }
+ gardown = 0;
+ break;
+
+ default:
+ break;
+ }
+ }
+}
+
+/* --------------------------------------------------------------------------- */
+
+ff_vecs_t g7towin_vecs = {
+ ff_type_file,
+ { ff_cap_read, ff_cap_read, ff_cap_read },
+ rd_init,
+ NULL,
+ rd_deinit,
+ NULL,
+ data_read,
+ NULL,
+ NULL,
+ g7towin_args,
+ CET_CHARSET_MS_ANSI, 0
+};
+
+#endif /* CSVFMTS_ENABLED */
case 155: /* Garmin V */
case 404: /* SP2720 */
+ case 520: /* SP2820 */
receiver_short_length = 20;
break;
case 382: /* C320 */
}
+#if 0
+static
+void
+lap_read_as_track(void)
+{
+ int32 ntracks;
+ GPS_PLap *array;
+ route_head *trk_head = NULL;
+ int trk_num = 0;
+ int index;
+ int i;
+
+ ntracks = GPS_Command_Get_Lap(portname, &array, waypt_read_cb);
+ if ( ntracks <= 0 )
+ return;
+ for (i = 0; i < ntracks; i++) {
+ waypoint *wpt;
+ if (array[i]->index == -1){
+ index=i;
+ } else {
+ index=array[i]->index;
+ index=i;
+ }
+
+ if ((trk_head == NULL) || (i == 0) ||
+ /* D906 - last track:index is the track index */
+ (array[i]->index == -1 && array[i]->track_index != 255) ||
+ /* D10xx - no real separator, use begin/end time to guess */
+ (abs(array[i-1]->start_time + array[i]->total_time/100-array[i]->start_time) > 2)
+ ) {
+ static struct tm * stmp;
+ stmp = gmtime(&array[i]->start_time);
+ trk_head = route_head_alloc();
+ /*For D906, we would like to use the track_index in the last packet instead...*/
+ trk_head->rte_num = ++trk_num;
+ trk_head->rte_name = xmalloc(32);
+ strftime(trk_head->rte_name, 32, "%Y-%m-%dT%H:%M:%SZ", stmp);
+ track_add_head(trk_head);
+
+ wpt = waypt_new();
+
+ wpt->longitude = array[i]->begin_lon;
+ wpt->latitude = array[i]->begin_lat;
+ wpt->heartrate = array[i]->avg_heart_rate;
+ wpt->cadence = array[i]->avg_cadence;
+ wpt->speed = array[i]->max_speed;
+ wpt->creation_time = array[i]->start_time;
+ wpt->microseconds = 0;
+
+ wpt->shortname = xmalloc(8);
+ sprintf(wpt->shortname, "#%d-0", index);
+ wpt->description = xmalloc(128);
+ sprintf(wpt->description, "D:%f Cal:%d MS:%f AH:%d MH:%d AC:%d I:%d T:%d",
+ array[i]->total_distance, array[i]->calories, array[i]->max_speed, array[i]->avg_heart_rate,
+ array[i]->max_heart_rate, array[i]->avg_cadence, array[i]->intensity, array[i]->trigger_method);
+
+ track_add_wpt(trk_head, wpt);
+ }
+/*Allow even if no correct location, no skip if invalid */
+/* if (array[i]->no_latlon) {
+* continue;
+* }
+*/
+ wpt = waypt_new();
+
+ wpt->longitude = array[i]->end_lon;
+ wpt->latitude = array[i]->end_lat;
+ wpt->heartrate = array[i]->avg_heart_rate;
+ wpt->cadence = array[i]->avg_cadence;
+ wpt->speed = array[i]->max_speed;
+ wpt->creation_time = array[i]->start_time + array[i]->total_time/100;
+ wpt->microseconds = 10000*(array[i]->total_time % 100);
+ /*Add fields with no mapping in the description */
+ wpt->shortname = xmalloc(8);
+ sprintf(wpt->shortname, "#%d", index);
+ wpt->description = xmalloc(128);
+ sprintf(wpt->description, "D:%f Cal:%d MS:%f AH:%d MH:%d AC:%d I:%d T:%d (%f,%f)",
+ array[i]->total_distance, array[i]->calories, array[i]->max_speed, array[i]->avg_heart_rate,
+ array[i]->max_heart_rate, array[i]->avg_cadence, array[i]->intensity, array[i]->trigger_method,
+ array[i]->begin_lon, array[i]->begin_lat);
+
+ track_add_wpt(trk_head, wpt);
+ }
+ while(ntracks) {
+ GPS_Lap_Del(&array[--ntracks]);
+ }
+ xfree(array);
+}
+#endif
+
/*
* Rather than propogate Garmin-specific data types outside of the Garmin
* code, we convert the PVT (position/velocity/time) data from the receiver
#define MYNAME "garmin_fs"
+#define GARMIN_GPX_EXT_REFERENCE \
+ "xmlns:gpxx=\"" \
+ "http://www.garmin.com/xmlschemas/GpxExtensions/v3\" " \
+ "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" " \
+ "xsi:schemaLocation=\"http://www.garmin.com/xmlschemas/GpxExtensions/v3 " \
+ "http://www.garmin.com/xmlschemas/GpxExtensions/v3/GpxExtensionsv3.xsd"
+
garmin_fs_t *
garmin_fs_alloc(const int protocol)
{
result->fs.type = FS_GMSD;
result->fs.copy = (fs_copy) garmin_fs_copy;
result->fs.destroy = garmin_fs_destroy;
- result->fs.convert = NULL;
+ result->fs.convert = garmin_fs_convert;
result->fs.next = NULL;
result->protocol = protocol;
{
garmin_ilink_t *ilinks;
+ if (data->addr != NULL) xfree(data->addr);
+ if (data->cc != NULL) xfree(data->cc);
if (data->city != NULL) xfree(data->city);
+ if (data->country != NULL) xfree(data->country);
+ if (data->cross_road != NULL) xfree(data->cross_road);
if (data->facility != NULL) xfree(data->facility);
+ if (data->phone_nr != NULL) xfree(data->phone_nr);
+ if (data->postal_code != NULL) xfree(data->postal_code);
if (data->state != NULL) xfree(data->state);
- if (data->cc != NULL) xfree(data->cc);
- if (data->cross_road != NULL) xfree(data->cross_road);
+
if ((ilinks = data->ilinks) != NULL) {
ilinks->ref_count--;
if (ilinks->ref_count <= 0) {
memcpy(*dest, src, sizeof(*src));
- (*dest)->city = (src->city != NULL) ? xstrdup(src->city) : NULL;
- (*dest)->facility = (src->facility != NULL) ? xstrdup(src->facility) : NULL;
- (*dest)->state = (src->state != NULL) ? xstrdup(src->facility) : NULL;
+ (*dest)->addr = (src->addr != NULL) ? xstrdup(src->addr) : NULL;
(*dest)->cc = (src->cc != NULL) ? xstrdup(src->cc) : NULL;
+ (*dest)->city = (src->city != NULL) ? xstrdup(src->city) : NULL;
+ (*dest)->country = (src->country != NULL) ? xstrdup(src->country) : NULL;
(*dest)->cross_road = (src->cross_road != NULL) ? xstrdup(src->cross_road) : NULL;
- (*dest)->addr = (src->addr != NULL) ? xstrdup(src->addr) : NULL;
+ (*dest)->facility = (src->facility != NULL) ? xstrdup(src->facility) : NULL;
+ (*dest)->phone_nr = (src->phone_nr != NULL) ? xstrdup(src->phone_nr) : NULL;
+ (*dest)->postal_code = (src->postal_code != NULL) ? xstrdup(src->postal_code) : NULL;
+ (*dest)->state = (src->state != NULL) ? xstrdup(src->state) : NULL;
+}
+
+void garmin_fs_convert(void *fs)
+{
+ garmin_fs_t *gmsd = (garmin_fs_t *) fs;
+
+ if (gmsd->addr) gmsd->addr = cet_convert_string(gmsd->addr);
+ if (gmsd->cc) gmsd->cc = cet_convert_string(gmsd->cc);
+ if (gmsd->city) gmsd->city = cet_convert_string(gmsd->city);
+ if (gmsd->country) gmsd->country = cet_convert_string(gmsd->country);
+ if (gmsd->cross_road) gmsd->cross_road = cet_convert_string(gmsd->cross_road);
+ if (gmsd->facility) gmsd->facility = cet_convert_string(gmsd->facility);
+ if (gmsd->phone_nr) gmsd->phone_nr = cet_convert_string(gmsd->phone_nr);
+ if (gmsd->postal_code) gmsd->postal_code = cet_convert_string(gmsd->postal_code);
+ if (gmsd->state) gmsd->state = cet_convert_string(gmsd->state);
}
/* GPX - out */
void
garmin_fs_xml_fprint(gbfile *ofd, const waypoint *waypt)
{
+ char *phone, *addr;
garmin_fs_t *gmsd = GMSD_FIND(waypt);
+
if (gmsd == NULL) return;
- if ((gmsd->flags.category && gmsd->category) ||
- gmsd->flags.depth ||
- gmsd->flags.proximity ||
- gmsd->flags.temperature ||
- gmsd->flags.display)
+ addr = GMSD_GET(addr, "");
+ if (! *addr) addr = GMSD_GET(city, "");
+ if (! *addr) addr = GMSD_GET(country, "");
+ if (! *addr) addr = GMSD_GET(postal_code, "");
+ if (! *addr) addr = GMSD_GET(state, "");
+
+ phone = GMSD_GET(phone_nr, "");
+
+ if (*addr || *phone ||
+ (gmsd->flags.category && gmsd->category) ||
+ WAYPT_HAS(waypt, depth) ||
+ WAYPT_HAS(waypt, proximity) ||
+ WAYPT_HAS(waypt, temperature) ||
+ gmsd->flags.display)
{
int space = 1;
gbfprintf(ofd, "%*s<extensions>\n", space++ * 2, "");
- gbfprintf(ofd, "%*s<gpxx:WaypointExtension xmlns:gpxx=\"" \
- "http://www.garmin.com/xmlschemas/GpxExtensions/v2\" " \
- "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" " \
- "xsi:schemaLocation=\"http://www.garmin.com/xmlschemas/GpxExtensions/v2 " \
- "http://www.garmin.com/xmlschemas/GpxExtensions/v2/GpxExtensionsv2.xsd\">\n", space++ * 2, "");
- if (gmsd->flags.proximity)
- gbfprintf(ofd, "%*s<gpxx:Proximity>%.6f</gpxx:Proximity>\n", space * 2, "", gmsd->proximity);
- if (gmsd->flags.temperature)
- gbfprintf(ofd, "%*s<gpxx:Temperature>%.6f</gpxx:Temperature>\n", space * 2, "", gmsd->temperature);
- if (gmsd->flags.depth)
- gbfprintf(ofd, "%*s<gpxx:Depth>%.6f</gpxx:Depth>\n", space * 2, "", gmsd->depth);
+ gbfprintf(ofd, "%*s<gpxx:WaypointExtension %s\">\n", space++ * 2, "", GARMIN_GPX_EXT_REFERENCE);
+ if WAYPT_HAS(waypt, proximity)
+ gbfprintf(ofd, "%*s<gpxx:Proximity>%.6f</gpxx:Proximity>\n", space * 2, "", waypt->proximity);
+ if WAYPT_HAS(waypt, temperature)
+ gbfprintf(ofd, "%*s<gpxx:Temperature>%.6f</gpxx:Temperature>\n", space * 2, "", waypt->temperature);
+ if WAYPT_HAS(waypt, depth)
+ gbfprintf(ofd, "%*s<gpxx:Depth>%.6f</gpxx:Depth>\n", space * 2, "", waypt->depth);
if (gmsd->flags.display)
{
char *cx;
}
gbfprintf(ofd, "%*s</gpxx:Categories>\n", --space * 2, "");
}
+ if (*addr) {
+ char *str;
+ gbfprintf(ofd, "%*s<gpxx:Address>\n", space++ * 2, "");
+
+ if ((str = GMSD_GET(addr, NULL)))
+ gbfprintf(ofd, "%*s<gpxx:StreetAddress>%s</gpxx:StreetAddress>\n", space * 2, "", str);
+ if ((str = GMSD_GET(city, NULL)))
+ gbfprintf(ofd, "%*s<gpxx:City>%s</gpxx:City>\n", space * 2, "", str);
+ if ((str = GMSD_GET(state, NULL)))
+ gbfprintf(ofd, "%*s<gpxx:State>%s</gpxx:State>\n", space * 2, "", str);
+ if ((str = GMSD_GET(country, NULL)))
+ gbfprintf(ofd, "%*s<gpxx:Country>%s</gpxx:Country>\n", space * 2, "", str);
+ if ((str = GMSD_GET(postal_code, NULL)))
+ gbfprintf(ofd, "%*s<gpxx:PostalCode>%s</gpxx:PostalCode>\n", space * 2, "", str);
+
+ gbfprintf(ofd, "%*s</gpxx:Address>\n", --space * 2, "");
+ }
+ if (*phone) {
+ gbfprintf(ofd, "%*s<gpxx:PhoneNumber>%s</gpxx:PhoneNumber>\n", space * 2, "", phone);
+ }
+
gbfprintf(ofd, "%*s</gpxx:WaypointExtension>\n", --space * 2, "");
gbfprintf(ofd, "%*s</extensions>\n", --space * 2, "");
}
tag -= base_tag;
/*
- tt_garmin_extension, -> 0
- tt_garmin_waypt_extension, -> 1
- tt_garmin_proximity, -> 2
- tt_garmin_temperature,-> 3
- tt_garmin_depth, -> 4
- tt_garmin_display_mode, -> 5
- tt_garmin_categories, -> 6
- tt_garmin_category, -> 7
+ tt_garmin_waypt_extension, -> 0
+ tt_garmin_proximity, -> 1
+ tt_garmin_temperature,-> 2
+ tt_garmin_depth, -> 3
+ tt_garmin_display_mode, -> 4
+ tt_garmin_categories, -> 5
+ tt_garmin_category, -> 6
+ tt_garmin_addr, -> 7
+ tt_garmin_city, -> 8
+ tt_garmin_state, -> 9
+ tt_garmin_country, -> 10
+ tt_garmin_postal_code, -> 11
+ tt_garmin_phone_nr, -> 12
*/
switch(tag) {
- case 2: GMSD_SET(proximity, atof(cdatastr)); break;
- case 3: GMSD_SET(temperature, atof(cdatastr)); break;
- case 4: GMSD_SET(depth, atof(cdatastr)); break;
- case 5: if (case_ignore_strcmp(cdatastr, "SymbolOnly") == 0) {
+ case 1:
+ if (*cdatastr) WAYPT_SET(waypt, proximity, atof(cdatastr));
+ break;
+ case 2:
+ if (*cdatastr) WAYPT_SET(waypt, temperature, atof(cdatastr));
+ break;
+ case 3:
+ if (*cdatastr) WAYPT_SET(waypt, depth, atof(cdatastr));
+ break;
+ case 4:
+ if (case_ignore_strcmp(cdatastr, "SymbolOnly") == 0) {
GMSD_SET(display, gt_display_mode_symbol);
}
else if (case_ignore_strcmp(cdatastr, "SymbolAndDescription") == 0) {
GMSD_SET(display, gt_display_mode_symbol_and_name);
}
break;
- case 7: if ( ! garmin_fs_merge_category(cdatastr, waypt)) {
+ case 6:
+ if ( ! garmin_fs_merge_category(cdatastr, waypt))
warning(MYNAME ": Unable to convert category \"%s \"!\n", cdatastr);
- }
+ break;
+ case 7:
+ GMSD_SETSTR(addr, cdatastr);
+ break;
+ case 8:
+ GMSD_SETSTR(city, cdatastr);
+ break;
+ case 9:
+ GMSD_SETSTR(state, cdatastr);
+ break;
+ case 10:
+ GMSD_SETSTR(country, cdatastr);
+ break;
+ case 11:
+ GMSD_SETSTR(postal_code, cdatastr);
+ break;
+ case 12:
+ GMSD_SETSTR(phone_nr, cdatastr);
break;
}
}
/* flagged data fields */
GMSD_SET(display, gt_switch_display_mode_value(way->dspl, gps_waypt_type, 1));
if (way->category != 0) GMSD_SET(category, way->category);
- if (way->dst < 1.0e25f) GMSD_SET(proximity, way->dst);
- if (way->temperature_populated) GMSD_SET(temperature, way->temperature);
- if (way->dpth < 1.0e25f) GMSD_SET(depth, way->dpth);
+ if (way->dst < 1.0e25f) WAYPT_SET(wpt, proximity, way->dst);
+ if (way->temperature_populated) WAYPT_SET(wpt, temperature, way->temperature);
+ if (way->dpth < 1.0e25f) WAYPT_SET(wpt, depth, way->dpth);
GMSD_SETNSTR(cc, way->cc, sizeof(way->cc));
GMSD_SETNSTR(state, way->state, sizeof(way->state));
GMSD_SETSTR(city, way->city);
way->dspl = gt_switch_display_mode_value(
GMSD_GET(display, way->dspl), gps_waypt_type, 0);
way->category = GMSD_GET(category, way->category);
- way->dpth = GMSD_GET(depth, way->dpth);
- way->dst = GMSD_GET(proximity, way->dpth);
- way->temperature = GMSD_GET(temperature, way->temperature);
+ way->dpth = WAYPT_GET(wpt, depth, way->dpth);
+ way->dst = WAYPT_GET(wpt, proximity, way->dpth);
+ way->temperature = WAYPT_GET(wpt, temperature, way->temperature);
GMSD_GETNSTR(cc, way->cc, sizeof(way->cc));
GMSD_GETNSTR(city, way->city, sizeof(way->city));
/* macros */
#define GMSD_FIND(a) (garmin_fs_t *) fs_chain_find((a)->fs, FS_GMSD)
+#define GMSD_HAS(a) (gmsd && gmsd->flags.a)
/* GMSD_GET(a,b): a = any gmsd field, b = default value */
#define GMSD_GET(a,b) ((gmsd) && (gmsd->flags.a)) ? (gmsd->a) : (b)
/* GMSD_SET(a,b): a = numeric gmsd field, b = numeric source */
#define GMSD_SET(a,b) if (gmsd) {gmsd->a = (b); gmsd->flags.a = 1; }
+/* GMSD_UNSET(a): a = gmsd field */
+#define GMSD_UNSET(a) if (gmsd) { gmsd->flags.a = 0; }
+
/* GMSD_SETSTR(a,b): a = gmsd field, b = null terminated source */
#define GMSD_SETSTR(a,b) if (gmsd && (b) && (b)[0]) { gmsd->a = xstrdup((b)); gmsd->flags.a = 1; }
typedef struct garmin_ilink_s {
int ref_count;
- double lat, lon;
+ double lat, lon, alt;
struct garmin_ilink_s *next;
} garmin_ilink_t;
unsigned int wpt_class:1;
unsigned int display:1;
unsigned int category:1;
- unsigned int depth:1;
- unsigned int proximity:1;
- unsigned int temperature:1;
unsigned int city:1;
unsigned int state:1;
unsigned int facility:1;
unsigned int cc:1;
unsigned int cross_road:1;
- unsigned int addr:1;
+ unsigned int addr:1;
+ unsigned int country:1;
+ unsigned int phone_nr:1;
+ unsigned int postal_code:1;
+#ifdef GMSD_EXPERIMENTAL
+ unsigned int subclass:1;
+#endif
} garmin_fs_flags_t;
typedef struct garmin_fs_s
int wpt_class;
gbint32 display;
gbint16 category;
- double depth; /* depth in meters */
- double proximity; /* proximity distance in meters */
- double temperature;
char *city; /* city name */
char *facility; /* facility name */
char *state; /* state */
char *cc; /* country code */
char *cross_road; /* Intersection road label */
char *addr; /* address + number */
+ char *country; /* country */
+ char *phone_nr; /* phone number */
+ char *postal_code; /* postal code */
garmin_ilink_t *ilinks;
+#ifdef GMSD_EXPERIMENTAL
+ char subclass[22];
+#endif
} garmin_fs_t, *garmin_fs_p;
garmin_fs_t *garmin_fs_alloc(const int protocol);
void garmin_fs_destroy(void *fs);
void garmin_fs_copy(garmin_fs_t **dest, garmin_fs_t *src);
+void garmin_fs_convert(void *fs);
char *garmin_fs_xstrdup(const char *src, size_t size);
/* for GPX */
--- /dev/null
+/*
+
+ Support for Garmin Points of Interest (.gpi files)
+
+ Copyright (C) 2007 Olaf Klein, o.b.klein@gpsbabel.org
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
+
+ */
+
+/*
+ History:
+
+ * 2007/05/18: initial release (only a reader)
+ * 2007/05/20: added writer code with embedded bitmap
+ * 2007/05/22: add support for multiple bounding boxes
+ (useful / required!) for large waypoints lists
+ * 2007/05/23: add optional user bitmap
+ * 2007/06/02: new method to compute center (mean) of bounds
+ avoid endless loop in group splitting
+ * 2007/07/10: put address fields (i.e. city) into GMSD
+ * 2007/07/12: add write support for new address fields
+
+ ToDo:
+
+ * Display mode ("Symbol & Name") ??? not in gpi ???
+ * decode speed/proximity
+ * support category from GMSD "Garmin Special Data"
+*/
+
+#include "defs.h"
+#include "cet_util.h"
+#include "jeeps/gpsmath.h"
+#include "garmin_fs.h"
+#include "garmin_gpi.h"
+#include <ctype.h>
+#include <stdio.h>
+#include <string.h>
+#include <time.h>
+
+#define MYNAME "garmin_gpi"
+
+#define GPI_DBG 1
+#undef GPI_DBG
+
+#define DEFAULT_ICON "Waypoint"
+#define WAYPOINTS_PER_BLOCK 128
+
+/* flags used in the gpi address mask */
+#define GPI_ADDR_CITY 1
+#define GPI_ADDR_COUNTRY 2
+#define GPI_ADDR_STATE 4
+#define GPI_ADDR_POSTAL_CODE 8
+#define GPI_ADDR_ADDR 16
+
+static char *opt_cat, *opt_pos, *opt_notes, *opt_hide_bitmap, *opt_descr, *opt_bitmap;
+
+static arglist_t garmin_gpi_args[] = {
+ {"bitmap", &opt_bitmap, "Use specified bitmap on output",
+ NULL, ARGTYPE_FILE, ARG_NOMINMAX},
+ {"category", &opt_cat, "Default category on output",
+ "My points", ARGTYPE_STRING, ARG_NOMINMAX},
+ {"hide", &opt_hide_bitmap, "Don't show gpi bitmap on device",
+ NULL, ARGTYPE_BOOL, ARG_NOMINMAX},
+ {"descr", &opt_descr, "Write description to address field",
+ NULL, ARGTYPE_BOOL, ARG_NOMINMAX},
+ {"notes", &opt_notes, "Write notes to address field",
+ NULL, ARGTYPE_BOOL, ARG_NOMINMAX},
+ {"position", &opt_pos, "Write position to address field",
+ NULL, ARGTYPE_BOOL, ARG_NOMINMAX},
+ ARG_TERMINATOR
+};
+
+typedef struct {
+ int D2;
+ char S3[9]; /* "GRMRECnn" */
+ time_t crdate; /* creation date and time */
+ char POI[4]; /* "POI" */
+ char S8[3];
+ char *group;
+ char *category;
+} reader_data_t;
+
+typedef struct writer_data_s {
+ queue Q;
+ int ct;
+ int sz;
+ bounds bds;
+ struct writer_data_s *top_left;
+ struct writer_data_s *top_right;
+ struct writer_data_s *buttom_left;
+ struct writer_data_s *buttom_right;
+} writer_data_t;
+
+typedef struct gpi_waypt_data_s {
+ int sz;
+ char *addr;
+ char *postal_code;
+} gpi_waypt_data_t;
+
+typedef struct {
+ gbint32 size;
+ gbint16 res1;
+ gbint16 res2;
+ gbint32 image_offset;
+ gbint32 header_size;
+ gbint32 width;
+ gbint32 height;
+ gbint16 planes;
+ gbint16 bpp;
+ gbint32 compression_type;
+ gbint32 image_data_size;
+ gbint32 resolution_h;
+ gbint32 resolution_v;
+ gbint32 used_colors;
+ gbint32 important_colors;
+} bmp_header_t;
+
+typedef struct {
+ gbint16 index;
+ gbint16 height;
+ gbint16 width;
+ gbint16 line_sz;
+ gbint16 bpp;
+ gbint16 fixed_0;
+ gbint32 image_size;
+ gbint32 fixed_2c;
+ gbint32 flag1;
+ gbint32 tr_color;
+ gbint32 flag2;
+ gbint32 size_2c;
+} gpi_bitmap_header_t;
+
+typedef struct {
+ int sz;
+ short mask;
+ char addr_is_dynamic;
+ char *addr;
+ char *city;
+ char *country;
+ char *phone_nr;
+ char *postal_code;
+ char *state;
+} gpi_waypt_t;
+
+static gbfile *fin, *fout;
+static gbint32 codepage; /* code-page, i.e. 1252 */
+static reader_data_t *rdata;
+static writer_data_t *wdata;
+static short_handle short_h;
+
+#ifdef GPI_DBG
+# define PP warning("@%1$6x (%1$8d): ", gbftell(fin))
+# define dbginfo warning
+#else
+# define PP
+#endif
+
+/*******************************************************************************
+* %%% gpi reader %%% *
+*******************************************************************************/
+
+/* look for or initialize GMSD */
+static garmin_fs_t *
+gpi_gmsd_init(waypoint *wpt)
+{
+ garmin_fs_t *gmsd = GMSD_FIND(wpt);
+ if (wpt == NULL) {
+ fatal(MYNAME ": Error in file structure.\n");
+ }
+ if (gmsd == NULL) {
+ gmsd = garmin_fs_alloc(-1);
+ fs_chain_add(&wpt->fs, (format_specific_data *) gmsd);
+ }
+ return gmsd;
+}
+
+/* read a standard string with or without 'EN' (or whatever) header */
+static char *
+gpi_read_string(const char *field)
+{
+ int l1;
+ char *res = NULL;
+
+ l1 = gbfgetint16(fin);
+ if (l1 > 0) {
+ short l2;
+ char first;
+
+ first = gbfgetc(fin);
+ if (first == 0) {
+ char en[2];
+
+ is_fatal((gbfgetc(fin) != 0),
+ MYNAME ": Error reading field '%s'!", field);
+
+ gbfread(en, 1, sizeof(en), fin);
+ l2 = gbfgetint16(fin);
+ is_fatal((l2 + 4 != l1),
+ MYNAME ": Error out of sync (wrong size %d/%d) on field '%s'!", l1, l2, field);
+
+ if ((en[0] < 'A') || (en[0] > 'Z') || (en[1] < 'A') || (en[1] > 'Z'))
+ fatal(MYNAME ": Invalid country code!\n");
+ res = xmalloc(l2 + 1);
+ res[l2] = '\0';
+ PP;
+ if (l2 > 0)
+ gbfread(res, 1, l2, fin);
+ }
+ else {
+ res = xmalloc(l1 + 1);
+ *res = first;
+ *(res + l1) = '\0';
+ PP;
+ l1--;
+ if (l1 > 0)
+ gbfread(res + 1, 1, l1, fin);
+
+ }
+ }
+#ifdef GPI_DBG
+ dbginfo("%s: %s\n", field, (res == NULL) ? "<NULL>" : res);
+#endif
+ return res;
+}
+
+static void
+read_header(void)
+{
+ int len, i;
+#ifdef GPI_DBG
+ struct tm tm;
+ char stime[32];
+#endif
+
+ i = gbfgetint32(fin);
+ if (i != 0) i = gbfgetint32(fin);
+ rdata->D2 = gbfgetint32(fin);
+
+ gbfread(&rdata->S3, 1, sizeof(rdata->S3) - 1, fin); /* GRMRECnn */
+ if (strncmp(rdata->S3, "GRMREC", 6) != 0)
+ fatal(MYNAME ": No GPI file!\n");
+
+ PP;
+ rdata->crdate = gbfgetint32(fin);
+#ifdef GPI_DBG
+ tm = *localtime(&rdata->crdate);
+ tm.tm_year += 20; /* !!! */
+ tm.tm_mday -= 1; /* !!! */
+ strftime(stime, sizeof(stime), "%Y/%m/%d %H:%M:%S", &tm);
+ dbginfo("crdate = %lu (%s)\n", rdata->crdate, stime);
+#endif
+
+ (void) gbfgetint16(fin); /* 0 */
+
+ len = gbfgetint16(fin);
+ gbfseek(fin, len, SEEK_CUR); /* "my.gpi" */
+
+ (void) gbfgetint32(fin); /* 1 */
+ (void) gbfgetint32(fin); /* 12 */
+
+ gbfread(&rdata->POI, 1, sizeof(rdata->POI) - 1, fin);
+ if (strcmp(rdata->POI, "POI") != 0)
+ fatal(MYNAME ": Wrong or unsupported GPI file!\n");
+
+ for (i = 0; i < 3; i++) (void)gbfgetc(fin);
+ gbfread(&rdata->S8, 1, sizeof(rdata->S8) - 1, fin);
+
+ codepage = gbfgetint32(fin);
+
+#ifdef GPI_DBG
+ PP;
+ dbginfo("< leaving header\n");
+#endif
+}
+
+/* gpi tag handler */
+static int read_tag(const char *caller, const int tag, waypoint *wpt);
+
+
+/* read a single poi with all options */
+static void
+read_poi(const int sz)
+{
+ int pos, len;
+ waypoint *wpt;
+
+#ifdef GPI_DBG
+ PP;
+ dbginfo("> reading poi (size %d)\n", sz);
+#endif
+ PP;
+ len = gbfgetint32(fin); /* sub-header size */
+#ifdef GPI_DBG
+ dbginfo("poi sublen = %1$d (0x%1$x)\n", len);
+#endif
+ pos = gbftell(fin);
+
+ wpt = waypt_new();
+ wpt->icon_descr = DEFAULT_ICON;
+
+ wpt->latitude = GPS_Math_Semi_To_Deg(gbfgetint32(fin));
+ wpt->longitude = GPS_Math_Semi_To_Deg(gbfgetint32(fin));
+
+ (void) gbfgetint16(fin); /* ? always 1 ? */
+ (void) gbfgetc(fin); /* seems to 1 when extra options present */
+
+ wpt->shortname = gpi_read_string("Shortname");
+
+ while (gbftell(fin) < (gbsize_t)(pos + sz - 4)) {
+ int tag = gbfgetint32(fin);
+ if (! read_tag("read_poi", tag, wpt)) break;
+ }
+
+ if (wpt->notes && !wpt->description) wpt->description = xstrdup(wpt->notes);
+ if (wpt->description && !wpt->notes) wpt->notes = xstrdup(wpt->description);
+
+ waypt_add(wpt);
+
+#ifdef GPI_DBG
+ PP;
+ dbginfo("< leaving poi\n");
+#endif
+}
+
+/* read poi's following a group header */
+static void
+read_poi_list(const int sz)
+{
+ int pos, i;
+
+ pos = gbftell(fin);
+#ifdef GPI_DBG
+ PP;
+ dbginfo("> reading poi list (-> %1$x / %1$d )\n", pos + sz);
+#endif
+ PP;
+ i = gbfgetint32(fin); /* mostly 23 (0x17) */
+#ifdef GPI_DBG
+ dbginfo("list sublen = %1$d (0x%1$x)\n", i);
+#endif
+ (void) gbfgetint32(fin); /* max-lat */
+ (void) gbfgetint32(fin); /* max-lon */
+ (void) gbfgetint32(fin); /* min-lat */
+ (void) gbfgetint32(fin); /* min-lon */
+
+ (void) gbfgetc(fin); /* three unknown bytes */
+ (void) gbfgetc(fin); /* ? should be zero ? */
+ (void) gbfgetc(fin);
+
+ (void) gbfgetint32(fin); /* ? const 0x1000100 ? */
+
+ while (gbftell(fin) < (gbsize_t)(pos + sz - 4)) {
+ int tag = gbfgetint32(fin);
+ if (! read_tag("read_poi_list", tag, NULL)) return;
+ }
+#ifdef GPI_DBG
+ PP;
+ dbginfo("< leaving poi list\n");
+#endif
+}
+
+
+static void
+read_poi_group(const int sz, const int tag)
+{
+ int pos;
+
+ pos = gbftell(fin);
+#ifdef GPI_DBG
+ PP;
+ dbginfo("> reading poi group (-> %1$x / %1$d)\n", pos + sz);
+#endif
+ if (tag == 0x80009) {
+ int subsz;
+
+ PP;
+ subsz = gbfgetint32(fin); /* ? offset to category data ? */
+#ifdef GPI_DBG
+ dbginfo("group sublen = %d (-> %x / %d)\n", subsz, pos + subsz + 4, pos + subsz + 4);
+#endif
+ }
+ if (rdata->group) xfree(rdata->group); /* currently unused */
+ rdata->group = gpi_read_string("Group");
+
+ while (gbftell(fin) < (gbsize_t)(pos + sz)) {
+ int subtag = gbfgetint32(fin);
+ if (! read_tag("read_poi_group", subtag, NULL)) break;
+ }
+
+#ifdef GPI_DBG
+ PP;
+ dbginfo("< leaving poi group\n");
+#endif
+}
+
+
+/* gpi tag handler */
+static int
+read_tag(const char *caller, const int tag, waypoint *wpt)
+{
+ int pos, sz;
+ short mask;
+ char *str;
+ garmin_fs_t *gmsd;
+
+ sz = gbfgetint32(fin);
+ pos = gbftell(fin);
+
+#ifdef GPI_DBG
+ PP;
+ dbginfo("%s: tag = 0x%x (size %d)\n", caller, tag, sz);
+#endif
+ if ((tag >= 0x80000) && (tag <= 0x800ff)) sz += 4;
+
+ switch(tag) {
+ case 0x3: /* size = 12 ? sound */
+ case 0x4: /* size = 2 ? */
+ case 0x6: /* size = 2 ? */
+ break;
+
+ case 0x5: /* group bitmap */
+ break;
+
+ case 0x7:
+ (void) gbfgetint16(fin); /* category number */
+ if (rdata->category) xfree(rdata->category);
+ rdata->category = gpi_read_string("Category");
+ break;
+
+ case 0xa:
+ wpt->description = gpi_read_string("Description");
+ break;
+
+ case 0xe: /* ? notes or description / or both ? */
+ mask = gbfgetc(fin);
+ if (mask == 0x01) {
+ str = gpi_read_string("Notes");
+ }
+ else if (mask == 0x32) {
+ str = gpi_read_string("Notes");
+ }
+ else break;
+
+ if (wpt->description) wpt->notes = str;
+ else wpt->description = str;
+ break;
+
+ case 0x80002:
+ read_poi(sz);
+ break;
+
+ case 0x80008:
+ read_poi_list(sz);
+ break;
+
+ case 0x9: /* ? older versions / no category data ? */
+ case 0x80009: /* current POI loader */
+ read_poi_group(sz, tag);
+ break;
+
+ case 0x8000b: /* address (street/city...) */
+ (void) gbfgetint32(fin);
+ PP;
+ mask = gbfgetint16(fin); /* address fields mask */
+#ifdef GPI_DBG
+ dbginfo("GPI Address field mask: %d (0x%02x)\n", mask, mask);
+#endif
+ if ((mask & GPI_ADDR_CITY) && (str = gpi_read_string("City"))) {
+ gmsd = gpi_gmsd_init(wpt);
+ GMSD_SET(city, str);
+ }
+ if ((mask & GPI_ADDR_COUNTRY) && (str = gpi_read_string("Country"))) {
+ gmsd = gpi_gmsd_init(wpt);
+ GMSD_SET(country, str);
+ }
+ if ((mask & GPI_ADDR_STATE) && (str = gpi_read_string("State"))) {
+ gmsd = gpi_gmsd_init(wpt);
+ GMSD_SET(state, str);
+ }
+ if ((mask & GPI_ADDR_POSTAL_CODE) && (str = gpi_read_string("Postal code"))) {
+ gmsd = gpi_gmsd_init(wpt);
+ GMSD_SET(postal_code, str);
+ }
+ if ((mask & GPI_ADDR_ADDR) && (str = gpi_read_string("Street address"))) {
+ gmsd = gpi_gmsd_init(wpt);
+ GMSD_SET(addr, str);
+ }
+ break;
+
+ case 0x8000c: /* phone-number */
+ (void) gbfgetint32(fin);
+ PP;
+
+ mask = gbfgetint16(fin); /* phone fields mask */
+#ifdef GPI_DBG
+ dbginfo("GPI Phone field mask: %d (0x%02x)\n", mask, mask);
+#endif
+ if ((mask & 1) && (str = gpi_read_string("Phone"))) {
+ gmsd = gpi_gmsd_init(wpt);
+ GMSD_SET(phone_nr, str);
+ }
+ break;
+
+ case 0x80012: /* ? sounds / images ? */
+ break;
+
+ default:
+ warning(MYNAME ": Unknown tag (0x%x). Please report!\n", tag);
+ return 0;
+ }
+ gbfseek(fin, pos + sz, SEEK_SET);
+ return 1;
+}
+
+/*******************************************************************************
+* %%% gpi writer %%% *
+*******************************************************************************/
+
+static void
+write_string(const char *str, const char long_format)
+{
+ int len;
+
+ len = strlen(str);
+ if (long_format) {
+ gbfputint32(len + 4, fout);
+ gbfwrite("EN", 1, 2, fout);
+ }
+ gbfputint16(len, fout);
+ gbfwrite(str, 1, len, fout);
+}
+
+
+static int
+compare_wpt_cb(const queue *a, const queue *b)
+{
+ const waypoint *wa = (waypoint *) a;
+ const waypoint *wb = (waypoint *) b;
+
+ return strcmp(wa->shortname, wb->shortname);
+}
+
+
+static char
+compare_strings(const char *s1, const char *s2)
+{
+ if (s1 == s2) return 0;
+ else if (s1) {
+ if (s2) return strcmp(s1, s2);
+ else return 1;
+ }
+ else return 1;
+}
+
+
+static writer_data_t *
+wdata_alloc()
+{
+ writer_data_t *res;
+
+ res = xcalloc(1, sizeof(*res));
+ QUEUE_INIT(&res->Q);
+ waypt_init_bounds(&res->bds);
+
+ return res;
+}
+
+
+static void
+wdata_free(writer_data_t *data)
+{
+ queue *elem, *tmp;
+
+ QUEUE_FOR_EACH(&data->Q, elem, tmp) {
+ waypoint *wpt = (waypoint *)elem;
+
+ if (wpt->extra_data) {
+ gpi_waypt_t *dt = (gpi_waypt_t *) wpt->extra_data;
+ if (dt->addr_is_dynamic) xfree(dt->addr);
+ xfree(dt);
+ }
+ waypt_free(wpt);
+ }
+
+ if (data->top_left) wdata_free(data->top_left);
+ if (data->top_right) wdata_free(data->top_right);
+ if (data->buttom_left) wdata_free(data->buttom_left);
+ if (data->buttom_right) wdata_free(data->buttom_right);
+
+ xfree(data);
+}
+
+
+static void
+wdata_add_wpt(writer_data_t *data, waypoint *wpt)
+{
+ data->ct++;
+ ENQUEUE_TAIL(&data->Q, &wpt->Q);
+ waypt_add_to_bounds(&data->bds, wpt);
+}
+
+
+static void
+wdata_check(writer_data_t *data)
+{
+ queue *elem, *tmp;
+ double center_lat, center_lon;
+
+ if ((data->ct <= WAYPOINTS_PER_BLOCK) ||
+ /* avoid endless loop for points (more than WAYPOINTS_PER_BLOCK)
+ at same coordinates */
+ ((data->bds.min_lat >= data->bds.max_lat) && (data->bds.min_lon >= data->bds.max_lon))) {
+ if (data->ct > 1)
+ sortqueue(&data->Q, compare_wpt_cb);
+ return;
+ }
+
+ /* compute the (mean) center of current bounds */
+
+ center_lat = center_lon = 0;
+ QUEUE_FOR_EACH(&data->Q, elem, tmp) {
+ waypoint *wpt = (waypoint *) elem;
+ center_lat += wpt->latitude;
+ center_lon += wpt->longitude;
+ }
+ center_lat /= data->ct;
+ center_lon /= data->ct;
+
+ QUEUE_FOR_EACH(&data->Q, elem, tmp) {
+ waypoint *wpt = (waypoint *) elem;
+ writer_data_t **ref;
+
+ if (wpt->latitude < center_lat) {
+ if (wpt->longitude < center_lon)
+ ref = &data->buttom_left;
+ else
+ ref = &data->buttom_right;
+ } else {
+ if (wpt->longitude < center_lon)
+ ref = &data->top_left;
+ else
+ ref = &data->top_right;
+ }
+
+ if (*ref == NULL) *ref = wdata_alloc();
+
+ data->ct--;
+ dequeue(&wpt->Q);
+
+ wdata_add_wpt(*ref, wpt);
+ }
+
+ if (data->top_left) wdata_check(data->top_left);
+ if (data->top_right) wdata_check(data->top_right);
+ if (data->buttom_left) wdata_check(data->buttom_left);
+ if (data->buttom_right) wdata_check(data->buttom_right);
+}
+
+
+static int
+wdata_compute_size(writer_data_t *data)
+{
+ queue *elem, *tmp;
+ int res;
+
+ res = 23; /* bounds, ... of tag 0x80008 */
+
+ QUEUE_FOR_EACH(&data->Q, elem, tmp) {
+ waypoint *wpt = (waypoint *) elem;
+ gpi_waypt_t *dt;
+ garmin_fs_t *gmsd;
+ char *str;
+
+ res += 12; /* tag/sz/sub-sz */
+ res += 19; /* poi fixed size */
+ res += strlen(wpt->shortname);
+ res += 10; /* tag(4) */
+
+ str = NULL;
+ if (opt_descr) {
+ if (wpt->description && *wpt->description)
+ str = xstrdup(wpt->description);
+ }
+ else if (opt_notes) {
+ if (wpt->notes && *wpt->notes)
+ str = xstrdup(wpt->notes);
+ }
+ else if (opt_pos)
+ str = pretty_deg_format(wpt->latitude, wpt->longitude, 's', " ", 0);
+
+ dt = xcalloc(1, sizeof(*dt));
+ wpt->extra_data = dt;
+
+ if (str) {
+ dt->addr_is_dynamic = 1;
+ dt->addr = str;
+ dt->mask |= GPI_ADDR_ADDR;
+ dt->sz += (8 + strlen(dt->addr));
+ }
+
+ if ((gmsd = GMSD_FIND(wpt))) {
+ if ((dt->mask == 0) && ((dt->addr = GMSD_GET(addr, NULL)))) {
+ dt->mask |= GPI_ADDR_ADDR;
+ dt->sz += (8 + strlen(dt->addr));
+ }
+ if ((dt->city = GMSD_GET(city, NULL))) {
+ dt->mask |= GPI_ADDR_CITY;
+ dt->sz += (8 + strlen(dt->city));
+ }
+ if ((dt->country = GMSD_GET(country, NULL))) {
+ dt->mask |= GPI_ADDR_COUNTRY;
+ dt->sz += (8 + strlen(dt->country));
+ }
+ if ((dt->state = GMSD_GET(state, NULL))) {
+ dt->mask |= GPI_ADDR_STATE;
+ dt->sz += (8 + strlen(dt->state));
+ }
+ if ((dt->postal_code = GMSD_GET(postal_code, NULL))) {
+ dt->mask |= GPI_ADDR_POSTAL_CODE;
+ dt->sz += (2 + strlen(dt->postal_code)); /* short form */
+ }
+
+ if ((dt->phone_nr = GMSD_GET(phone_nr, NULL)))
+ res += (12 + 4 + strlen(dt->phone_nr));
+ }
+ if (dt->mask) dt->sz += 2; /* + mask (two bytes) */
+ if (dt->sz) res += (dt->sz + 12); /* + header size */
+
+ str = wpt->description;
+ if (! str) str = wpt->notes;
+ if (str) res += (12 + 4 + strlen(str));
+ }
+
+ if (data->top_left) res += wdata_compute_size(data->top_left);
+ if (data->top_right) res += wdata_compute_size(data->top_right);
+ if (data->buttom_left) res += wdata_compute_size(data->buttom_left);
+ if (data->buttom_right) res += wdata_compute_size(data->buttom_right);
+
+ data->sz = res;
+
+ return res + 12; /* + 12 = caller needs info about tag header size */
+}
+
+
+static void
+wdata_write(const writer_data_t *data)
+{
+ queue *elem, *tmp;
+
+ gbfputint32(0x80008, fout);
+ gbfputint32(data->sz, fout);
+ gbfputint32(23, fout); /* bounds + three bytes */
+
+ gbfputint32(GPS_Math_Deg_To_Semi(data->bds.max_lat), fout);
+ gbfputint32(GPS_Math_Deg_To_Semi(data->bds.max_lon), fout);
+ gbfputint32(GPS_Math_Deg_To_Semi(data->bds.min_lat), fout);
+ gbfputint32(GPS_Math_Deg_To_Semi(data->bds.min_lon), fout);
+
+ gbfputc(0, fout); /* three unknown bytes */
+ gbfputc(0, fout); /* ? should be zero ? */
+ gbfputc(0, fout);
+
+ gbfputint32(0x1000100, fout); /* ? const 0x1000100 ? */
+
+ QUEUE_FOR_EACH(&data->Q, elem, tmp) {
+ char *str;
+ int s0, s1;
+ waypoint *wpt = (waypoint *)elem;
+ gpi_waypt_t *dt = wpt->extra_data;
+
+ str = wpt->description;
+ if (! str) str = wpt->notes;
+
+ gbfputint32(0x80002, fout);
+
+ s0 = s1 = 19 + strlen(wpt->shortname);
+ s0 += 10; /* tag(4) */
+ if (str) s0 += (12 + 4 + strlen(str)); /* descr */
+ if (dt->sz) s0 += (12 + dt->sz); /* address part */
+ if (dt->phone_nr) s0 += (12 + 4 + strlen(dt->phone_nr));
+
+ gbfputint32(s0, fout); /* size of following data (tag) */
+ gbfputint32(s1, fout); /* basic size (without options) */
+
+ gbfputint32(GPS_Math_Deg_To_Semi(wpt->latitude), fout);
+ gbfputint32(GPS_Math_Deg_To_Semi(wpt->longitude), fout);
+
+ gbfputint16(1, fout); /* ? always 1 ? */
+ gbfputc(0, fout); /* seems to be 1 when extra options present */
+
+ write_string(wpt->shortname, 1);
+
+ gbfputint32(4, fout); /* tag(4) */
+ gbfputint32(2, fout); /* ? always 2 == version ??? */
+ if (opt_hide_bitmap) gbfputint16(0x3ff, fout); /* values != 0 hides the bitmap */
+ else gbfputint16(0, fout);
+
+ if (str) {
+ gbfputint32(0xa, fout);
+ gbfputint32(strlen(str) + 8, fout); /* string + string header */
+ write_string(str, 1);
+ }
+
+ if (dt->sz) { /* gpi address */
+ gbfputint32(0x8000b, fout);
+ gbfputint32(dt->sz, fout);
+ gbfputint32(0x2, fout); /* ? always 2 ? */
+ gbfputint16(dt->mask, fout);
+ if (dt->mask & GPI_ADDR_CITY) write_string(dt->city, 1);
+ if (dt->mask & GPI_ADDR_COUNTRY) write_string(dt->country, 1);
+ if (dt->mask & GPI_ADDR_STATE) write_string(dt->state, 1);
+ if (dt->mask & GPI_ADDR_POSTAL_CODE) write_string(dt->postal_code, 0);
+ if (dt->mask & GPI_ADDR_ADDR) write_string(dt->addr, 1);
+ }
+
+ if (dt->phone_nr) {
+ gbfputint32(0x8000c, fout);
+ gbfputint32(strlen(dt->phone_nr) + 2 + 2, fout);
+ gbfputint32(0x2, fout); /* ? always 2 ? */
+ gbfputint16(1, fout); /* mask */
+ write_string(dt->phone_nr, 0);
+ }
+ }
+
+ if (data->top_left) wdata_write(data->top_left);
+ if (data->top_right) wdata_write(data->top_right);
+ if (data->buttom_left) wdata_write(data->buttom_left);
+ if (data->buttom_right) wdata_write(data->buttom_right);
+}
+
+
+static void
+write_category(const char *category, const char *image, const int image_sz)
+{
+ int sz;
+
+ sz = wdata_compute_size(wdata);
+ sz += 8; /* string header */
+ sz += strlen(opt_cat);
+
+ gbfputint32(0x80009, fout);
+ if ((! opt_hide_bitmap) && image_sz)
+ gbfputint32(sz + image_sz + 8, fout);
+ else
+ gbfputint32(sz, fout);
+ gbfputint32(sz, fout);
+ write_string(opt_cat, 1);
+
+ wdata_write(wdata);
+
+ if ((! opt_hide_bitmap) && image_sz) {
+ gbfputint32(5, fout);
+ gbfputint32(image_sz, fout);
+ gbfwrite(image, 1, image_sz, fout);
+ }
+}
+
+
+static void
+write_header(void)
+{
+ time_t time = gpsbabel_time; /* !!! ZERO during leaktest !!! */
+
+ if (time != 0) {
+ struct tm tm = *gmtime(&time);
+ tm.tm_year -= 20;
+ time = mkgmtime(&tm);
+ time += SECONDS_PER_DAY;
+ }
+
+ gbfputint32(0, fout);
+ gbfputint32(0x16, fout);
+ gbfwrite("GRMREC00", 1, 8, fout);
+ gbfputint32(time, fout);
+ gbfputint16(0, fout);
+ gbfputint16(6, fout);
+ gbfwrite("my.gpi", 1, 6, fout);
+ gbfputint32(1, fout);
+ gbfputint32(0xc, fout);
+ gbfwrite("POI", 1, 3, fout);
+ gbfputc(0, fout);
+ gbfputc(0, fout);
+ gbfputc(0, fout);
+ gbfwrite("00", 1, 2, fout);
+ gbfputint32(codepage, fout);
+}
+
+
+static void
+enum_waypt_cb(const waypoint *ref)
+{
+ waypoint *wpt;
+ char *str;
+ queue *elem, *tmp;
+
+ QUEUE_FOR_EACH(&wdata->Q, elem, tmp) {
+ waypoint *cmp = (waypoint *) elem;
+
+ /* sort out nearly equal waypoints */
+ if ((compare_strings(cmp->shortname, ref->shortname) == 0) &&
+ (cmp->latitude == ref->latitude) &&
+ (cmp->longitude == ref->longitude) &&
+ (compare_strings(cmp->description, ref->description) == 0) &&
+ (compare_strings(cmp->notes, ref->notes) == 0)) return;
+ }
+
+ wpt = waypt_dupe(ref);
+
+ str = mkshort(short_h, wpt->shortname);
+ xfree(wpt->shortname);
+ wpt->shortname = str;
+
+ wdata_add_wpt(wdata, wpt);
+}
+
+
+static void
+load_bitmap_from_file(const char *fname, char **data, int *data_sz)
+{
+ gbfile *f;
+ int i, sz;
+ int dest_bpp;
+ int src_line_sz, dest_line_sz;
+ bmp_header_t src_h;
+ int *color_table = NULL;
+ gpi_bitmap_header_t *dest_h;
+ char *ptr;
+
+ f = gbfopen_le(fname, "rb", MYNAME);
+ is_fatal(gbfgetint16(f) != 0x4d42, MYNAME ": No BMP image.");
+
+ /* read a standard bmp file header */
+ src_h.size = gbfgetint32(f);
+ src_h.res1 = gbfgetint16(f);
+ src_h.res2 = gbfgetint16(f);
+ src_h.image_offset = gbfgetint32(f);
+ src_h.header_size = gbfgetint32(f);
+ src_h.width = gbfgetint32(f);
+ src_h.height = gbfgetint32(f);
+ src_h.planes = gbfgetint16(f);
+ src_h.bpp = gbfgetint16(f);
+ src_h.compression_type = gbfgetint32(f);
+ src_h.image_data_size = gbfgetint32(f);
+ src_h.resolution_h = gbfgetint32(f);
+ src_h.resolution_v = gbfgetint32(f);
+ src_h.used_colors = gbfgetint32(f);
+ src_h.important_colors = gbfgetint32(f);
+
+#ifdef GPI_DBG
+ printf("data size: 0x%1$x (%1$d)\n", src_h.size);
+ printf("image data offset: 0x%1$x (%1$d)\n", src_h.image_offset);
+ printf("header size: 0x%1$x (%1$d)\n", src_h.header_size);
+ printf("image width: 0x%1$x (%1$d)\n", src_h.width);
+ printf("image height: 0x%1$x (%1$d)\n", src_h.height);
+ printf("number of planes: 0x%1$x (%1$d)\n", src_h.planes);
+ printf("bits per pixel: 0x%1$x (%1$d)\n", src_h.bpp);
+ printf("compression type: 0x%1$x (%1$d)\n", src_h.compression_type);
+ printf("image size: 0x%1$x (%1$d)\n", src_h.image_data_size);
+ printf("horizontal resolution: 0x%1$x (%1$d)\n", src_h.resolution_h);
+ printf("vertical resolution: 0x%1$x (%1$d)\n", src_h.resolution_v);
+ printf("number of colors: 0x%1$x (%1$d)\n", src_h.used_colors);
+ printf("important colors: 0x%1$x (%1$d)\n", src_h.important_colors);
+#endif
+ /* sort out unsupported files */
+ if (! ((src_h.width <= 24) && (src_h.height <= 24) &&
+ (src_h.width > 0) && (src_h.height > 0)))
+ fatal(MYNAME ": Unsupported format (%dx%d)!\n", src_h.width, src_h.height);
+ if (! ((src_h.bpp == 8) || (src_h.bpp == 24) || (src_h.bpp == 32)))
+ fatal(MYNAME ": Unsupported color depth (%d)!\n", src_h.bpp);
+ if (! (src_h.compression_type == 0))
+ fatal(MYNAME ": Sorry, we don't support compressed bitmaps.\n");
+
+ if (src_h.used_colors > 0) {
+ color_table = xmalloc(4 * src_h.used_colors);
+ gbfread(color_table, 1, 4 * src_h.used_colors, f);
+ for (i = 0; i < src_h.used_colors; i++) {
+ int color = color_table[i];
+ /* swap blue and red value */
+ color = (color >> 16) | (color << 16) | (color & 0x00ff00);
+ color_table[i] = color & 0xffffff;
+ }
+ }
+
+ /* calculate line-size for source and destination */
+ src_line_sz = (src_h.width * src_h.bpp) / 8;
+ src_line_sz = ((int)((src_line_sz + 3) / 4)) * 4;
+
+ if (src_h.bpp == 24) dest_bpp = 32;
+ else dest_bpp = src_h.bpp;
+
+ dest_line_sz = (src_h.width * dest_bpp) / 8;
+ dest_line_sz = ((int)((dest_line_sz + 3) / 4)) * 4;
+
+ sz = sizeof(*dest_h) + (src_h.height * dest_line_sz);
+ if (src_h.used_colors) sz += (src_h.used_colors * 4);
+
+ ptr = xmalloc(sz);
+ dest_h = (void *)ptr;
+ *data = ptr;
+ *data_sz = sz;
+
+ le_write16(&dest_h->index, 0);
+ le_write16(&dest_h->height, src_h.height);
+ le_write16(&dest_h->width, src_h.width);
+ le_write16(&dest_h->line_sz, dest_line_sz);
+ le_write16(&dest_h->bpp, dest_bpp);
+ le_write16(&dest_h->fixed_0, 0); /* seems to be fixed */
+ le_write32(&dest_h->image_size, dest_line_sz * src_h.height);
+ le_write32(&dest_h->fixed_2c, 0x2c); /* seems to be fixed */
+ le_write32(&dest_h->flag1, (dest_bpp == 8) ? 0x100 : 0);
+ le_write32(&dest_h->tr_color, 0xff00ff); /* magenta = transparent color */
+ le_write32(&dest_h->flag2, 0x1); /* ? enable transparent mode ? */
+ le_write32(&dest_h->size_2c, (dest_line_sz * src_h.height) + 0x2c);
+
+ /* copy and revert order of BMP lines */
+ ptr = (void *)dest_h;
+ ptr += (sizeof(*dest_h) + (dest_line_sz * (src_h.height - 1)));
+
+ if (src_h.bpp == 24) {
+ /* 24 bpp seems to be not supported, convert to 32 bpp */
+ for (i = 0; i < src_h.height; i++) {
+ int j;
+ char *p = ptr;
+
+ for (j = 0; j < src_h.width; j++) {
+ int color;
+ color = (gbint32)gbfgetint16(f) | (gbfgetc(f) << 16);
+ le_write32(p, color);
+ p += 4;
+ }
+ ptr -= dest_line_sz;
+ }
+ }
+ else for (i = 0; i < src_h.height; i++) {
+ gbfread(ptr, 1, src_line_sz, f);
+ ptr -= dest_line_sz;
+ }
+
+ if (src_h.used_colors > 0) {
+ ptr = (void *)dest_h;
+ ptr += (sizeof(*dest_h) + (src_h.height * src_line_sz));
+
+ for (i = 0; i < src_h.used_colors; i++) {
+ le_write32(ptr, color_table[i]);
+ ptr += 4;
+ }
+ }
+
+ if (color_table) xfree(color_table);
+ gbfclose(f);
+}
+
+/*******************************************************************************
+* %%% global callbacks called by gpsbabel main process %%% *
+*******************************************************************************/
+
+static void
+garmin_gpi_rd_init(const char *fname)
+{
+ char cp[8];
+
+ fin = gbfopen_le(fname, "rb", MYNAME);
+ rdata = xcalloc(1, sizeof(*rdata));
+
+ read_header();
+
+ if ((codepage >= 1250) && (codepage <= 1257)) {
+ snprintf(cp, sizeof(cp), "CP%d", codepage);
+ cet_convert_init(cp, 1);
+ }
+ else warning(MYNAME ": Unsupported code page (%d).\n", codepage);
+}
+
+
+static void
+garmin_gpi_wr_init(const char *fname)
+{
+ char cp[8];
+ cet_cs_vec_t *vec;
+ int i;
+
+ fout = gbfopen_le(fname, "wb", MYNAME);
+
+ short_h = mkshort_new_handle();
+
+ setshort_length(short_h, 1024);
+ setshort_badchars(short_h, "\r\n");
+ setshort_mustupper(short_h, 0);
+ setshort_mustuniq(short_h, 1);
+ setshort_whitespace_ok(short_h, 1);
+ setshort_repeating_whitespace_ok(short_h, 0);
+ setshort_defname(short_h, "POI");
+
+ codepage = 0;
+
+ for (i = 1250; i <= 1257; i++) {
+ snprintf(cp, sizeof(cp), "CP%d", i);
+ vec = cet_find_cs_by_name(cp);
+ if (vec == global_opts.charset) {
+ codepage = i;
+ break;
+ }
+ }
+
+ if (! codepage) {
+ warning(MYNAME ": Unsupported character set (%s)!\n", global_opts.charset_name);
+ fatal(MYNAME ": Valid values are CP1250 to CP1257.\n");
+ }
+
+ wdata = wdata_alloc();
+}
+
+
+static void
+garmin_gpi_rd_deinit(void)
+{
+ if (rdata->category) xfree(rdata->category);
+ if (rdata->group) xfree(rdata->group);
+ xfree(rdata);
+ gbfclose(fin);
+}
+
+
+static void
+garmin_gpi_wr_deinit(void)
+{
+ wdata_free(wdata);
+ mkshort_del_handle(&short_h);
+ gbfclose(fout);
+}
+
+
+static void
+garmin_gpi_read(void)
+{
+ while (1) {
+ int tag = gbfgetint32(fin);
+ if (tag == 0xffff) return;
+ if (! read_tag("garmin_gpi_read", tag, NULL)) return;
+ };
+}
+
+
+static void
+garmin_gpi_write(void)
+{
+ char *image;
+ int image_sz;
+
+ if (strlen(opt_cat) == 0) fatal(MYNAME ": Can't write empty category!\n");
+
+ if (opt_hide_bitmap) {
+ image = NULL;
+ image_sz = 0;
+ }
+ else if (opt_bitmap && *opt_bitmap)
+ load_bitmap_from_file(opt_bitmap, &image, &image_sz);
+ else {
+ image = gpi_bitmap; /* embedded GPSBabel icon in gpi format */
+ image_sz = GPI_BITMAP_SIZE;
+ }
+ waypt_disp_all(enum_waypt_cb);
+
+ wdata_check(wdata);
+ write_header();
+ write_category(opt_cat, image, image_sz);
+
+ gbfputint32(0xffff, fout); /* final tag */
+ gbfputint32(0, fout); /* ? dummy size ? */
+
+ if (image != gpi_bitmap) xfree(image);
+}
+
+/**************************************************************************/
+
+ff_vecs_t garmin_gpi_vecs = {
+ ff_type_file,
+ {
+ ff_cap_read | ff_cap_write /* waypoints */,
+ ff_cap_none /* tracks */,
+ ff_cap_none /* routes */
+ },
+ garmin_gpi_rd_init,
+ garmin_gpi_wr_init,
+ garmin_gpi_rd_deinit,
+ garmin_gpi_wr_deinit,
+ garmin_gpi_read,
+ garmin_gpi_write,
+ NULL,
+ garmin_gpi_args,
+ CET_CHARSET_MS_ANSI, 0 /* WIN-CP1252 */
+};
+
+/**************************************************************************/
--- /dev/null
+#ifndef GARMIN_GPI_H
+#define GARMIN_GPI_H
+
+static char gpi_bitmap[] = {
+ 0x00,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x08,0x00,0x00,0x00,0x40,0x02,0x00,0x00,
+ 0x2c,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0xff,0x00,0xff,0x00,0x01,0x00,0x00,0x00,
+ 0x6c,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0x00,0x7e,0x7e,0x7e,
+ 0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,
+ 0x7e,0x7e,0x00,0x7e,0x00,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,
+ 0x7f,0x7f,0x59,0x67,0x65,0x7f,0x7f,0x7f,0x7f,0x7f,0x00,0x7e,0x00,0x7e,0x7f,0x7f,
+ 0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x74,0x3d,0x42,0x56,0x7e,0x7e,0x7f,
+ 0x7f,0x7f,0x00,0x7e,0x00,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,
+ 0x7f,0x72,0x38,0x49,0x47,0x7e,0x7e,0x7f,0x7f,0x7f,0x00,0x7e,0x00,0x7e,0x7f,0x7f,
+ 0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7d,0x37,0x47,0x7d,0x7e,0x7e,0x7f,
+ 0x7f,0x7f,0x00,0x7e,0x00,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,
+ 0x7f,0x7d,0x37,0x47,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x00,0x7e,0x00,0x7e,0x7f,0x7f,
+ 0x7f,0x7f,0x7f,0x7f,0x7f,0x7c,0x6c,0x50,0x44,0x5e,0x4f,0x76,0x7e,0x7f,0x7f,0x7f,
+ 0x7f,0x7f,0x00,0x7e,0x00,0x7e,0x7f,0x77,0x7e,0x7f,0x7f,0x7e,0x62,0x0d,0x00,0x05,
+ 0x10,0x08,0x09,0x59,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x00,0x7e,0x00,0x7e,0x29,0x1c,
+ 0x4c,0x7f,0x7f,0x60,0x02,0x0c,0x2a,0x37,0x51,0x63,0x57,0x15,0x58,0x7e,0x7e,0x7f,
+ 0x7f,0x7f,0x00,0x7e,0x00,0x7e,0x68,0x5a,0x41,0x5f,0x5f,0x07,0x0e,0x3d,0x41,0x41,
+ 0x4d,0x55,0x6b,0x61,0x26,0x57,0x57,0x2b,0x2f,0x30,0x00,0x7e,0x00,0x7e,0x77,0x7d,
+ 0x4e,0x3d,0x3d,0x16,0x35,0x41,0x7d,0x49,0x18,0x48,0x52,0x54,0x5b,0x31,0x31,0x63,
+ 0x7f,0x7f,0x00,0x7e,0x00,0x7e,0x40,0x7d,0x75,0x47,0x47,0x41,0x35,0x40,0x72,0x1e,
+ 0x7c,0x5d,0x1d,0x20,0x49,0x3d,0x3d,0x5b,0x7f,0x7f,0x00,0x7e,0x00,0x7e,0x60,0x5c,
+ 0x7a,0x1a,0x1a,0x3b,0x38,0x5d,0x0e,0x59,0x7d,0x3c,0x72,0x37,0x78,0x60,0x60,0x28,
+ 0x4f,0x71,0x00,0x7e,0x00,0x7e,0x7e,0x43,0x33,0x69,0x69,0x17,0x22,0x7d,0x2c,0x27,
+ 0x2a,0x2b,0x7d,0x32,0x61,0x4f,0x4f,0x36,0x3f,0x4c,0x00,0x7e,0x00,0x7e,0x7f,0x7e,
+ 0x3a,0x2b,0x2b,0x45,0x1a,0x40,0x47,0x7d,0x37,0x41,0x12,0x25,0x5e,0x46,0x46,0x4d,
+ 0x62,0x53,0x00,0x7e,0x00,0x7e,0x7f,0x7e,0x73,0x71,0x71,0x6a,0x13,0x39,0x1b,0x45,
+ 0x62,0x50,0x3a,0x7e,0x7e,0x7b,0x7b,0x5c,0x5b,0x49,0x00,0x7e,0x00,0x7e,0x7f,0x7e,
+ 0x59,0x01,0x01,0x06,0x64,0x35,0x4e,0x3e,0x26,0x21,0x66,0x7f,0x45,0x04,0x04,0x11,
+ 0x7f,0x7f,0x00,0x7e,0x00,0x7e,0x7f,0x7e,0x59,0x01,0x01,0x06,0x64,0x35,0x4e,0x3e,
+ 0x26,0x21,0x66,0x7f,0x45,0x04,0x04,0x11,0x7f,0x7f,0x00,0x7e,0x00,0x7e,0x7f,0x7e,
+ 0x7c,0x0a,0x0a,0x0f,0x65,0x7d,0x74,0x71,0x7c,0x7e,0x7e,0x7e,0x58,0x03,0x03,0x2b,
+ 0x7f,0x7f,0x00,0x7e,0x00,0x7e,0x7f,0x7f,0x7f,0x6d,0x6d,0x6f,0x2d,0x1d,0x63,0x7a,
+ 0x7e,0x75,0x5d,0x19,0x32,0x70,0x70,0x6f,0x7f,0x7f,0x00,0x7e,0x00,0x7e,0x7f,0x7f,
+ 0x7f,0x7f,0x7f,0x7e,0x7d,0x53,0x35,0x0b,0x1f,0x0e,0x34,0x5a,0x7f,0x7f,0x7f,0x7f,
+ 0x7f,0x7f,0x00,0x7e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7e,0x7f,0x7e,0x7e,0x7e,
+ 0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,
+ 0x7e,0x7e,0x7e,0x7e,0x0a,0x0a,0x0a,0x00,0x0b,0x0b,0x0b,0x00,0x16,0x16,0x16,0x00,
+ 0x1f,0x1f,0x1f,0x00,0x28,0x28,0x28,0x00,0x2d,0x2d,0x2d,0x00,0x35,0x35,0x35,0x00,
+ 0x3d,0x3d,0x3d,0x00,0x40,0x40,0x40,0x00,0x41,0x41,0x41,0x00,0x43,0x43,0x43,0x00,
+ 0x46,0x46,0x46,0x00,0x47,0x47,0x47,0x00,0x4b,0x4b,0x4b,0x00,0x4e,0x4e,0x4e,0x00,
+ 0x53,0x53,0x53,0x00,0x54,0x54,0x54,0x00,0x56,0x56,0x56,0x00,0x59,0x59,0x59,0x00,
+ 0x5a,0x5a,0x5a,0x00,0x5f,0x5f,0x5f,0x00,0x60,0x60,0x60,0x00,0x62,0x62,0x62,0x00,
+ 0x63,0x63,0x63,0x00,0x6a,0x6a,0x6a,0x00,0x74,0x74,0x74,0x00,0x75,0x75,0x75,0x00,
+ 0x76,0x76,0x76,0x00,0x78,0x78,0x78,0x00,0x79,0x79,0x79,0x00,0x7a,0x7a,0x7a,0x00,
+ 0x7c,0x7c,0x7c,0x00,0x7d,0x7d,0x7d,0x00,0x7e,0x7e,0x7e,0x00,0x80,0x80,0x80,0x00,
+ 0x81,0x81,0x81,0x00,0x82,0x82,0x82,0x00,0x83,0x83,0x83,0x00,0x84,0x84,0x84,0x00,
+ 0x85,0x85,0x85,0x00,0x87,0x87,0x87,0x00,0x88,0x88,0x88,0x00,0x89,0x89,0x89,0x00,
+ 0x8a,0x8a,0x8a,0x00,0x8b,0x8b,0x8b,0x00,0x8e,0x8e,0x8e,0x00,0x90,0x90,0x90,0x00,
+ 0x91,0x91,0x91,0x00,0x92,0x92,0x92,0x00,0x94,0x94,0x94,0x00,0x95,0x95,0x95,0x00,
+ 0x96,0x96,0x96,0x00,0x97,0x97,0x97,0x00,0x98,0x98,0x98,0x00,0x9b,0x9b,0x9b,0x00,
+ 0x9c,0x9c,0x9c,0x00,0x9d,0x9d,0x9d,0x00,0xa0,0xa0,0xa0,0x00,0xa1,0xa1,0xa1,0x00,
+ 0xa2,0xa2,0xa2,0x00,0xa4,0xa4,0xa4,0x00,0xa6,0xa6,0xa6,0x00,0xa7,0xa7,0xa7,0x00,
+ 0xab,0xab,0xab,0x00,0xac,0xac,0xac,0x00,0xad,0xad,0xad,0x00,0xae,0xae,0xae,0x00,
+ 0xaf,0xaf,0xaf,0x00,0xb0,0xb0,0xb0,0x00,0xb1,0xb1,0xb1,0x00,0xb2,0xb2,0xb2,0x00,
+ 0xb3,0xb3,0xb3,0x00,0xb4,0xb4,0xb4,0x00,0xb5,0xb5,0xb5,0x00,0xb6,0xb6,0xb6,0x00,
+ 0xb7,0xb7,0xb7,0x00,0xb9,0xb9,0xb9,0x00,0xbb,0xbb,0xbb,0x00,0xbc,0xbc,0xbc,0x00,
+ 0xbe,0xbe,0xbe,0x00,0xbf,0xbf,0xbf,0x00,0xc0,0xc0,0xc0,0x00,0xc1,0xc1,0xc1,0x00,
+ 0xc2,0xc2,0xc2,0x00,0xc3,0xc3,0xc3,0x00,0xc4,0xc4,0xc4,0x00,0xc5,0xc5,0xc5,0x00,
+ 0xc9,0xc9,0xc9,0x00,0xcb,0xcb,0xcb,0x00,0xcc,0xcc,0xcc,0x00,0xce,0xce,0xce,0x00,
+ 0xcf,0xcf,0xcf,0x00,0xd0,0xd0,0xd0,0x00,0xd1,0xd1,0xd1,0x00,0xd2,0xd2,0xd2,0x00,
+ 0xd4,0xd4,0xd4,0x00,0xd5,0xd5,0xd5,0x00,0xd6,0xd6,0xd6,0x00,0xd9,0xd9,0xd9,0x00,
+ 0xda,0xda,0xda,0x00,0xdb,0xdb,0xdb,0x00,0xdc,0xdc,0xdc,0x00,0xdd,0xdd,0xdd,0x00,
+ 0xe0,0xe0,0xe0,0x00,0xe1,0xe1,0xe1,0x00,0xe2,0xe2,0xe2,0x00,0xe3,0xe3,0xe3,0x00,
+ 0xe4,0xe4,0xe4,0x00,0xe6,0xe6,0xe6,0x00,0xe8,0xe8,0xe8,0x00,0xe9,0xe9,0xe9,0x00,
+ 0xea,0xea,0xea,0x00,0xeb,0xeb,0xeb,0x00,0xec,0xec,0xec,0x00,0xed,0xed,0xed,0x00,
+ 0xee,0xee,0xee,0x00,0xf0,0xf0,0xf0,0x00,0xf3,0xf3,0xf3,0x00,0xf4,0xf4,0xf4,0x00,
+ 0xf5,0xf5,0xf5,0x00,0xf7,0xf7,0xf7,0x00,0xf8,0xf8,0xf8,0x00,0xf9,0xf9,0xf9,0x00,
+ 0xfa,0xfa,0xfa,0x00,0xfb,0xfb,0xfb,0x00,0xfc,0xfc,0xfc,0x00,0xff,0xff,0xff,0x00,
+ 0xff,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00
+};
+
+#define GPI_BITMAP_SIZE sizeof(gpi_bitmap)
+
+#endif
*/
#include "garmin_tables.h"
+#include "jeeps/gpsmath.h"
+
#include <stdio.h>
#include <string.h>
* ....
* { -2, 8192, "Custom 511" },
*/
-
+#if 0
+/* Since Garmin is busily adding icons to new units, we have to hide
+ * these so we can pass them through to the new entries. 6/2/07 robertl
+ */
{ 92, 8227, "Micro-Cache" }, /* icon for "Toll Booth" */
{ 48, 161, "Virtual cache" }, /* icon for "Scenic Area" */
{ 86, 8217, "Multi-Cache" }, /* icon for "Stadium" */
{ 83, 8214, "Post Office" }, /* Icon for "Post Office" */
{ 47, 160, "Event Cache" }, /* Icon for "Event" */
{ 90, 8221, "Webcam Cache" }, /* Icon for "Live Theatre" */
-
+#endif
/* MapSource V6.x */
{ 140, 8286, "Flag, Red" },
"Symbol & Description"
};
+typedef struct {
+ char *shortname;
+ char *longname;
+ grid_type grid;
+} grid_mapping_t;
+
+/* gt_mps_grid_names: !!! degree sign substituted with '*' !!! */
+
+grid_mapping_t gt_mps_grid_names[] =
+{
+ { "ddd", "Lat/Lon hddd.ddddd*", grid_lat_lon_ddd },
+ { "dmm", "Lat/Lon hddd*mm.mmm'", grid_lat_lon_dmm },
+ { "dms", "Lat/Lon hddd*mm'ss.s\"", grid_lat_lon_dms },
+ { "bng", "British National Grid", grid_bng },
+ { "utm", "UTM", grid_utm },
+ { NULL, NULL, 0 }
+};
+
+/* gt_mps_datum_names: */
+
+typedef struct {
+ char *jeeps_name;
+ char *mps_name;
+} datum_mapping_t;
+
+/* will be continued (when requested) */
+datum_mapping_t gt_mps_datum_names[] =
+{
+ { "Alaska-NAD27", "NAD27 Alaska" },
+ { "Bahamas NAD27", "NAD27 Bahamas" },
+ { "Canada_Mean(NAD27)", "NAD27 Canada" },
+ { "Canal_Zone_(NAD27)", "NAD27 Canal Zone" },
+ { "Carribean NAD27", "NAD27 Caribbean" },
+ { "Cent America NAD27", "NAD27 Central" },
+ { "Cuba NAD27", "NAD27 Cuba" },
+ { "Geodetic Datum 49", "Geodetic Datum '49" },
+ { "Greenland NAD27", "NAD27 Greenland" },
+ { "Mexico NAD27", "NAD27 Mexico" },
+ { "North America 83", "NAD83" },
+ { "OSGB36", "Ord Srvy Grt Britn" },
+ { NULL, NULL }
+};
+
unsigned char
gt_switch_display_mode_value(const unsigned char display_mode, const int protoid, const char device)
{
return NULL;
}
+grid_type
+gt_lookup_grid_type(const char *grid_name, const char *module)
+{
+ grid_mapping_t *g;
+
+ for (g = gt_mps_grid_names; (g->shortname); g++) {
+ if ((case_ignore_strcmp(grid_name, g->shortname) == 0) ||
+ (case_ignore_strcmp(grid_name, g->longname) == 0))
+ return g->grid;
+ }
+
+ fatal("%s: Unsupported grid (%s)! See GPSBabel help for supported grids.\n",
+ module, grid_name);
+
+ return grid_unknown; /* (warnings) */
+}
+
+char *
+gt_get_mps_grid_longname(const grid_type grid, const char *module)
+{
+ if ((grid < GRID_INDEX_MIN) || (grid > GRID_INDEX_MAX))
+ fatal("%s: Grid index out of range %d (%d..%d)!",
+ module, (int) grid,
+ (int)GRID_INDEX_MIN, (int)GRID_INDEX_MAX);
+ return gt_mps_grid_names[grid].longname;
+}
+
+char *
+gt_get_mps_datum_name(const int datum_index)
+{
+ char *result;
+ datum_mapping_t *d;
+
+ result = GPS_Math_Get_Datum_Name(datum_index);
+
+ for (d = gt_mps_datum_names; (d->jeeps_name); d++)
+ if (case_ignore_strcmp(result, d->jeeps_name) == 0) return d->mps_name;
+
+ return result;
+}
+
+int
+gt_lookup_datum_index(const char *datum_str, const char *module)
+{
+ datum_mapping_t *d;
+ int result;
+ const char *name = datum_str;
+
+ for (d = gt_mps_datum_names; (d->jeeps_name); d++) {
+ if (case_ignore_strcmp(name, d->mps_name) == 0) {
+ name = d->jeeps_name;
+ break;
+ }
+ }
+
+ result = GPS_Lookup_Datum_Index(name);
+
+ if (result < 0) {
+ char *tmp;
+ xasprintf(&tmp, "%s mean", datum_str);
+ result = GPS_Lookup_Datum_Index(tmp);
+ xfree(tmp);
+ }
+
+ is_fatal(result < 0,
+ "%s: Unsupported datum (%s)! See GPSBabel help for supported datums.",
+ module, datum_str);
+
+ return result;
+}
+
#if MAKE_TABLE
/*
unsigned char gt_switch_display_mode_value(const unsigned char display_mode, const int protoid, const char device);
+grid_type gt_lookup_grid_type(const char *grid_name, const char *module);
+char *gt_get_mps_grid_longname(const grid_type grid, const char *module);
+int gt_lookup_datum_index(const char *datum_str, const char *module);
+char *gt_get_mps_datum_name(const int datum_index);
+
#endif
static int routepoints;
static waypoint **wpt_a;
static int wpt_a_ct;
-static int grid_index;
+static grid_type grid_index;
static int datum_index;
static char *datum_str;
static int current_line;
NULL
};
-static char *grid_short_names[] = {
- "ddd",
- "dmm",
- "dms",
- "bng",
- NULL
-};
-
-static char *grid_long_names[] = { /* starting at index !!! 3 !!! after inbuild lat/lon ... grids */
- "British National Grid",
- NULL
-};
-
-#define GRID_IDX_LAT_LON_DDD 0
-#define GRID_IDX_LAT_LON_DMM 1
-#define GRID_IDX_LAT_LON_DMS 2
-#define GRID_IDX_BNG 3
-
-#define GRID_IDX_MAX GRID_IDX_BNG
-
/* helpers */
static char *
{
double alt;
- if (datum_index == 118 /* WGS 84 */) {
+ if (datum_index == DATUM_WGS84 ) {
if (to_internal_wgs84 == 0) {
*dest_lat = wpt->latitude;
*dest_lon = wpt->longitude;
{
int valid;
double lat, lon, north, east;
- char map[3];
char latsig, lonsig;
double latmin, lonmin, latsec, lonsec;
- int latint, lonint;
+ int latint, lonint, zone;
+ char map[3], zonec;
convert_datum((waypoint *)wpt, 0, &lat, &lon);
switch(grid_index) {
- case GRID_IDX_LAT_LON_DDD:
+ case grid_lat_lon_ddd:
gbfprintf(fout, "%c%0.*f %c%0.*f\t",
latsig, precision, fabs(lat),
lonsig, precision, fabs(lon));
break;
- case GRID_IDX_LAT_LON_DMM:
+ case grid_lat_lon_dmm:
gbfprintf(fout, "%c%d %0*.*f %c%d %0*.*f\t",
latsig, latint, precision + 3, precision, latmin,
lonsig, lonint, precision + 3, precision, lonmin);
break;
- case GRID_IDX_LAT_LON_DMS:
+ case grid_lat_lon_dms:
gbfprintf(fout, "%c%d %d %.*f %c%d %d %.*f\t",
latsig, latint, (int)latmin, precision, latsec,
lonsig, lonint, (int)lonmin, precision, lonsec);
break;
- case GRID_IDX_BNG:
+ case grid_bng:
+
valid = GPS_Math_WGS84_To_UKOSMap_M(wpt->latitude, wpt->longitude, &east, &north, map);
is_fatal(! valid, MYNAME ": Some (or all?) of the coordinates cannot be displayed using \"BNG\".");
- gbfprintf(fout, "%s %5.0f %5.0f", map, east, north);
+ gbfprintf(fout, "%s %5.0f %5.0f\t", map, east, north);
break;
+
+ case grid_utm:
+
+ valid = GPS_Math_Known_Datum_To_UTM_EN(lat, lon,
+ &east, &north, &zone, &zonec, datum_index);
+ gbfprintf(fout, "%02d %c %.0f %.0f\t", zone, zonec, east, north);
+ break;
+
+ default:
+ fatal("ToDo\n");
}
}
idist = si_round(dist);
if ((*time != 0) && (idist > 0)) {
- double speed = dist / (double)*time * SECONDS_PER_HOUR / 1000;
+ double speed = MPS_TO_KPH(dist / (double)*time);
int ispeed = si_round(speed);
if (speed < (double)0.01)
print_distance(wpt->altitude, 1, 0);
gbfprintf(fout, "\t");
- x = GMSD_GET(depth, unknown_alt);
+ x = WAYPT_GET(wpt, depth, unknown_alt);
if (x != unknown_alt)
print_distance(x, 1, 0);
gbfprintf(fout, "\t");
- x = GMSD_GET(proximity, unknown_alt);
+ x = WAYPT_GET(wpt, proximity, unknown_alt);
if (x != unknown_alt)
print_distance(x, 0, 0);
gbfprintf(fout, "\t");
- x = GMSD_GET(temperature, unknown_alt);
+ x = WAYPT_GET(wpt, temperature, unknown_alt);
if (x != unknown_alt) {
if (gtxt_flags.celsius)
gbfprintf(fout, "%.f C", x);
datum_str = get_option_val(opt_datum, NULL);
grid_str = get_option_val(opt_grid, NULL);
- grid_index = -1;
- if (grid_str == NULL) {
- grid_index = 1; /* default: dmm */
- }
- else if (! sscanf(grid_str, "%d", &grid_index)) {
- char *name;
- int index;
+ grid_index = grid_lat_lon_dmm;
+ if (grid_str != NULL) {
+ int i;
- index = 0;
- while ((name = grid_short_names[index])) {
- if (case_ignore_strcmp(name, grid_str) == 0) {
- grid_index = index;
- break;
- }
- index++;
- }
- if (name == NULL) { /* look in "long names" */
- index = 0;
- while ((name = grid_long_names[index])) {
- if (case_ignore_strcmp(name, grid_str) == 0) break;
- else index++;
- }
- is_fatal(name == NULL,
- MYNAME ": Unsupported grid (%s). See GPSBabel help for supported grids.", grid_str);
- grid_index = 3 + index;
+ if (sscanf(grid_str, "%d", &i)) {
+ grid_index = (grid_type) i;
+ if ((grid_index < GRID_INDEX_MIN) || (grid_index > GRID_INDEX_MAX))
+ fatal(MYNAME ": Grid index out of range (%d..%d)!",
+ (int)GRID_INDEX_MIN, (int)GRID_INDEX_MAX);
}
+ else grid_index = gt_lookup_grid_type(grid_str, MYNAME);
}
- else is_fatal(grid_index > GRID_IDX_MAX, MYNAME ": Grid index out of range (0..%d)!", GRID_IDX_MAX);
switch(grid_index) {
- case GRID_IDX_BNG: /* force datum to "Ord Srvy Grt Britn" */
- datum_index = GPS_Lookup_Datum_Index("OSGB36");
+ case grid_bng: /* force datum to "Ord Srvy Grt Britn" */
+ datum_index = DATUM_OSGB36;
break;
default:
- datum_index = GPS_Lookup_Datum_Index(datum_str);
- is_fatal(datum_index < 0, MYNAME ": Invalid or unknown gps datum (%s)!", datum_str);
+ datum_index = gt_lookup_datum_index(datum_str, MYNAME);
}
if (opt_utc != NULL) {
static void
garmin_txt_write(void)
{
- switch(grid_index) {
- case 0:
- cet_gbfprintf(fout, &cet_cs_vec_cp1252, "Grid\tLat/Lon hddd.ddddd%c\r\n", 0xB0);
- break;
- case 1:
- cet_gbfprintf(fout, &cet_cs_vec_cp1252, "Grid\tLat/Lon hddd%cmm.mmm'\r\n", 0xB0);
- break;
- case 2:
- cet_gbfprintf(fout, &cet_cs_vec_cp1252, "Grid\tLat/Lon hddd%cmm'ss.s\"\r\n", 0xB0);
- break;
- case GRID_IDX_BNG:
- cet_gbfprintf(fout, &cet_cs_vec_cp1252, "Grid\t%s\r\n", grid_long_names[0]);
- datum_str = "Ord Srvy Grt Britn";
- break;
- }
+ char *grid_str, *c;
+ grid_str = xstrdup(gt_get_mps_grid_longname(grid_index, MYNAME));
+ while ((c = strchr(grid_str, '*'))) *c = 0xB0; /* degree sign */
+ cet_gbfprintf(fout, &cet_cs_vec_cp1252, "Grid\t%s\r\n", grid_str);
+ xfree(grid_str);
+
+ datum_str = gt_get_mps_datum_name(datum_index);
gbfprintf(fout, "Datum\t%s\r\n\r\n", datum_str);
waypoints = 0;
/* data parsers */
+#if 0
+/* moved to util.c */
static void
parse_position(const char *str, waypoint *wpt)
{
- double lat, lon;
- unsigned char lathemi, lonhemi;
- int deg_lat, deg_lon, min_lat, min_lon;
- char map[3];
-
- switch(grid_index) {
-
- case GRID_IDX_LAT_LON_DDD:
- sscanf(str, "%c%lf %c%lf", &lathemi, &lat, &lonhemi, &lon);
- break;
-
- case GRID_IDX_LAT_LON_DMM:
- sscanf(str, "%c%d %lf %c%d %lf", &lathemi, °_lat, &lat, &lonhemi, °_lon, &lon);
- lat = (double)deg_lat + (lat / (double)60);
- lon = (double)deg_lon + (lon / (double)60);
- break;
- case GRID_IDX_LAT_LON_DMS:
- sscanf(str, "%c%d %d %lf %c%d %d %lf", &lathemi, °_lat, &min_lat, &lat, &lonhemi, °_lon, &min_lon, &lon);
- lat = (double)deg_lat + ((double)min_lat / (double)60) + (lat / (double)3600.0);
- lon = (double)deg_lon + ((double)min_lon / (double)60) + (lon / (double)3600.0);
- break;
-
- case GRID_IDX_BNG:
- sscanf(str, "%2s %lf %lf", map, &lat, &lon);
- lathemi = lonhemi = '\0';
- break;
- }
-
- if (lathemi == 'S')
- wpt->latitude = -lat;
- else
- wpt->latitude = lat;
-
- if (lonhemi == 'W')
- wpt->longitude = -lon;
- else
- wpt->longitude = lon;
+......
}
+#endif
static int
parse_distance(const char *str, double *value)
cin = lrtrim(cin);
if (*cin != '\0') {
if (!garmin_fs_convert_category(cin, &val))
- warning(MYNAME ": Unable to convert category \"%s\" at line %d!", cin, current_line);
+ warning(MYNAME ": Unable to convert category \"%s\" at line %d!\n", cin, current_line);
else
res = res | val;
}
parse_grid(void)
{
char *str = csv_lineparse(NULL, "\t", "", 1);
- grid_index = -1;
if (str != NULL) {
- if (strstr(str, "dd.ddddd") != 0) grid_index = GRID_IDX_LAT_LON_DDD;
- else if (strstr(str, "mm.mmm") != 0) grid_index = GRID_IDX_LAT_LON_DMM;
- else if (strstr(str, "mm'ss.s") != 0) grid_index = GRID_IDX_LAT_LON_DMS;
- else {
- char *name;
- int index = 0;
-
- while ((name = grid_long_names[index])) {
- if (case_ignore_strcmp(name, str) == 0) {
- grid_index = GRID_IDX_BNG + index;
- break;
- }
- index++;
- }
- }
- is_fatal(grid_index < 0, MYNAME ": Unsupported grid (%s)!", str);
+ if (strstr(str, "dd.ddddd") != 0) grid_index = grid_lat_lon_ddd;
+ else if (strstr(str, "mm.mmm") != 0) grid_index = grid_lat_lon_dmm;
+ else if (strstr(str, "mm'ss.s") != 0) grid_index = grid_lat_lon_dms;
+ else grid_index = gt_lookup_grid_type(str, MYNAME);
}
else
fatal(MYNAME ": Missing grid headline!\n");
{
char *str = csv_lineparse(NULL, "\t", "", 1);
- if (str != NULL) {
- datum_index = GPS_Lookup_Datum_Index(str);
- is_fatal(datum_index < 0, MYNAME ": Unsupported GPS datum \"%s\"!", str);
- }
+ if (str != NULL)
+ datum_index = gt_lookup_datum_index(str, MYNAME);
else
fatal(MYNAME ": Missing GPS datum headline!\n");
}
}
}
break;
- case 4: parse_position(str, wpt); break;
+ case 4:
+ parse_coordinates(str, datum_index, grid_index,
+ &wpt->latitude, &wpt->longitude, MYNAME);
+ break;
case 5: if (parse_distance(str, &d)) wpt->altitude = d; break;
- case 6: if (parse_distance(str, &d)) GMSD_SET(depth, d); break;
- case 7: if (parse_distance(str, &d)) GMSD_SET(proximity, d); break;
- case 8: if (parse_temperature(str, &d)) GMSD_SET(temperature, d); break;
+ case 6: if (parse_distance(str, &d)) WAYPT_SET(wpt, depth, d); break;
+ case 7: if (parse_distance(str, &d)) WAYPT_SET(wpt, proximity, d); break;
+ case 8: if (parse_temperature(str, &d)) WAYPT_SET(wpt, temperature, d); break;
case 9: if (parse_display(str, &i)) GMSD_SET(display, i); break;
case 10: break; /* skip color */
case 11:
case 12: GMSD_SETSTR(facility, str); break;
case 13: GMSD_SETSTR(city, str); break;
case 14: GMSD_SETSTR(state, str); break;
- case 15: GMSD_SETSTR(cc, gt_get_icao_cc(str, wpt->shortname)); break;
+ case 15:
+ GMSD_SETSTR(country, str);
+ GMSD_SETSTR(cc, gt_get_icao_cc(str, wpt->shortname));
+ break;
case 16: parse_date_and_time(str, &wpt->creation_time); break;
case 17: wpt->url = DUPSTR(str); break;
case 18: GMSD_SET(category, parse_categories(str)); break;
default: break;
}
}
- convert_datum(wpt, 1, NULL, NULL);
waypt_add(wpt);
}
while ((str = csv_lineparse(NULL, "\t", "", column++))) {
int field_no = header_fields[trkpt_header][column];
switch(field_no) {
- case 1: parse_position(str, wpt); break;
+ case 1: parse_coordinates(str, datum_index, grid_index,
+ &wpt->latitude, &wpt->longitude, MYNAME);
+ break;
case 2: parse_date_and_time(str, &wpt->creation_time); break;
case 3: parse_distance(str, &wpt->altitude); break;
}
}
- convert_datum(wpt, 1, NULL, NULL);
route_add_wpt(current_trk, wpt);
}
#if !ZLIB_INHIBITED
gbsize_t result = gztell(file->handle.gz);
if (file->back != -1) {
- file->back = -1;
+// file->back = -1;
result--;
}
return result;
int
gbfungetc(const int c, gbfile *file)
{
- int r = -1;
+ int res;
+
if (file->gzapi) {
#if !ZLIB_INHIBITED
- file->back = -1;
+ if (file->back == -1) {
+ file->back = c;
+ res = c;
+ }
+ else {
+ fatal(MYNAME ": Cannot store more than one byte back!\n");
+ }
#else
fatal(NO_ZLIB);
#endif
}
else {
- r = ungetc(c, file->handle.std);
+ res = ungetc(c, file->handle.std);
}
- return r;
+ return res;
}
/* GPSBabel 'file' enhancements */
* none are available.
*/
int gbser_readc(void *handle) {
- char buf;
+ unsigned char buf;
int rc;
rc = gbser_read(handle, &buf, 1);
* milliseconds for a character to be available.
*/
int gbser_readc_wait(void *handle, unsigned ms) {
- char buf;
+ unsigned char buf;
int rc;
rc = gbser_read_wait(handle, &buf, 1, ms);
h->magic = MYMAGIC;
h->vmin = h->vtime = 0;
- if (h->fd = open(port_name, O_RDWR | O_NOCTTY), h->fd == -1) {
+ if (0 == strcmp(port_name, "-")) {
+ h->fd = 0;
+ return h;
+ }
+ else if (h->fd = open(port_name, O_RDWR | O_NOCTTY), h->fd == -1) {
gbser__db(1, "Failed to open port (%s)\n", strerror(errno));
- goto failed;
- }
+ goto failed;
+ }
if (!isatty(h->fd)) {
gbser__db(1, "%s is not a TTY\n");
/* Read from the serial port until the specified |eol| character is
* found. Any character matching |discard| will be discarded. To
- * read lines terminated by 0x0A0x0D discarding linefeeds use
+ * read lines terminated by 0x0A, 0x0D discarding linefeeds use
* gbser_read_line(h, buf, len, 1000, 0x0D, 0x0A);
+ * The terminating character and any discarded characters are not
+ * stored in the buffer.
*/
-int gbser_read_line(void *handle, void *buf,
- unsigned len, unsigned ms,
- int eol, int discard) {
+int gbser_read_line(void *handle, void *buf, unsigned len, unsigned ms, int eol, int discard) {
char *bp = buf;
unsigned pos = 0;
hp_time tv;
*
* Isn't simplification via automation grand?
*/
-#define VERSION "1.3.3"
+#define VERSION "1.3.4"
#include "defs.h"
#if PDBFMTS_ENABLED
-#include "coldsync/palm.h"
-#include "coldsync/pdb.h"
+#include "pdbfile.h"
#define MYNAME "GeocachingDB"
#define MYTYPE 0x44415441 /* DATA */
struct dbfld dbfld[1];
};
-static FILE *file_in;
-static FILE *file_out;
+static pdbfile *file_in, *file_out;
static const char *out_fname;
-static struct pdb *opdb;
-static struct pdb_record *opdb_rec;
+static int ct;
static char *tbuf = NULL;
static char *tbufp = NULL;
static void
rd_init(const char *fname)
{
- file_in = xfopen(fname, "rb", MYNAME);
+ file_in = pdb_open(fname, MYNAME);
}
static void
rd_deinit(void)
{
- fclose(file_in);
+ pdb_close(file_in);
}
static void
wr_init(const char *fname)
{
- file_out = xfopen(fname, "wb", MYNAME);
+ file_out = pdb_create(fname, MYNAME);
out_fname = fname;
+ ct = 0;
}
static void
wr_deinit(void)
{
- fclose(file_out);
+ pdb_close(file_out);
if ( tbuf )
xfree(tbuf);
}
static void
data_read(void)
{
- struct pdb *pdb;
- struct pdb_record *pdb_rec;
+ pdbrec_t *pdb_rec;
- if (NULL == (pdb = pdb_Read(fileno(file_in)))) {
- fatal(MYNAME ": pdb_Read failed\n");
- }
-
- if ((pdb->creator != MYCREATOR) || (pdb->type != MYTYPE)) {
+ if ((file_in->creator != MYCREATOR) || (file_in->type != MYTYPE)) {
fatal(MYNAME ": Not a GeocachingDB file.\n");
}
- for(pdb_rec = pdb->rec_index.rec; pdb_rec; pdb_rec=pdb_rec->next) {
+ for(pdb_rec = file_in->rec_list; pdb_rec; pdb_rec=pdb_rec->next) {
waypoint *wpt = waypt_new();
struct dbrec *rec = (struct dbrec *) pdb_rec->data;
int nflds;
wpt->longitude = lon_dir * (lon_deg + lon_min/60);
waypt_add(wpt);
}
-
- free_pdb(pdb);
}
gcdb_write_wpt(const waypoint *wpt)
{
struct dbrec *rec;
- static int ct;
int reclen;
char tbuf[100];
*/
reclen = gcdb_add_to_rec(rec, NULL, 0, NULL);
- opdb_rec = new_Record(0, 2, ct++, (uword) reclen, (const ubyte *)rec);
-
- if (opdb_rec == NULL) {
- fatal(MYNAME ": libpdb couldn't create record\n");
- }
-
- if (pdb_AppendRecord(opdb, opdb_rec)) {
- fatal(MYNAME ": libpdb couldn't append record\n");
- }
-
+ pdb_write_rec(file_out, 0, 2, ct++, rec, reclen);
xfree(rec);
}
static void
data_write(void)
{
-
- if (NULL == (opdb = new_pdb())) {
- fatal (MYNAME ": new_pdb failed\n");
- }
-
- strncpy(opdb->name, out_fname, PDB_DBNAMELEN);
- strncpy(opdb->name, "GeocachingDB", PDB_DBNAMELEN);
- opdb->name[PDB_DBNAMELEN-1] = 0;
- opdb->attributes = PDB_ATTR_BACKUP;
- opdb->ctime = opdb->mtime = current_time() + 2082844800U;
- opdb->type = MYTYPE; /* CWpt */
- opdb->creator = MYCREATOR; /* cGPS */
- opdb->version = 1;
+ strncpy(file_out->name, out_fname, PDB_DBNAMELEN);
+ strncpy(file_out->name, "GeocachingDB", PDB_DBNAMELEN);
+ file_out->name[PDB_DBNAMELEN-1] = 0;
+ file_out->attr = PDB_FLAG_BACKUP;
+ file_out->ctime = file_out->mtime = current_time() + 2082844800U;
+ file_out->type = MYTYPE; /* CWpt */
+ file_out->creator = MYCREATOR; /* cGPS */
+ file_out->version = 1;
waypt_disp_all(gcdb_write_wpt);
-
- pdb_Write(opdb, fileno(file_out));
}
-/*
+/*
Garmin GPS Database Reader/Writer
- Copyright (C) 2005-2007 Olaf Klein, o.b.klein@gpsbabel.org
+ Copyright (C) 2005,2006,2007 Olaf Klein, o.b.klein@gpsbabel.org
Mainly based on mapsource.c,
Copyright (C) 2005 Robert Lipe, robertlipe@usa.net
2006/11/01: Use version of GPSBabel and date/time of gdb.c (managed by CVS) for watermark
2007/01/23: add support for GDB version 3
2007/02/07: Add special code for unknown bytes in waypoints with class GE 8 (calculated points)
+ 2007/02/15: Nearly full rewrite. Full support for GDB V3. New option roadbook.
+ 2007/05/03: Add code for tricky V3 descriptions
+ 2007/06/18: Tweak some forgotten "flagged" fields
+ 2007/07/07: Better support for new fields since V3 (postal code/street address/instruction)
*/
#include <stdio.h>
#include <time.h>
#include "defs.h"
+
+#include "cet.h"
+#include "cet_util.h"
+#include "csv_util.h"
+#include "garmin_fs.h"
#include "garmin_tables.h"
+#include "grtcirc.h"
#include "jeeps/gpsmath.h"
-#include "garmin_fs.h"
-#include "cet_util.h"
#define MYNAME "gdb"
-#undef GDB_DEBUG
+#define GDB_VER_1 1
+#define GDB_VER_2 2
+#define GDB_VER_3 3
-#define GDB_VER_MIN 1
-#define GDB_VER_MAX 2
+#define GDB_VER_UTF8 GDB_VER_3
+#define GDB_VER_MIN GDB_VER_1
+#define GDB_VER_MAX GDB_VER_3
-#define GDB_DEFAULTWPTCLASS 0
-#define GDB_HIDDENROUTEWPTCLASS 8
+#define GDB_DEF_CLASS gt_waypt_class_user_waypoint
+#define GDB_DEF_HIDDEN_CLASS gt_waypt_class_map_point
+#define GDB_DEF_ICON 18
#define GDB_NAME_BUFFERLEN 1024
-#define GDB_URL_BUFFERLEN 4096 /* Safety first */
-#define GDB_NOTES_BUFFERLEN 4096 /* (likewise) */
-#define DEFAULTICONVALUE 18
+#define GDB_DBG_WPT 1
+#define GDB_DBG_RTE 2
+#define GDB_DBG_TRK 4
-#ifdef UTF8_SUPPORT
-# define GDB_UTF8_ENABLED 1
-#else
-# define GDB_UTF8_ENABLED 0
-#endif
+#define GDB_DBG_WPTe 8
+#define GDB_DBG_RTEe 16
+#define GDB_DBG_TRKe 32
-/* %%% local vars %%% */
+#define GDB_DEBUG (GDB_DBG_WPTe) /* | GDB_DBG_RTE) */
+#undef GDB_DEBUG
+// #define GDB_DEBUG 0xff
-/* static char gdb_release[] = "$Revision: 1.48 $"; */
-static char gdb_release_date[] = "$Date: 2007/02/20 20:51:15 $";
+#define DBG(a,b) if ((GDB_DEBUG & (a)) && (b))
-static FILE *fin, *fout;
-static char *fin_name, *fout_name;
+/*******************************************************************************/
-static int gdb_ver = 1;
-static int gdb_debug = 0;
-static int gdb_via; /* 0 = read and write hidden points too; 1 = drop */
-static int gdb_category;
+/* static char gdb_release[] = "$Revision: 1.58 $"; */
+static char gdb_release_date[] = "$Date: 2007/07/14 21:06:14 $";
-static queue gdb_hidden;
-static short_handle gdb_short_handle;
+static gbfile *fin, *fout;
+static int gdb_ver, gdb_category, gdb_via, gdb_roadbook;
-#define GDB_OPT_VER "ver"
-#define GDB_OPT_VIA "via"
-#define GDB_OPT_CATEGORY "cat"
+static queue wayptq_in, wayptq_out, wayptq_in_hidden;
+static short_handle short_h;
-static char *gdb_opt_category = NULL;
-static char *gdb_opt_ver = NULL;
-static char *gdb_opt_via = NULL;
+static char *gdb_opt_category;
+static char *gdb_opt_ver;
+static char *gdb_opt_via;
+static char *gdb_opt_roadbook;
-static arglist_t gdb_args[] = {
- {GDB_OPT_CATEGORY, &gdb_opt_category,
- "Default category on output (1..16)", NULL, ARGTYPE_INT, "1", "16"},
- {GDB_OPT_VER, &gdb_opt_ver,
- "Version of gdb file to generate (1,2)", "2", ARGTYPE_INT, "1", "2"},
- {GDB_OPT_VIA, &gdb_opt_via,
- "Drop route points that do not have an equivalent waypoint (hidden points)", NULL, ARGTYPE_BOOL, ARG_NOMINMAX},
- ARG_TERMINATOR
-};
+static int waypt_flag;
+static int route_flag;
+
+static int waypt_ct; /* informational: total number of waypoints in/out */
+static int waypth_ct; /* informational: total number of hidden waypoints in/out */
+static int rtept_ct; /* informational: total number of route points in/out */
+static int trkpt_ct; /* informational: total number of track points in/out */
+static int rte_ct; /* informational: total number of routes in/out */
+static int trk_ct; /* informational: total number of tracks in/out */
-/********************************************************************************************************/
+/*******************************************************************************/
-/* %%% 1-1 functions from mapsource, should by shared!!! %%% */
+#define ELEMENTS(a) a->rte_waypt_ct
+#define NOT_EMPTY(a) (a && *a)
-static waypoint *
-gdb_find_wpt_q_by_name(const queue *whichQueue, const char *name)
+static void
+gdb_flush_waypt_queue(queue *Q)
{
queue *elem, *tmp;
- waypoint *waypointp;
- QUEUE_FOR_EACH(whichQueue, elem, tmp) {
- waypointp = (waypoint *) elem;
- if (0 == case_ignore_strcmp(waypointp->shortname, name)) {
- return waypointp;
- }
+ QUEUE_FOR_EACH(Q, elem, tmp) {
+ waypoint *wpt = (waypoint *)elem;
+ dequeue(elem);
+ if (wpt->extra_data)
+ xfree(wpt->extra_data);
+ waypt_free(wpt);
}
- return NULL;
}
-static int
-gdb_detect_rtept_class(const waypoint *wpt)
+
+#if GDB_DEBUG
+static void
+disp_summary(const gbfile *f)
{
- if (gdb_find_wpt_q_by_name((queue *)&gdb_hidden, wpt->shortname) == NULL)
- return (int)GDB_HIDDENROUTEWPTCLASS;
- else
- return (int)GDB_DEFAULTWPTCLASS;
-}
+ int i, len;
+
+ len = strlen(f->name);
+
+ warning(MYNAME ": =====================");
+ for (i = 0; i < len; i++) warning("=");
+ warning("\n" MYNAME ": %s summary for \"%s\"\n",
+ (f->mode == 'r') ? "Reader" : "Writer", f->name);
+ warning(MYNAME ": ---------------------");
+ for (i = 0; i < len; i++) warning("-");
-/* %%% local functions (read support) %%% */
+ warning("\n" MYNAME ": %d waypoint(s)\n", waypt_ct - waypth_ct);
+ warning(MYNAME ": %d hidden waypoint(s)\n", waypth_ct);
+ warning(MYNAME ": %d route(s) with total %d point(s)\n", rte_ct, rtept_ct);
+ warning(MYNAME ": %d track(s) with total %d point(s)\n", trk_ct, trkpt_ct);
+ warning(MYNAME ": ---------------------");
-#ifdef GDB_DEBUG
-static void
-gdb_print_buff(const char *buff, int count, const char *comment)
-{
- int i;
- printf(MYNAME ": dump of %s : ", comment);
- for (i = 0; i < count; i++)
- {
- printf("%02x ", buff[i] & 0xFF);
- }
- printf("\n");
- fflush(stdout);
+ for (i = 0; i < len; i++) warning("-");
+ warning("\n");
}
+#else
+#define disp_summary(a)
#endif
-static waypoint *
-gdb_create_rte_wpt(const char *name, double lat, double lon, double alt)
+/*******************************************************************************/
+/* TOOLS AND MACROS FOR THE READER */
+/*-----------------------------------------------------------------------------*/
+
+#define FREAD_C gbfgetc(fin)
+#define FREAD(a,b) gbfread(a,(b),1,fin)
+#define FREAD_i32 gbfgetint32(fin)
+#define FREAD_i16 gbfgetint16(fin)
+#define FREAD_STR(a) gdb_fread_str(a,sizeof(a),fin)
+#define FREAD_CSTR gdb_fread_cstr(fin)
+#define FREAD_DBL gbfgetdbl(fin)
+#define FREAD_LATLON GPS_Math_Semi_To_Deg(gbfgetint32(fin))
+
+#if GDB_DEBUG
+static char *
+nice(const char *str)
{
- waypoint *wpt;
+ char *res, *env;
+ cet_cs_vec_t *vec;
- wpt = find_waypt_by_name(name);
- if (wpt == NULL)
- {
- if (gdb_via != 0) return NULL;
- wpt = gdb_find_wpt_q_by_name((queue *)&gdb_hidden, name);
- }
- if (wpt != NULL)
- {
- wpt = waypt_dupe(wpt);
-// wpt->creation_time = 0; /* !!! should be removed !!! */
- }
- else
- {
- wpt = waypt_new();
- wpt->shortname = xstrdup(name);
- wpt->latitude = lat;
- wpt->longitude = lon;
- wpt->altitude = alt;
- wpt->depth = unknown_alt;
+ if (!(str && *str)) return "";
+
+ env = getenv("LANG");
+ if (env == NULL) return (char *)str;
+
+ if ((res = strchr(env, '.'))) env = ++res;
+ vec = cet_find_cs_by_name(env);
+
+ if ((vec != NULL) && (vec != global_opts.charset)) {
+ static char buf[128];
+ res = cet_str_any_to_any(str, global_opts.charset, vec);
+ strncpy(buf, res, sizeof(buf));
+ xfree(res);
+ return buf;
}
- return wpt;
+ else return (char *)str;
}
+#endif
-static size_t
-gdb_fread(void *target, size_t size)
+static char *
+gdb_fread_cstr(gbfile *fin)
{
- size_t result;
-
- result = fread(target, 1, size, fin);
- if (result < size)
- {
- if (feof(fin) != 0)
- fatal(MYNAME ": unexpected end of file \"%s\"!\n", fin_name);
- else
- fatal(MYNAME ": I/O error occured during read from \"%s\"!\n", fin_name);
+ char *result = gbfgetcstr(fin);
+
+ if (result && (*result == '\0')) {
+ xfree(result);
+ result = NULL;
}
return result;
}
static int
-gdb_fread_str(char *dest, size_t maxlen)
+gdb_fread_str(char *buf, int size, gbfile *fin)
{
- int c;
+ char c;
int res = 0;
- while (maxlen-- > 0)
- {
- c = fgetc(fin);
- if ( c != EOF )
- {
- if (c < 0)
- fatal(MYNAME ": I/O error (%d) while read from \"%s\"!\n", +c, fin_name);
- *dest++ = c;
- if ( c == 0 ) return res;
+ while (size--) {
+ gbfread(&c, 1, 1, fin);
+ buf[res] = c;
+ if (c == '\0') return res;
res++;
- }
- else
- {
- *dest++ = '\0';
- return res;
- }
}
- fatal(MYNAME ": local buffer overflow detected, please report!\n");
- return 0;
+ buf[res] = '\0';
+ return res;
}
-static int
-gdb_fread_le(void *dest, size_t size, const unsigned int bit_count, const char *prefix, const char *field)
+static char *
+gdb_fread_strlist(void)
{
- char buff[32];
- unsigned char *c = dest;
- short *sh = dest;
- int *li = dest;
- double *db = dest;
+ char *res = NULL;
+ int count;
- if ((bit_count >> 3) != size)
- fatal(MYNAME "%s: Internal error (gdb_le_read/%d/%d/%s)!\n", prefix, (int)size, bit_count >> 3, field);
-
- switch(bit_count)
- {
- case 8:
- gdb_fread(c, sizeof(*c));
- if (gdb_debug)
- printf(MYNAME "%s: gdb_fread_le : %d -> %s (0x%x))\n", prefix, *c, field, *c);
- return *c;
- case 16:
- if (sizeof(*sh) != size) fatal(MYNAME ": internal decl.!\n");
- gdb_fread(sh, sizeof(*sh));
- *sh = le_read16(sh);
- if (gdb_debug)
- printf(MYNAME "%s: gdb_fread_le : %d -> %s (0x%x))\n", prefix, *sh, field, *sh);
- return *sh;
- case 32:
- gdb_fread(li, 4);
- *li = le_read32(li);
- if (gdb_debug)
- printf(MYNAME "%s: gdb_fread_le : %d -> %s (0x%x)\n", prefix, *li, field, *li);
- return *li;
- case 64:
- gdb_fread(buff, sizeof(*db));
- le_read64(db, buff);
- if (gdb_debug)
- printf(MYNAME "%s: gdb_fread_le : %g -> %s\n", prefix, *db, field);
- return 0;
- default:
- fatal(MYNAME "%s: unsupported bit count (%d) in gdb_le_read!\n", prefix, bit_count);
+ count = FREAD_i32;
+
+ while (count > 0) {
+ char *str = FREAD_CSTR;
+ if (str != NULL) {
+ if (*str && (res == NULL)) res = str;
+ else xfree(str);
+ }
+ count--;
+ }
+
+ return res;
+}
+
+static waypoint *
+gdb_find_wayptq(const queue *Q, const waypoint *wpt, const char exact)
+{
+ queue *elem, *tmp;
+ const char *name = wpt->shortname;
+
+ QUEUE_FOR_EACH(Q, elem, tmp) {
+ waypoint *tmp = (waypoint *)elem;
+ if (case_ignore_strcmp(name, tmp->shortname) == 0) {
+
+ if (! exact) return tmp;
+
+ if ((tmp->latitude == wpt->latitude) &&
+ (tmp->longitude == wpt->longitude))
+ return tmp;
+ }
}
- return 0;
+ return NULL;
}
-static int
-gdb_fread_flag(const char value) /* read one byte and compare to value */
+static waypoint *
+gdb_reader_find_waypt(const waypoint *wpt, const char exact)
{
- char c;
+ waypoint *res;
+ res = gdb_find_wayptq(&wayptq_in, wpt, exact);
+ if (res == NULL)
+ res = gdb_find_wayptq(&wayptq_in_hidden, wpt, exact);
+ return res;
+}
+
+static waypoint *
+gdb_add_route_waypt(route_head *rte, waypoint *ref, const int wpt_class)
+{
+ waypoint *tmp, *res;
+ int turn_point;
+
+ tmp = gdb_reader_find_waypt(ref, 1);
+ if (tmp == NULL) {
+ double dist;
+
+ tmp = find_waypt_by_name(ref->shortname);
+ if (tmp == NULL) {
+ route_add_wpt(rte, ref);
+ return ref;
+ }
+
+ /* At this point we have found a waypoint with same name,
+ but probably from another data stream. Check coordinates!
+ */
+ dist = radtometers(gcdist(
+ RAD(ref->latitude), RAD(ref->longitude),
+ RAD(tmp->latitude), RAD(tmp->longitude)));
+
+ if (fabs(dist) > 100) {
+ warning(MYNAME ": Route point mismatch!\n");
+ warning(MYNAME ": \"%s\" from waypoints differs to \"%s\"\n",
+ tmp->shortname, ref->shortname);
+ fatal(MYNAME ": from route table by more than %0.1f meters!\n",
+ dist);
+
+ }
+ }
+ res = NULL;
+ turn_point = (gdb_roadbook && (wpt_class > gt_waypt_class_map_point) && tmp->description);
+ if (turn_point || (gdb_via == 0) || (wpt_class < gt_waypt_class_map_point)) {
+ res = waypt_dupe(tmp);
+ route_add_wpt(rte, res);
+ }
+ waypt_free(ref);
+ return res;
+}
+
+/*******************************************************************************/
+/* TOOLS AND MACROS FOR THE WRITER */
+/*-----------------------------------------------------------------------------*/
- gdb_fread(&c, 1);
- return (c == value);
+#define FWRITE_CSTR(a) ((a) == NULL) ? gbfputc(0,fout) : gbfputcstr((a),fout)
+#define FWRITE_i16(a) gbfputint16((a),fout)
+#define FWRITE_i32(a) gbfputint32((a),fout)
+#define FWRITE(a, b) gbfwrite(a,(b),1,fout)
+#define FWRITE_C(a) gbfputc((a),fout)
+#define FWRITE_DBL(a,b) gdb_write_dbl((a),(b))
+#define FWRITE_TIME(a) gdb_write_time((a))
+#define FWRITE_CSTR_LIST(a) gdb_write_cstr_list((a))
+#define FWRITE_LATLON(a) gbfputint32(GPS_Math_Deg_To_Semi((a)),fout)
+
+static void
+gdb_write_cstr_list(const char *str)
+{
+ if NOT_EMPTY(str) {
+ gbfputint32(1, fout);
+ gbfputcstr(str, fout);
+ } else
+ gbfputint32(0, fout);
}
static void
-gdb_is_valid(int is, const char *prefix, const char *comment)
+gdb_write_dbl(const double value, const double def)
{
- if (is == 0)
- {
- printf(MYNAME ": Reading database \"%s\"\n", fin_name);
- fatal(MYNAME "-%s: Found error in data (%s)!\n", prefix, comment);
+ if (value == def) gbfputc(0, fout);
+ else {
+ gbfputc(1, fout);
+ gbfputdbl(value, fout);
}
}
static void
-gdb_is_validf(int is, const char *prefix, const char *format, ...)
+gdb_write_time(const int time)
{
- va_list args;
-
- if (is != 0) return;
-
- va_start(args, format);
- if (fin_name != NULL)
- printf(MYNAME "-%s: Reading from database \"%s\"\n", prefix, fin_name);
+ if (time > 0) {
+ gbfputc(1, fout);
+ gbfputint32(time, fout);
+ }
else
- printf(MYNAME "-%s: Writing to database \"%s\"\n", prefix, fout_name);
- printf(MYNAME "-%s: ", prefix);
- vprintf(format, args);
- va_end(args);
-
- fatal("\n");
+ gbfputc(0, fout);
}
-/********************************************************************************************************/
-/* %%% read file header */
-/********************************************************************************************************/
+/*******************************************************************************/
+/* GDB "Garmin Database" READER CODE */
+/*-----------------------------------------------------------------------------*/
static void
-gdb_read_file_header(void)
+read_file_header(void)
{
- char buff[128];
+ char buf[128];
int i, reclen;
-
- const char *prefix = "read_head";
+
/*
- We starts with standard binary read.
- A gdb_fread_str works too, but if we get a wrong file as input,
+ We are beginning with a simple binary read.
+*/
+ FREAD(buf, 6);
+/*
+ A "gbfgetcstr" (FREAD_CSTR) works too, but if we get a wrong file as input,
the file validation my be comes too late. For example a XML base file normally
has no binary zeros inside and produce, if big enought, a buffer overflow.
The following message "local buffer overflow detected..." could be
misinterpreted.
*/
-
- if (6 != fread(buff, 1, 6, fin))
- fatal(MYNAME ": Invalid file \"%s\"!\n", fin_name);
+ is_fatal(strcmp(buf, "MsRcf") != 0, MYNAME ": Invalid file \"%s\"!", fin->name);
- if (strcmp(buff, "MsRcf") != 0)
- fatal(MYNAME ": Invalid file \"%s\"!\n", fin_name);
-
- gdb_fread(&reclen, 4);
- reclen = le_read32(&reclen);
-
- gdb_is_valid(reclen == gdb_fread_str(buff, sizeof(buff)), prefix, "Invalid record length");
- if (buff[0] != 'D')
- fatal(MYNAME ": Invalid file \"%s\"!\n", fin_name);
+ reclen = FREAD_i32;
+ i = FREAD_STR(buf);
+ is_fatal(buf[0] != 'D', MYNAME ": Invalid file \"%s\"!", fin->name);
- switch(buff[1])
- {
- case 'k':
- gdb_ver = 1;
- break;
- case 'l':
- gdb_ver = 2;
- break;
- case 'm':
- gdb_ver = 3;
- break;
- default:
- fatal(MYNAME ": Non supported GDB version!\n");
- }
+ gdb_ver = buf[1] - 'k' + 1;
+ is_fatal((gdb_ver < GDB_VER_MIN) || (gdb_ver > GDB_VER_MAX),
+ MYNAME ": Unknown or/and unsupported GDB version (%d.0)!", gdb_ver);
if (global_opts.verbose_status > 0)
- printf(MYNAME ": Found Garmin GPS Database version %d.0\n", gdb_ver);
-
- gdb_fread(&reclen, 4);
- reclen = le_read32(&reclen);
- gdb_is_valid(reclen < (int)sizeof(buff), prefix, "Invalid record length");
- gdb_fread(buff, reclen);
-
- gdb_is_valid(0 == gdb_fread_str(buff, sizeof(buff)), prefix, "header");
-
- i = gdb_fread_str(buff, sizeof(buff));
- gdb_is_valid((i == 9) && (strcmp(buff, "MapSource") == 0), prefix, "MapSource magic");
+ printf(MYNAME ": Reading Garmin GPS Database version %d.0\n", gdb_ver);
+
+ reclen = FREAD_i32;
+ i = FREAD(buf, reclen + 1);
+ if (global_opts.verbose_status > 0) {
+ char *name = buf+2;
+ if (strstr(name, "SQA") == 0) name = "MapSource";
+ else if (strstr(name, "neaderhi") == 0) name = "MapSource BETA";
+ warning(MYNAME ": File created with \"%s\"\n", name);
+ }
+
+ i = FREAD_STR(buf);
+ is_fatal((i != 9) || (strcmp(buf, "MapSource") != 0), "Invalid header!");
}
-/********************************************************************************************************/
-/* %%% read waypoint */
-/********************************************************************************************************/
+/*-----------------------------------------------------------------------------*/
static waypoint *
-gdb_read_wpt(const size_t fileofs, int *wptclass)
+read_waypoint(gt_waypt_classes_e *waypt_class_out)
{
- char xname[GDB_NAME_BUFFERLEN];
- char xnotes[GDB_NOTES_BUFFERLEN];
- char xurl[GDB_URL_BUFFERLEN];
- int xclass;
- int xlat, xlon, xdisplay, xcolour, xicon, xtime, dynamic;
- short xcat;
- double xdepth = unknown_alt;
- double xalt = unknown_alt;
- double xproximity = unknown_alt;
- double xtemp;
+ char buf[128]; /* used for temporary stuff */
+ int wpt_class, display, icon, dynamic;
+ int i;
waypoint *res;
- char buff[128];
- size_t pos, delta;
- garmin_fs_t *gmsd = NULL;
-
- const char *prefix = "wpt_read";
-
+ garmin_fs_t *gmsd;
+ char *str;
+#ifdef GMSD_EXPERIMENTAL
+ char subclass[22];
+#endif
+#if GDB_DEBUG
+ char *sn;
+#endif
+ waypt_ct++;
res = waypt_new();
-
+
gmsd = garmin_fs_alloc(-1);
fs_chain_add(&res->fs, (format_specific_data *) gmsd);
-
-/********************************************************************************************************/
-/* record structure
-
- zstring name
- dword class
- zstring country
- 4 * 0x00 subclass part 1
- 12 * 0xFF subclass part 2
- 2 * 0x00 subclass part 3
- 4 * 0xFF unknown
- dword latitude
- dword longitude
- if (1) +8 altitude = (1 or 9)
- zstring comment
- dword display flag
- dword display colour
- dword icon
- zstring city ?
- zstring state ?
- zstring facility ?
- char unknown ?
- double depth (if flag)
- zstring url
- word category -> offset 79
- double temp (if flag)
- */
-/********************************************************************************************************/
-
- gdb_is_valid(gdb_fread_str(xname, sizeof(xname)) > 0, prefix, "new waypoint");
- res->shortname = xstrdup(xname);
-
- gdb_fread_le(&xclass, sizeof(xclass), 32, prefix, "class");
- GMSD_SET(wpt_class, xclass);
-
- gdb_fread_str(buff, sizeof(buff)); /* country code */
- GMSD_SETSTR(cc, buff);
-
- gdb_fread(buff, 22);
- xlat = gdb_fread_le(&xlat, sizeof(xlat), 32, prefix, "latitude");
- xlon = gdb_fread_le(&xlon, sizeof(xlon), 32, prefix, "longitude");
-
- if (gdb_fread_flag(1)) { /* altitude flag */
- gdb_fread_le(&xalt, sizeof(xalt), 64, prefix, "altitude");
- if (xalt > 1.0e24)
- xalt = unknown_alt;
+
+ res->shortname = FREAD_CSTR;
+#if GDB_DEBUG
+ sn = xstrdup(nice(res->shortname));
+#endif
+ wpt_class = FREAD_i32;
+ GMSD_SET(wpt_class, wpt_class);
+ if (wpt_class != 0) waypth_ct++;
+
+ FREAD_STR(buf); /* Country code */
+ GMSD_SETSTR(cc, buf);
+
+#ifdef GMSD_EXPERIMENTAL
+ FREAD(subclass, sizeof(subclass));
+ if (gmsd && (wpt_class >= gt_waypt_class_map_point)) {
+ memcpy(gmsd->subclass, subclass, sizeof(gmsd->subclass));
+ gmsd->flags.subclass = 1;
}
-
- gdb_fread_str(xnotes, sizeof(xnotes)); /* notes */
-
- if (gdb_fread_flag(1)) { /* proximity flag */
- gdb_fread_le(&xproximity, sizeof(xproximity), 64, prefix, "proximity");
- GMSD_SET(proximity, xproximity);
+#else
+ FREAD(buf, 22);
+#endif
+ res->latitude = FREAD_LATLON;
+ res->longitude = FREAD_LATLON;
+
+ if (FREAD_C == 1) {
+ double alt = FREAD_DBL;
+ if (alt < 1.0e24) {
+ res->altitude = alt;
+#if GDB_DEBUG
+ DBG(GDB_DBG_WPTe, 1)
+ printf(MYNAME "-wpt \"%s\" (%d): Altitude = %.1f\n",
+ sn, wpt_class, alt);
+#endif
+ }
}
-
- xdisplay = gdb_fread_le(&xdisplay, sizeof(xdisplay), 32, prefix, "display");
- switch(xdisplay) {
- case gt_gdb_display_mode_symbol:
- xdisplay = gt_display_mode_symbol;
- break;
+#if GDB_DEBUG
+ DBG(GDB_DBG_WPT, 1)
+ printf(MYNAME "-wpt \"%s\": coordinates = %c%0.6f %c%0.6f\n",
+ sn,
+ res->latitude < 0 ? 'S' : 'N', res->latitude,
+ res->longitude < 0 ? 'W' : 'E', res->longitude);
+#endif
+ res->notes = FREAD_CSTR;
+#if GDB_DEBUG
+ DBG(GDB_DBG_WPTe, res->notes) {
+ char *str = gstrsub(res->notes, "\r\n", ", ");
+ printf(MYNAME "-wpt \"%s\" (%d): notes = %s\n",
+ sn, wpt_class, nice(str));
+ xfree(str);
+ }
+#endif
+ if (FREAD_C == 1) {
+ WAYPT_SET(res, proximity, FREAD_DBL);
+#if GDB_DEBUG
+ DBG(GDB_DBG_WPTe, 1)
+ printf(MYNAME "-wpt \"%s\" (%d): Proximity = %.1f\n",
+ sn, wpt_class, res->proximity / 1000);
+#endif
+ }
+ i = FREAD_i32;
+#if GDB_DEBUG
+ DBG(GDB_DBG_WPTe, i)
+ printf(MYNAME "-wpt \"%s\" (%d): display = %d\n",
+ sn, wpt_class, i);
+#endif
+ switch(i) { /* display value */
+ case gt_gdb_display_mode_symbol:
+ display = gt_display_mode_symbol; break;
case gt_gdb_display_mode_symbol_and_comment:
- xdisplay = gt_display_mode_symbol_and_comment;
- break;
- default: /* gt_gdb_display_mode_symbol_and_name and others */
- xdisplay = gt_display_mode_symbol_and_name;
- break;
+ display = gt_display_mode_symbol_and_comment; break;
+ default:
+ display = gt_display_mode_symbol_and_name; break;
+ }
+ GMSD_SET(display, display);
+
+ FREAD_i32; /* color/colour !not implemented! */
+ icon = FREAD_i32;
+ GMSD_SET(icon, icon); /* icon */
+ FREAD_STR(buf); /* city */
+ GMSD_SETSTR(city, buf);
+ FREAD_STR(buf); /* state */
+ GMSD_SETSTR(state, buf);
+ FREAD_STR(buf); /* facility */
+ GMSD_SETSTR(facility, buf);
+
+ FREAD(buf, 1);
+
+ if (FREAD_C == 1) {
+ WAYPT_SET(res, depth, FREAD_DBL);
+#if GDB_DEBUG
+ DBG(GDB_DBG_WPTe, 1)
+ printf(MYNAME "-wpt \"%s\" (%d): Depth = %.1f\n",
+ sn, wpt_class, res->depth);
+#endif
}
- GMSD_SET(display, xdisplay);
-
- xcolour = gdb_fread_le(&xcolour, sizeof(xcolour), 32, prefix, "colour");
-
- xicon = gdb_fread_le(&xicon, sizeof(xicon), 32, prefix, "icon");
- GMSD_SET(icon, xicon);
- gdb_fread_str(buff, sizeof(buff)); /* city */
- GMSD_SETSTR(city, buff);
+ /* VERSION DEPENDENT CODE */
- gdb_fread_str(buff, sizeof(buff)); /* state */
- GMSD_SETSTR(state, buff);
-
- gdb_fread_str(buff, sizeof(buff)); /* facility */
- GMSD_SETSTR(facility, buff);
-
- gdb_fread(buff, 1); /* unknown */
-
- if (gdb_fread_flag(1)) { /* depth flag */
- gdb_fread_le(&xdepth, sizeof(xdepth), 64, prefix, "depth");
- GMSD_SET(depth, xdepth);
+ if (gdb_ver <= GDB_VER_2) {
+ char *temp;
+
+ FREAD(buf, 2); /* ?????????????????????????????????? */
+ waypt_flag = FREAD_C;
+ if (waypt_flag == 0)
+ FREAD(buf, 3);
+ else
+ FREAD(buf, 2);
+
+ temp = FREAD_CSTR; /* undocumented & unused string */
+#if GDB_DEBUG
+ DBG(GDB_DBG_WPTe, temp)
+ printf(MYNAME "-wpt \"%s\" (%d): Unknown string = %s\n",
+ sn, wpt_class, nice(temp));
+#endif
+ if (temp) xfree(temp);
+
+ res->url = FREAD_CSTR;
+ if (wpt_class != 0) {
+ res->description = res->url;
+ res->url = NULL;
+ }
}
-
- if (gdb_ver >= 3) {
- int url_ct, unkn;
- char *url = NULL;
-
- unkn = gdb_fread_le(&unkn, sizeof(unkn), 32, prefix, "unknown dword(x) since v3");
- gdb_fread(buff, 2);
-
- gdb_fread_str(xurl, sizeof(xurl)); /* what dagmar will say */
-
- url_ct = gdb_fread_le(&url_ct, sizeof(url_ct), 32, prefix, "number of urls (since v3)");
- gdb_is_valid((url_ct >= 0), prefix, "Number of urls (since v3)");
-
- while (url_ct > 0) {
- url_ct--;
- gdb_fread_str(xurl, sizeof(xurl)); /* URL list */
- if ((url == NULL) && (xurl[0] != '\0'))
- url = xstrdup(xurl); /* keep only the first valid entry */
- }
- if (url != NULL) {
- strncpy(xurl, url, sizeof(xurl));
- xfree(url);
- }
+ else { // if (gdb_ver >= GDB_VER_3)
+ int i, url_ct;
+
+ waypt_flag = 0;
+
+ FREAD_STR(buf); /* street address */
+ GMSD_SETSTR(addr, buf);
+
+ FREAD(buf, 5); /* instruction depended */
+ res->description = FREAD_CSTR; /* instruction */
+
+ url_ct = FREAD_i32;
+ for (i = url_ct; (i); i--) {
+ char *str = FREAD_CSTR;
+ if (str && *str) {
+ waypt_add_url(res, str, NULL);
+#if GDB_DEBUG
+ DBG(GDB_DBG_WPTe, 1)
+ printf(MYNAME "-wpt \"%s\" (%d): url(%d) = %s\n",
+ sn, wpt_class, url_ct - i, str);
+#endif
+ }
+ }
}
- else { /* gdb_ver <= 2 */
- gdb_fread(buff, 2);
- if (gdb_fread_flag(0))
- gdb_fread(buff, 3);
- else
- gdb_fread(buff, 2);
+#if GDB_DEBUG
+ DBG(GDB_DBG_WPTe, res->description)
+ printf(MYNAME "-wpt \"%s\" (%d): description = %s\n",
+ sn, wpt_class, nice(res->description));
+ DBG(GDB_DBG_WPTe, res->url)
+ printf(MYNAME "-wpt \"%s\" (%d): url = %s\n",
+ sn, wpt_class, nice(res->url));
+#endif
+ i = FREAD_i16;
+ if (i != 0) GMSD_SET(category, i);
+#if GDB_DEBUG
+ DBG(GDB_DBG_WPTe, i)
+ printf(MYNAME "-wpt \"%s\" (%d): category = %d\n",
+ sn, wpt_class, i);
+#endif
- do /* undocumented & unused string */
- {
- gdb_fread(buff, 1);
- }
- while (buff[0] != 0);
+ if (FREAD_C == 1) {
+ WAYPT_SET(res, temperature, FREAD_DBL);
+#if GDB_DEBUG
+ DBG(GDB_DBG_WPTe, 1)
+ printf(MYNAME "-wpt \"%s\" (%d): temperature = %.1f\n",
+ sn, wpt_class, res->temperature);
+#endif
+ }
- gdb_fread_str(xurl, sizeof(xurl)); /* URL */
+ /* VERSION DEPENDENT CODE */
+ if (gdb_ver <= GDB_VER_2) {
+ if (waypt_flag != 0) FREAD(buf, 1);
}
-
- xcat = gdb_fread_le(&xcat, sizeof(xcat), 16, prefix, "category");
- if (xcat != 0) GMSD_SET(category, xcat);
-
- if (gdb_fread_flag(1)) { /* temperature flag */
- gdb_fread_le(&xtemp, sizeof(xtemp), 64, prefix, "temperature");
- GMSD_SET(temperature, xtemp);
+ if (FREAD_C == 1) {
+ res->creation_time = FREAD_i32;
}
- pos = ftell(fin);
- delta = fileofs - pos;
- gdb_is_valid((delta > 0), prefix, "waypoint final");
-
- if (gdb_ver >= 3) {
- delta--;
- if (gdb_fread_flag(1)) {
- gdb_is_valid((delta >= 4), prefix, "No waypoint time (v3++)");
- gdb_fread_le(&xtime, sizeof(xtime), 32, prefix, "time");
- gdb_is_valid((xtime > 0), prefix, "Invalid time (v3++)");
- delta-=sizeof(xtime);
- }
- else
- xtime = 0;
- if (delta > 0) { /* skip over trailing unknown bytes */
- gdb_is_valid((delta <= sizeof(buff)), prefix, "Waypoint structure V3");
- gdb_fread(buff, delta);
- }
- }
- else { /* gdb_ver <= 2 */
-
- /* Here comes 1 .. 6 unknown bytes
- !!! 6 only if class > 0 !!!
- the field seems to be a time stamp */
-
- if ((delta & 1) == 0) {
- delta--;
- gdb_fread(buff, 1);
- if (buff[0] != '\0')
- warning(MYNAME ": Invalid byte (0x%02x) at EOW'.\n", (unsigned char)buff[0]);
- }
-
- xtime = 0;
-
- delta--;
- if (gdb_fread_flag(1)) {
- gdb_is_valid((delta == 4), prefix, "Waypoint time");
- gdb_fread_le(&xtime, sizeof(xtime), 32, prefix, "time");
- }
- else if (delta > 0) {
- gdb_is_valid((delta <= sizeof(buff)), prefix, "Waypoint structure");
- gdb_fread(buff, delta);
- if (xclass < gt_waypt_class_map_point) {
- warning(MYNAME ": Unhandled EOW. Please report!\n");
- fatal(MYNAME ": [class is 0x%02xh, %d bytes left, gdb version %d]\n",
- xclass, (int)delta, gdb_ver);
+ /* VERSION DEPENDENT CODE */
+ if (gdb_ver >= GDB_VER_3) {
+ if (FREAD_i32 == 1) {
+ FREAD_STR(buf); /* phone number */
+ GMSD_SETSTR(phone_nr, buf);
+ FREAD_STR(buf); /* ?? fax / mobile ?? */
}
- }
+ FREAD_STR(buf); /* country */
+ GMSD_SETSTR(country, buf);
+ FREAD_STR(buf); /* postal code */
+ GMSD_SETSTR(postal_code, buf);
}
- *wptclass = xclass;
-
- if (xurl[0] != '\0')
- {
- if (xclass == 0)
- res->url = xstrdup(xurl);
- else
- res->description = xstrdup(xurl);
- }
- if (xnotes[0] != '\0') res->notes = xstrdup(xnotes);
- res->latitude = GPS_Math_Semi_To_Deg(xlat);
- res->longitude = GPS_Math_Semi_To_Deg(xlon);
- res->altitude = xalt;
- res->creation_time = xtime;
-
- /* might need to change this to handle version dependent icon handling */
- res->icon_descr = gt_find_desc_from_icon_number(xicon, GDB, &dynamic);
+ res->icon_descr = gt_find_desc_from_icon_number(icon, GDB, &dynamic);
res->wpt_flags.icon_descr_is_dynamic = dynamic;
- gdb_is_validf(fabs(res->latitude) <= 90.0, prefix, "%s has invalid latitude (%f)",
- res->shortname, res->latitude);
+#if GDB_DEBUG
+ DBG(GDB_DBG_WPTe, icon != GDB_DEF_ICON)
+ printf(MYNAME "-wpt \"%s\" (%d): icon = \"%s\" (MapSource symbol %d)\n",
+ sn, wpt_class, nice(res->icon_descr), icon);
+#endif
+ if ((str = GMSD_GET(cc, NULL))) {
+ if (! GMSD_HAS(country))
+ GMSD_SETSTR(country, gt_get_icao_country(str));
+ }
+ if (gdb_roadbook && (wpt_class > gt_waypt_class_map_point) && res->description) {
+ wpt_class = gt_waypt_class_user_waypoint;
+ GMSD_SET(wpt_class, wpt_class);
+#ifdef GMSD_EXPERIMENTAL
+ GMSD_UNSET(subclass);
+#endif
+ }
+#if GDB_DEBUG
+ xfree(sn);
+#endif
+ *waypt_class_out = wpt_class;
return res;
}
-/********************************************************************************************************/
-/* %%% read route */
-/********************************************************************************************************/
+/*-----------------------------------------------------------------------------*/
static route_head *
-gdb_read_route(void)
+read_route(void)
{
- char xname[GDB_NAME_BUFFERLEN];
- char xwptname[GDB_NAME_BUFFERLEN];
- int xclass;
- double xalt;
- double xlat = 0; /* compiler warnings */
- double xlon = 0; /* compiler warnings */
-
- char buff[256];
- int count, origin;
- int isteps;
- int semilat, semilon;
- int maxlat, maxlon, minlon, minlat;
- char auto_name;
-
- route_head *route;
- waypoint *wpt;
-
- const char prefix[] = "rte_read_head";
- const char prefix1[] = "rte_read_loop";
- const char prefix2[] = "rte_ils_loop";
- const char prefix3[] = "rte_read_final";
+ route_head *rte;
+ int points, warnings, links, i;
+ char buf[128];
+ bounds bounds;
- gdb_is_valid(gdb_fread_str(xname, sizeof(xname)) > 0, prefix, "Route has no name");
-
- gdb_fread_le(&auto_name, sizeof(auto_name), 8, prefix, "auto name");
- if (gdb_fread_flag(0)) /* max. data flag */
- {
- gdb_fread_le(buff, 4, 32, prefix, "max. latitude");
- gdb_fread_le(buff, 4, 32, prefix, "max. longitude");
-
- gdb_fread(buff, 1);
- if (buff[0] == 1) gdb_fread_le(buff, 8, 64, prefix, "max. altitude");
-
- gdb_fread_le(buff, 4, 32, prefix, "min. latitude");
- gdb_fread_le(buff, 4, 32, prefix, "min. longitude");
+ rte_ct++;
+ warnings = 0;
- gdb_fread(buff, 1);
- if (buff[0] == 1)
- gdb_fread_le(buff, 8, 64, prefix, "min. altitude");
+ rte = route_head_alloc();
+ rte->rte_name = FREAD_CSTR;
+ FREAD(buf, 1); /* display/autoname - 1 byte */
+
+ if (FREAD_C == 0) { /* max. data flag */
+ /* maxlat = */ (void) FREAD_i32;
+ /* maxlon = */ (void) FREAD_i32;
+ if (FREAD_C == 1) /* maxalt = */ FREAD_DBL;
+ /* minlat = */ (void) FREAD_i32;
+ /* minlon = */ (void) FREAD_i32;
+ if (FREAD_C == 1) /* minalt = */ FREAD_DBL;
}
-
- gdb_fread_le(&count, sizeof(count), 32, prefix, "count");
-
- if (count == 0)
- fatal(MYNAME "%s: !!! Empty routes are not allowed !!!\n", prefix);
-
- route = route_head_alloc();
- route->rte_name = xstrdup(xname);
- route_add_head(route);
-
- origin = count;
- while (count--)
- {
- garmin_fs_t *gmsd = NULL;
- garmin_ilink_t *anchor;
-
- gdb_fread_str(xwptname, sizeof(xwptname)); /* waypoint name */
+ links = 0;
+ points = FREAD_i32;
- gdb_fread_le(&xclass, sizeof(xclass), 32, prefix1, "class"); /* class */
- gdb_fread_str(buff, sizeof(buff)); /* country */
-
- gdb_fread(buff, 22); /* sub class data */
- gdb_fread(buff, 1);
- if (buff[0] != 0) { /* 0x00 or 0xFF */
- gdb_fread(buff, 8); /* unknown 8 bytes */
-#ifdef GDB_DEBUG
- gdb_print_buff(buff, 8, "Unknown bytes within rte_reed_loop");
+#if GDB_DEBUG
+ DBG(GDB_DBG_RTE, 1)
+ printf(MYNAME "-rte \"%s\": loading route with %d point(s)...\n",
+ nice(rte->rte_name), points);
#endif
- if (gdb_ver >= 3)
- gdb_fread(buff, 8); /* a second block of unknown bytes */
- }
- /* The next thing is the unknown 0x03 0x00 .. 0x00 (18 bytes) */
- /* OK: this should be, but i've seen exceptions (...cannot verify the first byte */
- gdb_fread(buff, 18);
+ for (i = 0; i < points; i++) {
+ int wpt_class, j;
+ char buf[128];
+ garmin_ilink_t *il_root, *il_anchor;
- gdb_fread_le(&isteps, sizeof(isteps), 32, prefix1, "interlink steps");
-
- if (isteps <= 0) /* ??? end of route or error ??? */
- {
- gdb_is_valid(count == 0, prefix3, "Zero interlink steps within route");
-
- gdb_fread(buff, 1);
- gdb_is_valid((buff[0] == 1), prefix3, "last seq.(1)");
+ waypoint *wpt;
- if (gdb_ver >= 2)
- gdb_fread(buff, 8); /* Unknown 8 bytes since gdb v2 */
+ wpt = waypt_new();
+ rtept_ct++;
+
+ wpt->shortname = FREAD_CSTR; /* shortname */
+ wpt_class = FREAD_i32; /* waypoint class */
+ FREAD_STR(buf); /* country code */
+ FREAD(buf, 18 + 4); /* subclass part 1-3 / unknown */
+
+ if (FREAD_C != 0) {
+ FREAD(buf, 8); /* aviation data (?); only seen with class "1" (Airport) */
+ /* VERSION DEPENDENT CODE */
+ if (gdb_ver >= GDB_VER_3)
+ FREAD(buf, 8); /* a second block since V3 */
+ }
- gdb_fread_str(xname, sizeof(xname));
- if (xname[0] != 0)
- route->rte_url = xstrdup(xname);
+ FREAD(buf, 18); /* unknown 18 bytes; but first should be 0x01 or 0x03 */
+ if ((buf[0] != 0x01) && (buf[0] != 0x03)) {
+ int i;
+
+ warnings++;
+ if (warnings > 3)
+ fatal(MYNAME "-rte_pt \"%s\": too many warnings!\n", wpt->shortname);
+ warning(MYNAME "-rte_pt \"%s\" (class %d): possible error in route.\n", wpt->shortname, wpt_class);
+ warning(MYNAME "-rte_pt (dump):");
+ for (i = 0; i < 18; i++) {
+ warning(" %02x", (unsigned char)buf[i]);
+ }
+ warning("\n");
+ }
- if (gdb_ver >= 3) {
-
- int url_ct, unkn;
-
- gdb_fread(buff, 1); /* Unknown byte since gdb v3 */
- gdb_fread_le(&url_ct, sizeof(url_ct), 32, prefix3, "number of urls (since v3)");
- while (url_ct > 0) {
- url_ct--;
- gdb_fread_str(xname, sizeof(xname));
- if (route->rte_url == NULL)
- route->rte_url = xstrdup(xname);
- }
- gdb_fread_le(&unkn, sizeof(unkn), 32, prefix3, "unknown dword (since v3)");
- gdb_fread(buff, 1); /* Unknown byte since gdb v3 */
- gdb_fread_str(xname, sizeof(xname)); /* multi-line notes */
- if (xname[0] != '\0')
- route->rte_desc = xstrdup(xname);
+ links = FREAD_i32;
+ il_anchor = NULL;
+ il_root = NULL;
+#if GDB_DEBUG
+ DBG(GDB_DBG_RTE, links)
+ printf(MYNAME "-rte_pt \"%s\" (%d): %d interlink step(s)\n",
+ nice(wpt->shortname), wpt_class, links);
+#endif
+ for (j = 0; j < links; j++) {
+ garmin_ilink_t *il_step = xmalloc(sizeof(*il_step));
+
+ il_step->ref_count = 1;
+
+ il_step->lat = FREAD_LATLON;
+ il_step->lon = FREAD_LATLON;
+ if (FREAD_C == 1) il_step->alt = FREAD_DBL;
+ else il_step->alt = unknown_alt;
+
+ if (j == 0) {
+ wpt->latitude = il_step->lat;
+ wpt->longitude = il_step->lon;
+ wpt->altitude = il_step->alt;
+ }
+
+ il_step->next = NULL;
+ if (il_anchor == NULL)
+ il_root = il_step;
+ else
+ il_anchor->next = il_step;
+ il_anchor = il_step;
+
+#if GDB_DEBUG
+ DBG(GDB_DBG_RTEe, 1) {
+ printf(MYNAME "-rte_il \"%s\" (%d of %d): %c%0.6f %c%0.6f\n",
+ nice(wpt->shortname), j + 1, links,
+ il_step->lat < 0 ? 'S' : 'N', il_step->lat,
+ il_step->lon < 0 ? 'W' : 'E', il_step->lon);
+ }
+#endif
}
- wpt = gdb_create_rte_wpt(xwptname, xlat, xlon, xalt);
- if (wpt != NULL)
- route_add_wpt(route, wpt);
- return route;
- }
-
- gdb_fread_le(&semilat, sizeof(semilat), 32, prefix1, "semi-latitude");
- gdb_fread_le(&semilon, sizeof(semilon), 32, prefix1, "semi-longitude");
- xlat = GPS_Math_Semi_To_Deg(semilat);
- xlon = GPS_Math_Semi_To_Deg(semilon);
-
- gdb_is_validf(fabs(xlat) <= 90.0, prefix1, "Invalid latitude (%f)", xlat);
-
- if (gdb_fread_flag(1)) /* altitude flag */
- gdb_fread_le(&xalt, sizeof(xalt), 64, prefix1, "altitude");
- else
- xalt = unknown_alt;
-
- wpt = gdb_create_rte_wpt(xwptname, xlat, xlon, xalt);
- if (wpt != NULL) {
- route_add_wpt(route, wpt);
- gmsd = GMSD_FIND(wpt);
- if (gmsd == NULL) {
- gmsd = garmin_fs_alloc(-1);
- fs_chain_add(&wpt->fs, (format_specific_data *) gmsd);
+
+ waypt_init_bounds(&bounds);
+
+ if (FREAD_C == 0) { /* interlink bounds */
+ bounds.max_lat = FREAD_LATLON;
+ bounds.max_lon = FREAD_LATLON;
+ if (FREAD_C == 1)
+ bounds.max_alt = FREAD_DBL;
+ bounds.min_lat = FREAD_LATLON;
+ bounds.min_lat = FREAD_LATLON;
+ if (FREAD_C == 1)
+ bounds.min_alt = FREAD_DBL;
}
- GMSD_SET(wpt_class, xclass);
- }
- else {
- gmsd = NULL;
- }
-
- anchor = NULL;
-
- while (--isteps > 0)
- {
- gdb_fread_le(&semilat, sizeof(semilat), 32, prefix2, "semi-latitude");
- gdb_fread_le(&semilon, sizeof(semilon), 32, prefix2, "semi-longitude");
- gdb_fread(buff, 1); /* altitude flag */
- if (buff[0] == 1)
- gdb_fread_le(&xalt, sizeof(xalt), 64, prefix2, "altitude");
-
- xlat = GPS_Math_Semi_To_Deg(semilat);
- xlon = GPS_Math_Semi_To_Deg(semilon);
- gdb_is_validf(fabs(xlat) <= 90.0, prefix2, "Invalid latitude (%f)", xlat);
- if (gmsd != NULL)
- {
- garmin_ilink_t *ilink_ptr = xmalloc(sizeof(*ilink_ptr));
-
- ilink_ptr->ref_count = 1;
- ilink_ptr->lat = xlat;
- ilink_ptr->lon = xlon;
- ilink_ptr->next = NULL;
-
- if (anchor == NULL) {
- gmsd->ilinks = ilink_ptr;
- } else {
- anchor->next = ilink_ptr;
- }
- anchor = ilink_ptr;
+ if (links == 0) {
+ /* Without links we need all informations from wpt */
+ waypoint *tmp = gdb_reader_find_waypt(wpt, 0);
+ if (tmp != NULL) {
+ waypt_free(wpt);
+ wpt = waypt_dupe(tmp);
+ }
+ else {
+ if (waypt_bounds_valid(&bounds))
+ warning(MYNAME ": (has bounds)\n");
+
+ warning(MYNAME ": Data corruption detected!\n");
+ fatal(MYNAME ": Sleeping route point without coordinates!\n");
+ }
}
- }
-
- gdb_fread(buff, 1);
- gdb_is_valid(buff[0] == 0, prefix1, "\"Zero\" byte expected");
-
- gdb_fread_le(&maxlat, sizeof(maxlat), 32, prefix1, "max. latitude");
- gdb_fread_le(&maxlon, sizeof(maxlon), 32, prefix1, "max. longitude");
-
- if (gdb_fread_flag(1)) /* link max alt validity + alt */
- gdb_fread(buff, 8);
- gdb_fread_le(&minlat, sizeof(minlat), 32, prefix1, "min. latitude");
- gdb_fread_le(&minlon, sizeof(minlon), 32, prefix1, "min. longitude");
-
- if (gdb_fread_flag(1)) /* link min alt validity + alt */
- gdb_fread(buff, 2 * sizeof(int));
+ /* VERSION DEPENDENT CODE */
+ if (gdb_ver >= GDB_VER_2) {
+ FREAD(buf, 8);
+ if (gdb_ver >= GDB_VER_3) {
+ FREAD(buf, 2);
+ }
+ }
+#if GDB_DEBUG
+ DBG(GDB_DBG_RTE, 1)
+ printf(MYNAME "-rte_pt \"%s\": coordinates = %c%0.6f, %c%0.6f\n",
+ nice(wpt->shortname),
+ wpt->latitude < 0 ? 'S' : 'N', wpt->latitude,
+ wpt->longitude < 0 ? 'W' : 'E', wpt->longitude);
+#endif
+ wpt = gdb_add_route_waypt(rte, wpt, wpt_class);
+ if (wpt != NULL) {
+ garmin_fs_t *gmsd = GMSD_FIND(wpt);
+ if (gmsd == NULL) {
+ gmsd = garmin_fs_alloc(-1);
+ fs_chain_add(&wpt->fs, (format_specific_data *) gmsd);
+ }
+ GMSD_SET(wpt_class, wpt_class);
+ gmsd->ilinks = il_root;
+ il_root = NULL;
+ }
- if (gdb_ver >= 2)
- gdb_fread(buff, 8); /* unknown 8 bytes since gdb v2 */
- if (gdb_ver >= 3)
- gdb_fread(buff, 2); /* unknown 8 bytes since gdb v3 */
- }
-
- /* This should normally never happen; end of route is handled in main loop before this */
+ while (il_root) {
+ garmin_ilink_t *il = il_root;
+ il_root = il_root->next;
+ xfree(il);
+ }
+ } /* ENDFOR: for (i = 0; i < points; i++) */
- fatal(MYNAME "-%s: Unexpected end of route \"%s\"!", prefix1, xname);
- return 0;
+ /* VERSION DEPENDENT CODE */
+ if (gdb_ver <= GDB_VER_2) {
+ rte->rte_url = FREAD_CSTR;
+ }
+ else {
+ rte->rte_url = gdb_fread_strlist();
+
+ FREAD(buf, 4); /* ?????????????????????????????????? */
+ FREAD(buf, 1); /* ?????????????????????????????????? */
+
+ rte->rte_desc = FREAD_CSTR;
+#if 0
+ /* replace CRLF's with ", " */
+ if (rte->rte_desc) {
+ char *c = rte->rte_desc;
+ while ((c = strstr(c, "\r\n"))) {
+ *c++ = ',';
+ *c++ = ' ';
+ }
+ }
+#endif
+ }
+ return rte;
}
+/*-----------------------------------------------------------------------------*/
static route_head *
-gdb_read_track(const size_t max_file_pos)
+read_track(void)
{
- char xname[GDB_NAME_BUFFERLEN];
- unsigned char xdisplay;
- int xcolour;
- int xlat;
- int xlon;
- int xtime = 0;
- double xalt = unknown_alt;
- double xdepth = unknown_alt;
- double xtemp;
-
- char buff[128];
- int count;
+ route_head *res;
+ int points, index;
+ char dummy;
- route_head *track;
- waypoint *wpt;
-
- const char *prefix0 = "trk_read";
- const char *prefix = "trk_read_loop";
-
- gdb_fread_str(xname, sizeof(xname));
-
- gdb_fread_le(&xdisplay, sizeof(xdisplay), 8, prefix0, "display");
- gdb_fread_le(&xcolour, sizeof(xcolour), 32, prefix0, "colour");
- gdb_fread_le(&count, sizeof(count), 32, prefix0, "count");
+ trk_ct++;
+
+ res = route_head_alloc();
+ res->rte_name = FREAD_CSTR;
+// res->rte_num = trk_ct;
- track = route_head_alloc();
- track->rte_name = xstrdup(xname);
- track_add_head(track);
+ FREAD(&dummy, 1); /* display - 1 byte */
+ FREAD_i32; /* color - 1 dword */
- while (count--)
+ points = FREAD_i32;
+
+ for (index = 0; index < points; index++)
{
- gdb_fread_le(&xlat, sizeof(xlat), 32, prefix, "latitude");
- gdb_fread_le(&xlon, sizeof(xlon), 32, prefix, "longitude");
-
- gdb_fread(buff, 1); /* altitude flag */
- if (buff[0] == 1)
- gdb_fread_le(&xalt, sizeof(xalt), 64, prefix, "altitude");
-
- gdb_fread(buff, 1); /* date/time flag */
- if (buff[0] == 1)
- gdb_fread_le(&xtime, sizeof(xtime), 32, prefix, "time");
-
- gdb_fread(buff, 1); /* depth flag */
- if (buff[0] == 1)
- gdb_fread_le(&xdepth, sizeof(xdepth), 64, prefix, "depth");
-
- gdb_fread(buff, 1); /* temperature flag */
- if (buff[0] == 1)
- gdb_fread_le(&xtemp, sizeof(xtemp), 64, prefix, "temperature");
-
- wpt = waypt_new();
-
- wpt->latitude = GPS_Math_Semi_To_Deg(xlat);
- wpt->longitude = GPS_Math_Semi_To_Deg(xlon);
- wpt->creation_time = xtime;
- wpt->microseconds = 0;
- wpt->altitude = xalt;
- wpt->depth = xdepth;
-
- gdb_is_validf(fabs(wpt->latitude) <= 90.0, prefix, "Invalid latitude (%f)", wpt->latitude);
-
- track_add_wpt(track, wpt);
+ waypoint *wpt = waypt_new();
+
+ trkpt_ct++;
+
+ wpt->latitude = FREAD_LATLON;
+ wpt->longitude = FREAD_LATLON;
+ if (FREAD_C == 1) {
+ double alt = FREAD_DBL;
+ if (alt < 1.0e24) wpt->altitude = alt;
+ }
+ if (FREAD_C == 1) {
+ wpt->creation_time = FREAD_i32;
+ }
+ if (FREAD_C == 1) {
+ WAYPT_SET(wpt, depth, FREAD_DBL);
+ }
+ if (FREAD_C == 1) {
+ WAYPT_SET(wpt, temperature, FREAD_DBL);
+ }
+
+ track_add_wpt(res, wpt);
}
- if (gdb_ver >= 3) {
- int url_ct;
-
- gdb_fread_le(&url_ct, sizeof(url_ct), 32, prefix, "number of urls (since v3)");
- while (url_ct > 0) {
- url_ct--;
- gdb_fread_str(xname, sizeof(xname));
- if ((track->rte_url == NULL) && (xname[0] != '\0'))
- track->rte_url = xstrdup(xname);
- }
- } else {
- gdb_fread_str(xname, sizeof(xname));
- if (xname[0] != '\0')
- track->rte_url = xstrdup(xname);
+ /* VERSION DEPENDENT CODE */
+ if (gdb_ver >= GDB_VER_3) {
+ res->rte_url = gdb_fread_strlist();
}
-
- return track;
+ else /* if (gdb_ver <= GDB_VER_2) */ {
+ res->rte_url = FREAD_CSTR;
+ }
+#if GDB_DEBUG
+ DBG(GDB_DBG_TRK, res->rte_url)
+ printf(MYNAME "-trk \"%s\": url = %s\n",
+ res->rte_name, res->rte_url);
+#endif
+ return res;
}
/*******************************************************************************/
static void
-gdb_read_data(void)
+init_reader(const char *fname)
{
- queue *elem, *temp;
- int reclen, warnings;
- char typ;
- size_t curpos, anchor;
- int wptclass;
-
- const char *prefix = "main_read_loop";
-
- QUEUE_INIT(&gdb_hidden);
+ fin = gbfopen_le(fname, "rb", MYNAME);
+ read_file_header();
+ /* VERSION DEPENDENT CODE */
+ if (gdb_ver >= GDB_VER_UTF8)
+ cet_convert_init(CET_CHARSET_UTF8, 1);
+
+ QUEUE_INIT(&wayptq_in);
+ QUEUE_INIT(&wayptq_in_hidden);
+
+ gdb_via = (gdb_opt_via && *gdb_opt_via) ? atoi(gdb_opt_via) : 0;
+ gdb_roadbook = (gdb_opt_roadbook && *gdb_opt_roadbook) ? atoi(gdb_opt_roadbook) : 0;
+ if (gdb_roadbook) /* higher priority */ gdb_via = 1;
+
+ waypt_ct = 0;
+ waypth_ct = 0;
+ rtept_ct = 0;
+ trkpt_ct = 0;
+ rte_ct = 0;
+ trk_ct = 0;
+}
- warnings = 0;
-
- anchor = ftell(fin);
+static void
+done_reader(void)
+{
+ disp_summary(fin);
+ gdb_flush_waypt_queue(&wayptq_in);
+ gdb_flush_waypt_queue(&wayptq_in_hidden);
+ gbfclose(fin);
+}
- /* we go twice through the file to keep sure, all waypoints
- are loaded before any route has to be handled */
-
- while (feof(fin) == 0)
- {
-
- gdb_fread_le(&reclen, sizeof(reclen), 32, prefix, "record length");
- gdb_is_valid(reclen > 0 && reclen < 0x1F00000, prefix, "record length");
- gdb_fread(&typ, 1);
-
- curpos = ftell(fin);
-
- if (typ == 'W')
- {
- int delta;
+static void
+read_data(void)
+{
+ int incomplete = 0; /* number of incomplete reads */
+
+ for (;;) {
+ int len, delta;
+ char typ, dump;
+ gt_waypt_classes_e wpt_class;
+ gbsize_t pos;
waypoint *wpt;
+ route_head *trk, *rte;
- wpt = gdb_read_wpt(curpos + reclen, &wptclass);
- if (wpt != NULL )
- {
- if (wptclass == 0) {
- waypt_add(wpt);
- }
- else if (gdb_via == 0)
- ENQUEUE_TAIL(&gdb_hidden, &wpt->Q);
- else
- waypt_free(wpt);
- }
- delta = (int)((curpos + reclen) - ftell(fin));
- if (delta != 0)
- {
- if ((warnings & 1) == 0)
- {
- warnings |= 1;
- warning(MYNAME "-%s: At least one incomplete waypoint (gdb v%d, %d byte(s) left).\n", prefix, gdb_ver, delta);
- }
- fseek(fin, curpos + reclen, SEEK_SET);
- }
- continue;
- }
- else if (typ == 'V')
- break;
+ len = FREAD_i32;
+ FREAD(&typ, 1);
+ pos = gbftell(fin);
- fseek(fin, curpos + reclen, SEEK_SET);
- }
-
- clearerr(fin);
- fseek(fin, anchor, SEEK_SET);
-
-
- while (feof(fin) == 0)
- {
- gdb_fread_le(&reclen, sizeof(reclen), 32, prefix, "record length");
- gdb_is_valid(reclen > 0 && reclen < 0x1F00000, prefix, "record length");
- gdb_fread(&typ, 1);
-
- curpos = ftell(fin);
-
- if ((typ == 'R') || (typ == 'T'))
- {
- int flag, delta;
+ if (typ == 'V') break; /* break the loop */
- if (typ == 'R')
- {
- gdb_read_route();
- flag = 2;
- }
- else
- {
- gdb_read_track(curpos + reclen);
- flag = 4;
- }
- delta = (int)((curpos + reclen) - ftell(fin));
- if (delta != 0)
- {
- if ((delta != reclen) && ((warnings & flag) == 0))
- {
- warnings |= flag;
- warning(MYNAME "-%s: At least one incomplete %s (gdb v%d, %d byte(s) left).\n",
- prefix, (typ == 'R') ? "route" : "track", gdb_ver, delta);
- }
- fseek(fin, curpos + reclen, SEEK_SET);
+ dump = 1;
+ wpt_class = GDB_DEF_CLASS;
+
+ switch(typ) {
+ case 'W':
+ wpt = read_waypoint(&wpt_class);
+ if ((gdb_via == 0) || (wpt_class == 0)) {
+ waypoint *dupe;
+ waypt_add(wpt);
+ dupe = waypt_dupe(wpt);
+ ENQUEUE_TAIL(&wayptq_in, &dupe->Q);
+ }
+ else
+ ENQUEUE_TAIL(&wayptq_in_hidden, &wpt->Q);
+ break;
+ case 'R':
+ rte = read_route();
+ if (rte) route_add_head(rte);
+ break;
+ case 'T':
+ trk = read_track();
+ if (trk) track_add_head(trk);
+ break;
+ default:
+ dump = 0; /* make a dump only for main types */
+ break;
}
- }
- else
- {
- if (typ == 'V') break;
- switch(typ)
- {
- case 'D': break;
- case 'L': break;
- case 'W': break;
- default: warning(MYNAME "-%s: Found unknown record type \"%c\" (gdb v%d)!\n", prefix, typ, gdb_ver);
+ delta = (pos + len) - gbftell(fin);
+ if (dump && delta) {
+ if (! incomplete++) {
+ warning(MYNAME ":==========================================\n");
+ warning(MYNAME ":=== W A R N I N G ===\n");
+ }
+ if (typ == 'W')
+ warning(MYNAME ":(%d%c-%02d): delta = %d (flag=%3d/%02x)-",
+ gdb_ver, typ, wpt_class, delta, waypt_flag, waypt_flag);
+ else
+ warning(MYNAME ":(%d%c): delta = %d -", gdb_ver, typ, delta);
+ if (delta > 0) {
+ int i;
+ char *buf = xmalloc(delta);
+ FREAD(buf, delta);
+ for (i = 0; i < delta; i++) {
+ warning(" %02x", (unsigned char)buf[i]);
+ }
+ xfree(buf);
+ }
+ warning("\n");
}
- fseek(fin, curpos + reclen, SEEK_SET);
- }
- }
-
- QUEUE_FOR_EACH(&gdb_hidden, elem, temp) { /* finally kill our temporary queue */
- waypt_free((waypoint *) elem);
- }
-}
-
-/*******************************************************************************/
-/* %%% write support %%% */
-/*******************************************************************************/
-
-/* helpers */
-
-static waypoint **
-gdb_route_point_list(const route_head *route, int *count)
-{
- waypoint **result;
- queue *elem, *tmp;
- int i = 0;
-
- QUEUE_FOR_EACH((queue *)&route->waypoint_list, elem, tmp)
- {
- waypoint *wpt = (waypoint *)elem;
- if ((gdb_via == 0) ||
- (gdb_detect_rtept_class(wpt) == GDB_DEFAULTWPTCLASS)) i++;
+ gbfseek(fin, pos + len, SEEK_SET);
}
- *count = i;
- if (i == 0) return NULL;
- result = xcalloc(i, sizeof(*result));
-
- i = 0;
- QUEUE_FOR_EACH((queue *)&route->waypoint_list, elem, tmp)
- {
- waypoint *wpt = (waypoint *)elem;
- if ((gdb_via == 0) ||
- (gdb_detect_rtept_class(wpt) == GDB_DEFAULTWPTCLASS))
- result[i++] = wpt;
+ if (incomplete) {
+ warning(MYNAME ":------------------------------------------\n");
+ warning(MYNAME ": \"%s\"\n", fin->name);
+ warning(MYNAME ":------------------------------------------\n");
+ warning(MYNAME ": Please mail this information\n");
+ warning(MYNAME " and, if you can, the used GDB file\n");
+ warning(MYNAME ": to gpsbabel-misc@lists.sourceforge.net\n");
+ warning(MYNAME ":==========================================\n");
}
-
- return result;
}
-static void
-gdb_fwrite(const void *data, const size_t size)
-{
- fwrite(data, size, 1, fout);
-}
-
-static void
-gdb_fwrite_str(const char *str, const int len)
-{
-
- if (len >= 0)
- gdb_fwrite(str, len); /* write a string with fixed length */
- else
- {
- char *tmp = (str != NULL) ? (char *)str : "";
- gdb_fwrite(tmp, strlen(tmp) + 1);
- }
-}
-
-static void
-gdb_fwrite_le(const void *data, const size_t size)
-{
- int i;
- short s;
- char buff[8];
-
- switch(size)
- {
- case 1:
- gdb_fwrite(data, 1);
- break;
-
- case 2: /* sizeof(short): */
- s = *(short *)data;
- le_write16(&s, s);
- gdb_fwrite(&s, 2);
- break;
-
- case 4: /* sizeof(int): */
- i = *(int *)data;
- le_write32(&i, i);
- gdb_fwrite(&i, 4);
- break;
-
- case 8: /* sizeof(double): */
- le_read64(buff, data);
- gdb_fwrite(buff, 8);
- break;
-
- default:
- fatal(MYNAME "-write_le: Unsupported data size (%lu)!\n",
- (unsigned long) size);
- }
-}
+/*******************************************************************************/
+/*
+ * reset_short_handle: used for waypoint, route and track names
+ */
static void
-gdb_fwrite_alt(const double alt, const double unknown_value)
-{
- char c0 = 0;
- char c1 = 1;
-
- if (alt != unknown_value) /* proximity / depth / altitude */
- {
- gdb_fwrite(&c1, 1);
- gdb_fwrite_le(&alt, sizeof(alt));
- }
- else
- gdb_fwrite(&c0, 1); /* no value */
-}
-
-static void
-gdb_fwrite_int(const int data)
+reset_short_handle(const char *defname)
{
- gdb_fwrite_le(&data, sizeof(data));
-}
-
-static void
-gdb_fwrite_icon(const waypoint *wpt) /* partly taken from mapsource.c */
-{
- int icon;
- char buff[128];
-
- if ( /* handle custom icons, which are linked to -2 in garmin_tables.c */
- (wpt->icon_descr != NULL) &&
- (sscanf(wpt->icon_descr, "%s%d", buff, &icon) == 2) &&
- (case_ignore_strcmp(buff, "Custom") == 0) &&
- (icon >= 0) && (icon <= 63)
- )
- {
- icon += 500;
- }
- else
- {
- /* might need to change this to handle version dependent icon handling */
- icon = gt_find_icon_number_from_desc(wpt->icon_descr, GDB);
- if (get_cache_icon(wpt) /* && wpt->icon_descr && (strcmp(wpt->icon_descr, "Geocache Found") != 0)*/)
- {
- icon = gt_find_icon_number_from_desc(get_cache_icon(wpt), MAPSOURCE);
- }
- }
- gdb_fwrite_le(&icon, sizeof(icon));
+ if (short_h != NULL)
+ mkshort_del_handle(&short_h);
+
+ short_h = mkshort_new_handle();
+
+ setshort_length(short_h, GDB_NAME_BUFFERLEN);
+ setshort_badchars(short_h, "\r\n\t");
+ setshort_mustupper(short_h, 0);
+ setshort_mustuniq(short_h, 1);
+ setshort_whitespace_ok(short_h, 1);
+ setshort_repeating_whitespace_ok(short_h, 1);
+ setshort_defname(short_h, defname);
}
-/*******************************************************************************/
-/* %%% write file header %%% */
-/*-----------------------------------------------------------------------------*/
+/* ----------------------------------------------------------------------------*/
static void
-gdb_write_file_header(void)
+write_header(void)
{
char buff[128], tbuff[32];
char *c;
int len;
struct tm tm;
- gdb_fwrite_str("MsRcf", -1);
- gdb_fwrite_int(2);
+ FWRITE_CSTR("MsRcf");
+ FWRITE_i32(2);
strncpy(buff, "Dx", sizeof(buff));
buff[1] = 'k' - 1 + gdb_ver;
- gdb_fwrite_str(buff, -1);
+ FWRITE_CSTR(buff);
#if 0
/* Take this if anything is wrong with our self generated watermark */
- strncpy(buff, "A].SQA*Dec 27 2004*17:40:51", sizeof(buff)); /* MapSource V6.5 */
+ strncpy(buff, "A].SQA*Dec 27 2004*17:40:51", sizeof(buff)); /* MapSource V6.5 */
#else
/* This is our "Watermark" to show this file was created by GPSbabel */
/* history:
- strncpy(buff, "A].GPSBabel_1.2.7-beta*Sep 13 2005*20:10:00", sizeof(buff)); // gpsbabel V1.2.7 BETA
- strncpy(buff, "A].GPSBabel_1.2.8-beta*Jan 18 2006*20:11:00", sizeof(buff)); // gpsbabel 1.2.8-beta01182006_clyde
- strncpy(buff, "A].GPSBabel_1.2.8-beta*Apr 18 2006*20:12:00", sizeof(buff)); // gpsbabel 1.2.8-beta20060405
- strncpy(buff, "A].GPSBabel-1.3*Jul 02 2006*20:13:00", sizeof(buff)); // gpsbabel 1.3.0
- strncpy(buff, "A].GPSBabel-1.3.1*Sep 03 2006*20:14:00", sizeof(buff)); // gpsbabel 1.3.1
- */
-
- /*
- New since 11/01/2006:
- version: version and release of gpsbabel (defined in configure.in)
- timestamp: date and time of gdb.c (handled by CVS)
+
+ "A].GPSBabel_1.2.7-beta*Sep 13 2005*20:10:00" - gpsbabel V1.2.7 BETA
+ "A].GPSBabel_1.2.8-beta*Jan 18 2006*20:11:00" - gpsbabel 1.2.8-beta01182006_clyde
+ "A].GPSBabel_1.2.8-beta*Apr 18 2006*20:12:00" - gpsbabel 1.2.8-beta20060405
+ "A].GPSBabel-1.3*Jul 02 2006*20:13:00" - gpsbabel 1.3.0
+ "A].GPSBabel-1.3.1*Sep 03 2006*20:14:00" - gpsbabel 1.3.1
+ "A].GPSBabel-1.3.2*Nov 01 2006*22:23:39" - gpsbabel 1.3.2
+
+ New since 11/01/2006:
+ version: version and release of gpsbabel (defined in configure.in)
+ timestamp: date and time of gdb.c (handled by CVS)
+
+ "A].GPSBabel-1.3.2*Nov 01 2006*22:23:39" - gpsbabel 1.3.2
+ "A].GPSBabel-beta20061125*Feb 06 2007*23:24:14" gpsbabel beta20061125
+ "A].GPSBabel-1.3.3*Feb 20 2007*20:51:15" - gpsbabel 1.3.3
+
*/
+
memset(&tm, 0, sizeof(tm));
sscanf(gdb_release_date+7, "%d/%d/%d %d:%d:%d", &tm.tm_year, &tm.tm_mon, &tm.tm_mday, &tm.tm_hour, &tm.tm_min, &tm.tm_sec);
tm.tm_year -= 1900;
c = buff;
while ((c = strchr(c, '*'))) *c++ = '\0';
- gdb_fwrite_int(len);
- gdb_fwrite_str(buff, len + 1);
-
- gdb_fwrite_str("MapSource", -1); /* MapSource magic */
+ FWRITE_i32(len);
+ FWRITE(buff, len + 1);
+ FWRITE_CSTR("MapSource"); /* MapSource magic */
}
+/*-----------------------------------------------------------------------------*/
+
+/*
+ * gdb_check_waypt: As implemented in waypt_add, but we have some leaks where
+ * waypoints are modified after waypt_add. Maybe we need a data check
+ * after each input module.
+ */
+
static void
-gdb_reset_short_handle(void)
+gdb_check_waypt(waypoint *wpt)
{
- if (gdb_short_handle != NULL)
- mkshort_del_handle(&gdb_short_handle);
-
- gdb_short_handle = mkshort_new_handle();
-
- setshort_length(gdb_short_handle, GDB_NAME_BUFFERLEN);
- setshort_badchars(gdb_short_handle, "");
- setshort_mustupper(gdb_short_handle, 0);
- setshort_mustuniq(gdb_short_handle, 1);
- setshort_whitespace_ok(gdb_short_handle, 1);
- setshort_repeating_whitespace_ok(gdb_short_handle, 1);
+ double lat_orig = wpt->latitude;
+ double lon_orig = wpt->longitude;
+
+ if (wpt->latitude < -90) wpt->latitude += 180;
+ else if (wpt->latitude > +90) wpt->latitude -= 180;
+ if (wpt->longitude < -180) wpt->longitude += 360;
+ else if (wpt->longitude > +180) wpt->longitude -= 360;
+
+ if ((wpt->latitude < -90) || (wpt->latitude > 90.0))
+ fatal ("Invalid latitude %f in waypoint %s.\n",
+ lat_orig, wpt->shortname ? wpt->shortname : "<no name>");
+ if ((wpt->longitude < -180) || (wpt->longitude > 180.0))
+ fatal ("Invalid longitude %f in waypoint %s.\n",
+ lon_orig, wpt->shortname ? wpt->shortname : "<no name>");
}
-/*******************************************************************************/
-/* %%% write waypoints %%% */
/*-----------------------------------------------------------------------------*/
-static void
-gdb_write_waypt(const waypoint *wpt, const int hidden)
+static void
+write_waypoint(
+ const waypoint *wpt, const char *shortname, garmin_fs_t *gmsd,
+ const int icon, const int display)
{
- int i;
- char ffbuf[32], zbuf[32];
- char c0 = 0;
- char c1 = 1;
- garmin_fs_t *gmsd;
- unsigned char wpt_class;
- char *ident;
+ char zbuf[32], ffbuf[32];
+ int wpt_class;
- gmsd = GMSD_FIND(wpt);
+ waypt_ct++; /* increase informational number of written waypoints */
- gdb_is_validf((fabs(wpt->latitude) <= 90), "wpt_write",
- "%s: Invalid latitude (%f) detected\n", wpt->shortname, wpt->latitude);
-
+ memset(zbuf, 0, sizeof(zbuf));
memset(ffbuf, 0xFF, sizeof(ffbuf));
- memset(zbuf, 0x00, sizeof(zbuf));
-
- ident = wpt->shortname; /* paranoia */
- if (global_opts.synthesize_shortnames || (ident == NULL) || (*ident == '\0'))
- {
- ident = mkshort_from_wpt(gdb_short_handle, wpt);
- }
- gdb_fwrite_str(ident, -1);
-
- wpt_class = GMSD_GET(wpt_class, (hidden != 0) ? GDB_HIDDENROUTEWPTCLASS : GDB_DEFAULTWPTCLASS);
- gdb_fwrite_int(wpt_class); /* class */
- gdb_fwrite_str(GMSD_GET(cc, ""), -1); /* country code */
- gdb_fwrite(zbuf, 4); /* subclass part 1 */
- gdb_fwrite(ffbuf, 12); /* subclass part 2 */
- gdb_fwrite(zbuf, 2); /* subclass part 3 */
- gdb_fwrite(ffbuf, 4); /* unknown */
+ wpt_class = wpt->microseconds; /* trick */
- gdb_fwrite_int(GPS_Math_Deg_To_Semi(wpt->latitude));
- gdb_fwrite_int(GPS_Math_Deg_To_Semi(wpt->longitude));
+ FWRITE_CSTR(shortname); /* uniqe (!!!) shortname */
+ FWRITE_i32(wpt_class); /* waypoint class */
+ FWRITE_CSTR(GMSD_GET(cc, "")); /* country code */
- gdb_fwrite_alt(wpt->altitude, unknown_alt); /* altitude */
-
- gdb_fwrite_str((wpt->notes != NULL) ? wpt->notes : wpt->description, -1); /* notes/comment/descr */
-
- gdb_fwrite_alt(GMSD_GET(proximity, 0), 0); /* proximity */
+ if (wpt_class != 0) waypth_ct++;
- switch(GMSD_GET(display, 0)) { /* display */
- case gt_display_mode_symbol: i = gt_gdb_display_mode_symbol; break;
- case gt_display_mode_symbol_and_comment: i = gt_gdb_display_mode_symbol_and_comment; break;
- default: i = gt_gdb_display_mode_symbol_and_name; break;
+#ifdef GMSD_EXPERIMENTAL
+ if (gmsd && gmsd->flags.subclass && (wpt_class >= gt_waypt_class_map_point)) {
+ FWRITE(gmsd->subclass, sizeof(gmsd->subclass));
}
- gdb_fwrite_int(i);
-
- gdb_fwrite_int(0); /* colour */
-
- gdb_fwrite_icon(wpt); /* icon */
- gdb_fwrite_str(GMSD_GET(city, ""), -1); /* city */
- gdb_fwrite_str(GMSD_GET(state, ""), -1); /* state */
- gdb_fwrite_str(GMSD_GET(facility, ""), -1); /* facility */
-
- gdb_fwrite(zbuf, 1); /* unknown */
-
- gdb_fwrite_alt(GMSD_GET(depth, 0), 0); /* depth */
-
- gdb_fwrite(zbuf, 3); /* three unknown bytes */
- gdb_fwrite(zbuf, 4); /* four unknown bytes */
-
- if (hidden == 0)
- gdb_fwrite_str(wpt->url, -1); /* URL */
else
- gdb_fwrite_str(wpt->description, -1); /* description for hidden waypoints */
-
- i = GMSD_GET(category, gdb_category); /* category */
- gdb_fwrite_le(&i, 2);
-
- gdb_fwrite_alt(GMSD_GET(temperature, 0), 0); /* temperature */
-
- if (wpt->creation_time > 0) /* creation time */
+#endif
{
- gdb_fwrite(&c1, 1);
- gdb_fwrite_int(wpt->creation_time);
+ FWRITE(zbuf, 4); /* subclass part 1 */
+ FWRITE(ffbuf, 12); /* subclass part 2 */
+ FWRITE(zbuf, 2); /* subclass part 3 */
+ FWRITE(ffbuf, 4); /* unknown */
}
- else
- gdb_fwrite(&c0, 1);
-
-}
-static void
-gdb_write_waypt_cb(const waypoint *wpt) /* called by waypt_disp over all waypoints */
-{
- int reclen;
- size_t pos;
- waypoint *tmp;
-
- /* check for duplicate waypoints */
- if (NULL != gdb_find_wpt_q_by_name(&gdb_hidden, wpt->shortname))
- return;
+ FWRITE_LATLON(wpt->latitude); /* latitude */
+ FWRITE_LATLON(wpt->longitude); /* longitude */
+ FWRITE_DBL(wpt->altitude, unknown_alt); /* altitude */
+ FWRITE_CSTR(wpt->notes);
+ FWRITE_DBL(WAYPT_GET(wpt, proximity, unknown_alt), unknown_alt); /* proximity */
+ FWRITE_i32(display); /* display */
+ FWRITE_i32(0); /* color (colour) */
+ FWRITE_i32(icon); /* icon */
+ FWRITE_CSTR(GMSD_GET(city, "")); /* city */
+ FWRITE_CSTR(GMSD_GET(state, "")); /* state */
+ FWRITE_CSTR(GMSD_GET(facility, "")); /* facility */
+ FWRITE_C(0); /* unknown */
+ FWRITE_DBL(WAYPT_GET(wpt, depth, unknown_alt), unknown_alt); /* depth */
+
+ /* VERSION DEPENDENT CODE */
+ if (gdb_ver <= GDB_VER_2) {
+ char *descr;
+
+ FWRITE(zbuf, 3);
+ FWRITE(zbuf, 4);
+ descr = (wpt_class < gt_waypt_class_map_point) ?
+ wpt->url : wpt->description;
+ if ((descr != NULL) && (wpt_class >= gt_waypt_class_map_point) && \
+ (strcmp(descr, wpt->shortname) == 0))
+ descr = NULL;
+ FWRITE_CSTR(descr);
+ }
+ else /* if (gdb_ver > GDB_VER_3) */ {
+ int cnt;
+ url_link *url_next;
+ char *str;
- gdb_fwrite_int(0);
- gdb_fwrite_str("W", 1);
-
- pos = ftell(fout);
- gdb_write_waypt(wpt, 0);
- reclen = ftell(fout) - pos;
-
- fseek(fout, pos - 5, SEEK_SET);
- gdb_fwrite_int(reclen);
-
- fseek(fout, pos + reclen, SEEK_SET);
+ if (wpt_class < gt_waypt_class_map_point) /* street address */
+ str = GMSD_GET(addr, "");
+ else
+ str = "";
+ FWRITE_CSTR(str);
+ FWRITE(zbuf, 5); /* instruction dependend */
+
+ /* GBD doesn't have a native description field */
+ /* here we misuse the instruction field */
- tmp = waypt_dupe(wpt);
- ENQUEUE_TAIL(&gdb_hidden, &tmp->Q); /* add this point to our internal queue */
+ str = wpt->description;
+ if (str && (strcmp(str, wpt->shortname) == 0)) str = NULL;
+ if (str && wpt->notes && (strcmp(str, wpt->notes) == 0)) str = NULL;
+ FWRITE_CSTR(str); /* instruction */
+
+ cnt = 0;
+ if (wpt->url) cnt++;
+ for (url_next = wpt->url_next; (url_next); url_next = url_next->url_next)
+ if (url_next->url) cnt++;
+ FWRITE_i32(cnt);
+ if (wpt->url) FWRITE_CSTR(wpt->url);
+ for (url_next = wpt->url_next; (url_next); url_next = url_next->url_next)
+ if (url_next->url) FWRITE_CSTR(url_next->url);
+ }
+
+ FWRITE_i16(GMSD_GET(category, gdb_category));
+ FWRITE_DBL(WAYPT_GET(wpt, temperature, 0), 0);
+ FWRITE_TIME(wpt->creation_time);
+
+ /* VERSION DEPENDENT CODE */
+ if (gdb_ver >= GDB_VER_3) {
+ char *str = GMSD_GET(phone_nr, "");
+ if (*str) {
+ FWRITE_i32(1);
+ FWRITE_CSTR(str);
+ FWRITE_CSTR("");
+ }
+ else {
+ FWRITE_i32(0);
+ }
+ FWRITE_CSTR(GMSD_GET(country, ""));
+ FWRITE_CSTR(GMSD_GET(postal_code, ""));
+ }
}
static void
-gdb_write_rtewpt_cb(const waypoint *wpt) /* called by waypt_disp (route points) */
+route_compute_bounds(const route_head *rte, bounds *bounds)
{
- int reclen;
- size_t pos;
- waypoint *tmp, *dupe;
-
- tmp = gdb_find_wpt_q_by_name(&gdb_hidden, wpt->shortname);
- if (tmp == NULL)
- {
- tmp = find_waypt_by_name(wpt->shortname);
-
- gdb_fwrite_int(0);
- gdb_fwrite_str("W", 1);
-
- pos = ftell(fout);
- gdb_write_waypt(wpt, (tmp == NULL));
- reclen = ftell(fout) - pos;
-
- fseek(fout, pos - 5, SEEK_SET);
- gdb_fwrite_int(reclen);
-
- fseek(fout, pos + reclen, SEEK_SET);
-
- dupe = waypt_dupe(wpt);
- ENQUEUE_TAIL(&gdb_hidden, &dupe->Q); /* add this point to our internal queue */
+ queue *elem, *tmp;
+ waypt_init_bounds(bounds);
+ QUEUE_FOR_EACH((queue *)&rte->waypoint_list, elem, tmp) {
+ waypoint *wpt = (waypoint *)elem;
+ gdb_check_waypt(wpt);
+ waypt_add_to_bounds(bounds, wpt);
}
}
-/*******************************************************************************/
-/* %%% write routes %%% */
-/*-----------------------------------------------------------------------------*/
-
static void
-gdb_write_route(const route_head *route, const waypoint **list, const int count)
+route_write_bounds(bounds *bounds)
{
- int i, wpt_class;
- char buff[128], zbuff[32], ffbuff[32];
- waypoint *prev = NULL;
- const char c0 = 0;
- const char c1 = 1;
- const char c3 = 3;
- double maxlat = -90;
- double minlat = +90;
- double maxlon = -180;
- double minlon = +180;
- double maxalt = -unknown_alt;
- double minalt = +unknown_alt;
-
- memset(zbuff, 0, sizeof(zbuff));
- memset(ffbuff, 0xFF, sizeof(ffbuff));
-
- for (i = 0; i < count; i++)
- {
- const waypoint *wpt = list[i];
-
- if (wpt->latitude > maxlat) maxlat = wpt->latitude;
- if (wpt->latitude < minlat) minlat = wpt->latitude;
- if (wpt->longitude > maxlon) maxlon = wpt->longitude;
- if (wpt->longitude < minlon) minlon = wpt->longitude;
- if (wpt->altitude != unknown_alt)
- {
- if (wpt->altitude > maxalt) maxalt = wpt->altitude;
- if (wpt->altitude < minalt) minalt = wpt->altitude;
- }
- }
-
- {
- char *cname;
-
- if (route->rte_name == NULL)
- {
- snprintf(buff, sizeof(buff), "Route%04d", route->rte_num);
- cname = mkshort(gdb_short_handle, buff);
- }
- else
- cname = mkshort(gdb_short_handle, route->rte_name);
-
- gdb_fwrite_str(cname, -1);
- xfree(cname);
+ if (waypt_bounds_valid(bounds)) {
+ FWRITE_C(0);
+ FWRITE_LATLON(bounds->max_lat);
+ FWRITE_LATLON(bounds->max_lon);
+ FWRITE_DBL(bounds->max_alt, -(unknown_alt));
+ FWRITE_LATLON(bounds->min_lat);
+ FWRITE_LATLON(bounds->min_lon);
+ FWRITE_DBL(bounds->min_alt, unknown_alt);
}
+ else FWRITE_C(1);
+}
- gdb_fwrite(&c0, 1); /* auto_name */
+static void
+write_route(const route_head *rte, const char *rte_name)
+{
+ bounds bounds;
+ int points, index;
+ queue *elem, *tmp;
+ char zbuf[32], ffbuf[32];
- if (count == 1) gdb_fwrite(&c1, 1); /* skip max data */
- else
- {
- gdb_fwrite(&c0, 1); /* ??? */
- gdb_fwrite_int(GPS_Math_Deg_To_Semi(maxlat)); /* maximum latitude over route */
- gdb_fwrite_int(GPS_Math_Deg_To_Semi(maxlon)); /* maximum longitude over route */
- gdb_fwrite_alt(maxalt, unknown_alt); /* maximum altitude over route */
-
- gdb_fwrite_int(GPS_Math_Deg_To_Semi(minlat)); /* minimum latitude over route */
- gdb_fwrite_int(GPS_Math_Deg_To_Semi(minlon)); /* minimum longitude over route */
- gdb_fwrite_alt(minalt, -unknown_alt); /* minimum altitude over route */
- }
+ memset(zbuf, 0, sizeof(zbuf));
+ memset(ffbuf, 0xFF, sizeof(ffbuf));
- gdb_fwrite_int(count); /* number of points in route */
-
- for (i = 0; i < count; i++)
- {
- const waypoint *wpt = list[i];
- garmin_fs_t *gmsd;
-
- gmsd = GMSD_FIND(wpt);
- if (gmsd && gmsd->flags.wpt_class)
- wpt_class = gmsd->wpt_class;
- else
- wpt_class = gdb_detect_rtept_class(wpt);
-
- if (prev != NULL)
- {
- gdb_fwrite_int(2); /* route link details */
+ FWRITE_CSTR(rte_name);
+ FWRITE_C(0); /* display/autoname - 1 byte */
- gdb_fwrite_int(GPS_Math_Deg_To_Semi(prev->latitude)); /* ilink step 1 (end point 1) */
- gdb_fwrite_int(GPS_Math_Deg_To_Semi(prev->longitude));
- gdb_fwrite_alt(prev->altitude, unknown_alt);
+ route_compute_bounds(rte, &bounds);
+ route_write_bounds(&bounds);
- gdb_fwrite_int(GPS_Math_Deg_To_Semi(wpt->latitude)); /* ilink step 2 (end point 2) */
- gdb_fwrite_int(GPS_Math_Deg_To_Semi(wpt->longitude));
- gdb_fwrite_alt(wpt->altitude, unknown_alt);
+ points = ELEMENTS(rte);
+ FWRITE_i32(points);
+
+ index = 0;
+
+ QUEUE_FOR_EACH((queue *)&rte->waypoint_list, elem, tmp) {
+
+ waypoint *wpt = (waypoint *)elem;
+ waypoint *next = (waypoint *)tmp;
+ waypoint *test;
+ garmin_fs_t *gmsd = NULL;
+ int wpt_class;
- if (wpt->latitude > prev->latitude) /* get maximum lat, lon and alt */
- {
- maxlat = wpt->latitude;
- minlat = prev->latitude;
- }
- else
- {
- maxlat = prev->latitude;
- minlat = wpt->latitude;
- }
- if (wpt->longitude > prev->longitude)
- {
- maxlon = wpt->longitude;
- minlon = prev->longitude;
+ index++;
+ rtept_ct++; /* increase informational number of written route points */
+
+ if (index == 1) gdb_check_waypt(wpt);
+ if (index < points) gdb_check_waypt(next);
+
+ test = gdb_find_wayptq(&wayptq_out, wpt, 1);
+ if (test != NULL) wpt = test;
+ else {
+ fatal(MYNAME ": Sorry, that should never happen!!!\n");
}
+
+ gmsd = GMSD_FIND(wpt);
+
+ /* extra_data may contain a modified shortname */
+ FWRITE_CSTR((wpt->extra_data) ? (char *)wpt->extra_data : wpt->shortname);
+
+ wpt_class = wpt->microseconds; /* trick */
+
+ FWRITE_i32(wpt_class); /* waypoint class */
+ FWRITE_CSTR(GMSD_GET(cc, "")); /* country */
+#ifdef GMSD_EXPERIMENTAL
+ if (gmsd && gmsd->flags.subclass && (wpt_class >= gt_waypt_class_map_point))
+ FWRITE(gmsd->subclass, sizeof(gmsd->subclass));
else
+#endif
{
- maxlon = prev->longitude;
- minlon = wpt->longitude;
+ FWRITE(zbuf, 4); /* subclass part 1 */
+ FWRITE(ffbuf, 12); /* subclass part 2 */
+ FWRITE(zbuf, 2); /* subclass part 3 */
+ FWRITE(ffbuf, 4); /* unknown */
}
- if (wpt->altitude != unknown_alt)
- {
- maxalt = wpt->altitude;
- minalt = wpt->altitude;
- }
- else
- {
- maxalt = -unknown_alt;
- minalt = +unknown_alt;
+
+ FWRITE_C(0); /* unknown value or string */
+ FWRITE_C(3); /* unknown 18 bytes starting with 0x03 */
+ FWRITE(zbuf, 3);
+ FWRITE(ffbuf, 4);
+ FWRITE(zbuf, 10);
+
+ if (index == points) {
+ FWRITE_i32(0); /* no more steps */
+ FWRITE_C(1); /* skip bounds */
}
- if (prev->altitude != unknown_alt)
- {
- if (prev->altitude > maxalt) maxalt = prev->altitude;
- if (prev->altitude < minalt) minalt = prev->altitude;
+ else /* if (index < points) */ {
+ FWRITE_i32(2); /* two interstep links */
+
+ FWRITE_LATLON(wpt->latitude);
+ FWRITE_LATLON(wpt->longitude);
+ FWRITE_DBL(wpt->altitude, unknown_alt);
+ FWRITE_LATLON(next->latitude);
+ FWRITE_LATLON(next->longitude);
+ FWRITE_DBL(next->altitude, unknown_alt);
+
+ waypt_init_bounds(&bounds);
+ waypt_add_to_bounds(&bounds, wpt);
+ waypt_add_to_bounds(&bounds, next);
+ route_write_bounds(&bounds);
+
}
- gdb_fwrite(&c0, 1); /* ??? */
-
- gdb_fwrite_int(GPS_Math_Deg_To_Semi(maxlat)); /* maximum coords & altitude */
- gdb_fwrite_int(GPS_Math_Deg_To_Semi(maxlon));
- gdb_fwrite_alt(maxalt, unknown_alt);
-
- gdb_fwrite_int(GPS_Math_Deg_To_Semi(minlat)); /* minimum coords & altitude */
- gdb_fwrite_int(GPS_Math_Deg_To_Semi(minlon));
- gdb_fwrite_alt(minalt, -unknown_alt);
-
- if (gdb_ver >= 2)
- gdb_fwrite(ffbuff, 8);
- }
-
- gdb_fwrite_str(wpt->shortname, -1); /* short name */
-
- gdb_fwrite_int(wpt_class); /* class */
- gdb_fwrite_str(GMSD_GET(cc, ""), -1); /* country */
-
- gdb_fwrite(zbuff, 4); /* subclass part 1 */
- gdb_fwrite(ffbuff, 12); /* subclass part 2 */
- gdb_fwrite(zbuff, 2); /* subclass part 3 */
- gdb_fwrite(ffbuff, 4); /* unknown */
-
- gdb_fwrite(&c0, 1); /* unknown value or string */
- gdb_fwrite(&c3, 1); /* unknown 18 bytes starting with 0x03 */
- gdb_fwrite(zbuff, 3);
- gdb_fwrite(ffbuff, 4);
- gdb_fwrite(zbuff, 10);
-
- prev = (waypoint *)wpt;
+ /* VERSION DEPENDENT CODE */
+ if (gdb_ver >= GDB_VER_2) {
+ FWRITE(ffbuf, 8);
+ if (gdb_ver >= GDB_VER_3)
+ FWRITE(zbuf, 2);
+ }
}
-
- gdb_fwrite_int(0); /* Zero interlink steps */
- gdb_fwrite(&c1, 1);
- if (gdb_ver >= 2)
- gdb_fwrite(ffbuff, 8);
-
- gdb_fwrite_str(route->rte_url, -1);
+ /* VERSION DEPENDENT CODE */
+ if (gdb_ver <= GDB_VER_2) {
+ FWRITE_CSTR(rte->rte_url);
+ }
+ else /* if (gdb_ver >= GDB_VER_3) */ {
+ FWRITE_CSTR_LIST(rte->rte_url);
+ FWRITE_i32(0x0E); /* color ??? */
+ FWRITE_C(0);
+ FWRITE_CSTR(rte->rte_desc);
+ }
}
static void
-gdb_write_route_cb(const route_head *route)
+write_track(const route_head *trk, const char *trk_name)
{
- int reclen;
- size_t pos;
- int count;
- waypoint **list;
+ queue *elem, *tmp;
+ int points = ELEMENTS(trk);
- list = gdb_route_point_list(route, &count);
- if (count == 0) return; /* don't write empty routes */
+ FWRITE_CSTR(trk_name);
+ FWRITE_C(0);
+ FWRITE_i32(0);
- gdb_fwrite_int(0);
- gdb_fwrite_str("R", 1);
-
- pos = ftell(fout);
- gdb_write_route(route, (const waypoint**)list, count);
- reclen = ftell(fout) - pos;
-
- fseek(fout, pos - 5, SEEK_SET);
- gdb_fwrite_int(reclen);
+ FWRITE_i32(points); /* total number of waypoints in waypoint list */
- fseek(fout, pos + reclen, SEEK_SET);
+ QUEUE_FOR_EACH((queue *)&trk->waypoint_list, elem, tmp)
+ {
+ double d;
+ waypoint *wpt = (waypoint *)elem;
+
+ trkpt_ct++; /* increase informational number of written route points */
+
+ FWRITE_LATLON(wpt->latitude);
+ FWRITE_LATLON(wpt->longitude);
+ FWRITE_DBL(wpt->altitude, unknown_alt);
+ FWRITE_TIME(wpt->creation_time);
+ d = WAYPT_GET(wpt, depth, unknown_alt);
+ FWRITE_DBL(d, unknown_alt);
+ d = WAYPT_GET(wpt, temperature, -99999);
+ FWRITE_DBL(d, -99999);
+ }
+
+ /* finalize track */
- xfree(list);
+ /* VERSION DEPENDENT CODE */
+ if (gdb_ver <= GDB_VER_2) {
+ FWRITE_CSTR(trk->rte_url);
+ }
+ else /* if (gdb_ver >= GDB_VER_3 */ {
+ FWRITE_CSTR_LIST(trk->rte_url);
+ }
}
-/*******************************************************************************/
-/* %%% write tracks %%% */
/*-----------------------------------------------------------------------------*/
-static void
-gdb_write_track(const route_head *track)
+static void
+finalize_item(const gbsize_t anchor)
{
- char buff[128];
- const char c0 = 0;
- const char c1 = 1;
- queue *elem, *tmp;
- int count = track->rte_waypt_ct;
-
- {
- char *cname;
-
- if (track->rte_name == NULL)
- {
- snprintf(buff, sizeof(buff), "Track%04d", track->rte_num);
- cname = mkshort(gdb_short_handle, buff);
- }
- else
- cname = mkshort(gdb_short_handle, track->rte_name);
-
- gdb_fwrite_str(cname, -1);
- xfree(cname);
- }
-
- gdb_fwrite(&c0, 1); /* display */
- gdb_fwrite_int(0); /* xcolour */
- gdb_fwrite_int(count);
+ gbsize_t mark;
+ int len;
- QUEUE_FOR_EACH((queue *)&track->waypoint_list, elem, tmp)
- {
- waypoint *wpt = (waypoint *)elem;
-
- gdb_fwrite_int(GPS_Math_Deg_To_Semi(wpt->latitude));
- gdb_fwrite_int(GPS_Math_Deg_To_Semi(wpt->longitude));
- gdb_fwrite_alt(wpt->altitude, unknown_alt); /* altitude */
-
+ mark = gbftell(fout);
+ len = mark - anchor;
+ gbfseek(fout, -(len + 5), SEEK_CUR);
+ FWRITE_i32(mark - anchor);
+ gbfseek(fout, len + 1, SEEK_CUR);
+}
- if (wpt->creation_time > 0) /* creation time */
- {
- gdb_fwrite(&c1, 1);
- gdb_fwrite_int(wpt->creation_time);
- }
- else
- gdb_fwrite(&c0, 1);
-
- gdb_fwrite_alt(wpt->depth, unknown_alt); /* depth */
- gdb_fwrite(&c0, 1); /* temperature */
+/*-----------------------------------------------------------------------------*/
+
+static char
+str_not_equal(const char *s1, const char *s2)
+{
+ if (s1) {
+ if (!s2) return 1;
+ if (strcmp(s1, s2) != 0) return 1;
+ else return 0;
}
- gdb_fwrite_str(track->rte_url, -1);
+ else if (s2) return 1;
+ else return 0;
}
static void
-gdb_write_track_cb(const route_head *track) /* called from track_disp_all */
+write_waypoint_cb(const waypoint *refpt)
{
- int reclen;
- size_t pos;
-
- if (track->rte_waypt_ct <= 0) return; /* don't write empty tracks */
-
- gdb_fwrite_int(0);
- gdb_fwrite_str("T", 1);
-
- pos = ftell(fout);
-
- gdb_write_track(track);
+ garmin_fs_t *gmsd;
+ waypoint *test;
+ gbsize_t anchor;
- reclen = ftell(fout) - pos;
- fseek(fout, pos - 5, SEEK_SET);
- gdb_fwrite_int(reclen);
+ /* do this when backup always happens in main */
- fseek(fout, pos + reclen, SEEK_SET);
-}
+ rtrim(((waypoint *)refpt)->shortname);
+ test = gdb_find_wayptq(&wayptq_out, refpt, 1);
-/*******************************************************************************/
+ if ((test != NULL) && (route_flag == 0)) {
+ if ((str_not_equal(test->notes, refpt->notes)) ||
+ (str_not_equal(test->url, refpt->url)))
+ test = NULL;
+ }
-static void
-gdb_write_data(void)
-{
- queue *temp, *elem;
- char c1 = 1;
+ if (test == NULL) {
+ int icon, display, wpt_class;
+ char *name;
+ waypoint *wpt = waypt_dupe(refpt);
+
+ gdb_check_waypt(wpt);
+ ENQUEUE_TAIL(&wayptq_out, &wpt->Q);
+
+ FWRITE_i32(-1);
+ FWRITE_C('W');
+ anchor = gbftell(fout);
+
+ /* prepare the waypoint */
+ gmsd = GMSD_FIND(wpt);
- QUEUE_INIT(&gdb_hidden); /* contains all written waypts & rtepts */
+ wpt_class = GMSD_GET(wpt_class, -1);
+ if (wpt_class == -1)
+ wpt_class = (route_flag) ? GDB_DEF_HIDDEN_CLASS : GDB_DEF_CLASS;
+ wpt->microseconds = wpt_class; /* trick, we need this for the route(s) */
+
+ icon = GMSD_GET(icon, -1);
+ if (icon < 0) {
+ if (wpt->icon_descr)
+ icon = gt_find_icon_number_from_desc(wpt->icon_descr, GDB);
+ else
+ icon = GDB_DEF_ICON;
+ }
- /* (doing_wpts) */
-
- gdb_reset_short_handle();
- waypt_disp_all(gdb_write_waypt_cb);
-
- /* (doing_rtes) */
-
- gdb_reset_short_handle();
- setshort_defname(gdb_short_handle, "Route");
- if (gdb_via == 0)
- {
- /* find out all route points we have to write as a "HIDDEN CLASS" waypoint */
- route_disp_all(NULL, NULL, gdb_write_rtewpt_cb);
- }
- route_disp_all(gdb_write_route_cb, NULL, NULL);
- QUEUE_FOR_EACH(&gdb_hidden, elem, temp) { /* vaporize our temporary queue */
- waypt_free((waypoint *) elem);
- }
+ switch(GMSD_GET(display, -1)) { /* display */
+ case -1:
+ if (wpt_class < 8)
+ display = gt_gdb_display_mode_symbol_and_name;
+ else
+ display = gt_gdb_display_mode_symbol;
+ break;
+ case gt_display_mode_symbol:
+ display = gt_gdb_display_mode_symbol;
+ break;
+ case gt_display_mode_symbol_and_comment:
+ display = gt_gdb_display_mode_symbol_and_comment;
+ break;
+ default:
+ display = gt_gdb_display_mode_symbol_and_name;
+ break;
+ }
- /* (doing_trks) */
-
- gdb_reset_short_handle();
- setshort_defname(gdb_short_handle, "Track");
- track_disp_all(gdb_write_track_cb, NULL, NULL);
+ name = wpt->shortname;
+
+ if (global_opts.synthesize_shortnames || (*name == '\0')) {
+ name = wpt->notes;
+ if (!name) name = wpt->description;
+ if (!name) name = wpt->shortname;
+ }
+
+ name = mkshort(short_h, name);
+ wpt->extra_data = (void *)name;
+ write_waypoint(wpt, name, gmsd, icon, display);
- gdb_fwrite_int(2); /* finalize gdb with empty map segment */
- gdb_fwrite_str("V", -1);
- gdb_fwrite(&c1, 1);
+ finalize_item(anchor);
+ }
}
-/*******************************************************************************/
-
static void
-gdb_init_opts(const char op) /* 1 = read; 2 = write */
+write_route_cb(const route_head *rte)
{
- gdb_via = 0;
- gdb_category = 0;
- gdb_ver = 2;
+ gbsize_t anchor;
+ char *name;
+ char buf[32];
- if (gdb_opt_via != NULL) /* opt_via present in both ops */
- {
- if ((case_ignore_strcmp(gdb_opt_via, GDB_OPT_VIA) == 0) ||
- (*gdb_opt_via == '\0'))
- gdb_via = 1;
- else
- gdb_via = atoi(gdb_opt_via);
- }
+ if (ELEMENTS(rte) <= 0) return;
- if (op & 2) /* writer opts */
- {
- if ((gdb_opt_category != NULL) &&
- (case_ignore_strcmp(gdb_opt_category, GDB_OPT_CATEGORY) != 0) &&
- (*gdb_opt_category != '\0'))
- {
- gdb_category = atoi(gdb_opt_category);
- if ((gdb_category < 1) || (gdb_category > 16))
- fatal(MYNAME ": Unsupported category \"%s\"!\n", gdb_opt_category);
- gdb_category = 1 << (gdb_category - 1);
- }
-
- gdb_ver = atoi(gdb_opt_ver);
- if ((gdb_ver < GDB_VER_MIN) || (gdb_ver > GDB_VER_MAX))
- fatal(MYNAME ": Unsupported version \"%s\"!\n", gdb_opt_ver);
+ if (rte->rte_name == NULL) {
+ snprintf(buf, sizeof(buf), "Route%04d", rte->rte_num);
+ name = mkshort(short_h, buf);
}
-}
+ else
+ name = mkshort(short_h, rte->rte_name);
+
+ rte_ct++; /* increase informational number of written routes */
-/*******************************************************************************/
-/* %%% global cb's %%% */
-/*******************************************************************************/
+ FWRITE_i32(-1);
+ FWRITE_C('R');
-static void
-gdb_rd_init(const char *fname)
-{
- gdb_init_opts(1);
-
- fin_name = xstrdup(fname);
- fin = xfopen(fname, "rb", MYNAME);
- gdb_read_file_header();
-
- if (gdb_ver >= 3) cet_convert_init(CET_CHARSET_UTF8, 1);
+ anchor = gbftell(fout);
+ write_route(rte, name);
+ finalize_item(anchor);
+
+ xfree(name);
}
static void
-gdb_wr_init(const char *fname)
+write_track_cb(const route_head *trk)
{
- gdb_init_opts(2);
+ gbsize_t anchor;
+ char *name;
+ char buf[32];
- fout_name = xstrdup(fname);
- fout = xfopen(fname, "wb", MYNAME);
- gdb_short_handle = NULL;
- QUEUE_INIT(&gdb_hidden);
-}
+ if (ELEMENTS(trk) <= 0) return;
+
+ if (trk->rte_name == NULL) {
+ snprintf(buf, sizeof(buf), "Track%04d", trk->rte_num);
+ name = mkshort(short_h, buf);
+ }
+ else
+ name = mkshort(short_h, trk->rte_name);
-static void
-gdb_rd_deinit(void)
-{
- fclose(fin);
- xfree(fin_name);
- fin_name = NULL;
+ trk_ct++; /* increase informational number of written tracks */
+
+ FWRITE_i32(-1);
+ FWRITE_C('T');
+
+ anchor = gbftell(fout);
+ write_track(trk, name);
+ finalize_item(anchor);
+
+ xfree(name);
}
+/*-----------------------------------------------------------------------------*/
+
static void
-gdb_wr_deinit(void)
+init_writer(const char *fname)
{
- fclose(fout);
- xfree(fout_name);
- fout_name = NULL;
- mkshort_del_handle(&gdb_short_handle);
+ fout = gbfopen_le(fname, "wb", MYNAME);
+
+ gdb_category = (gdb_opt_category) ? atoi(gdb_opt_category) : 0;
+ gdb_ver = (gdb_opt_ver && *gdb_opt_ver) ? atoi(gdb_opt_ver) : 0;
+
+ if (gdb_ver >= GDB_VER_UTF8)
+ cet_convert_init(CET_CHARSET_UTF8, 1);
+
+ QUEUE_INIT(&wayptq_out);
+ short_h = NULL;
+
+ waypt_ct = 0;
+ waypth_ct = 0;
+ rtept_ct = 0;
+ trkpt_ct = 0;
+ rte_ct = 0;
+ trk_ct = 0;
}
-static void
-gdb_read(void)
+static void
+done_writer(void)
{
- gdb_read_data();
+ disp_summary(fout);
+ gdb_flush_waypt_queue(&wayptq_out);
+ mkshort_del_handle(&short_h);
+ gbfclose(fout);
}
static void
-gdb_write(void)
+write_data(void)
{
- gdb_write_file_header();
- gdb_write_data();
+ if (gdb_opt_ver) gdb_ver = atoi(gdb_opt_ver);
+ write_header();
+
+ reset_short_handle("WPT");
+ route_flag = 0;
+ waypt_disp_all(write_waypoint_cb);
+ route_flag = 1;
+ route_disp_all(NULL, NULL, write_waypoint_cb);
+
+ reset_short_handle("Route");
+ route_disp_all(write_route_cb, NULL, NULL);
+
+ reset_short_handle("Track");
+ track_disp_all(write_track_cb, NULL, NULL);
+
+ FWRITE_i32(2); /* finalize gdb with empty map segment */
+ FWRITE_CSTR("V");
+ FWRITE_C(1);
}
/*******************************************************************************/
+#define GDB_OPT_VER "ver"
+#define GDB_OPT_VIA "via"
+#define GDB_OPT_CATEGORY "cat"
+#define GDB_OPT_ROADBOOK "roadbook"
+
+static arglist_t gdb_args[] = {
+ {GDB_OPT_CATEGORY, &gdb_opt_category,
+ "Default category on output (1..16)",
+ NULL, ARGTYPE_INT, "1", "16"},
+ {GDB_OPT_VER, &gdb_opt_ver,
+ "Version of gdb file to generate (1..3)",
+ "2", ARGTYPE_INT, "1", "3"},
+ {GDB_OPT_VIA, &gdb_opt_via,
+ "Drop route points that do not have an equivalent waypoint (hidden points)",
+ NULL, ARGTYPE_BOOL, ARG_NOMINMAX},
+ {GDB_OPT_ROADBOOK, &gdb_opt_roadbook,
+ "Include major turn points (with description) from calculated route",
+ NULL, ARGTYPE_BOOL, ARG_NOMINMAX},
+ ARG_TERMINATOR
+};
+
ff_vecs_t gdb_vecs = {
ff_type_file,
FF_CAP_RW_ALL,
- gdb_rd_init,
- gdb_wr_init,
- gdb_rd_deinit,
- gdb_wr_deinit,
- gdb_read,
- gdb_write,
+ init_reader,
+ init_writer,
+ done_reader,
+ done_writer,
+ read_data,
+ write_data,
NULL,
gdb_args,
CET_CHARSET_MS_ANSI, 0 /* O.K.: changed to NON-FIXED */
ff_vecs_t geo_vecs = {
ff_type_file,
- FF_CAP_RW_WPT,
+ { ff_cap_read | ff_cap_write, ff_cap_none, ff_cap_none },
geo_rd_init,
geo_wr_init,
geo_rd_deinit,
#include "defs.h"
#if PDBFMTS_ENABLED
-#include "coldsync/palm.h"
-#include "coldsync/pdb.h"
+#include "pdbfile.h"
#include "jeeps/gpsmath.h"
#include "garmin_tables.h"
#undef GEONICHE_DBG
-static FILE *FileIn;
-static FILE *FileOut;
+static pdbfile *file_in, *file_out;
static const char *FilenameOut;
-static struct pdb *PdbOut;
-
+static int rec_ct;
+static int ct;
static char Rec0Magic[] = "68000NV4Q2";
static char *Arg_dbname = NULL;
static void
rd_init(const char *fname)
{
- FileIn = xfopen(fname, "rb", MYNAME);
+ file_in = pdb_open(fname, MYNAME);
}
static void
rd_deinit(void)
{
- fclose(FileIn);
+ pdb_close(file_in);
ARG_FREE(Arg_dbname);
ARG_FREE(Arg_category);
}
static void
wr_init(const char *fname)
{
- FileOut = xfopen(fname, "wb", MYNAME);
+ file_out = pdb_create(fname, MYNAME);
FilenameOut = fname;
}
static void
wr_deinit(void)
{
- fclose(FileOut);
+ pdb_close(file_out);
ARG_FREE(Arg_dbname);
ARG_FREE(Arg_category);
}
}
static void
-geoniche_read_asc(const struct pdb *pdb)
+geoniche_read_asc(void)
{
- struct pdb_record *pdb_rec;
+ pdbrec_t *pdb_rec;
/* Process record 0 */
- pdb_rec = pdb->rec_index.rec;
+ pdb_rec = file_in->rec_list;
if (strcmp((char *) pdb_rec->data, Rec0Magic))
fatal(MYNAME ": Bad record 0, not a GeoNiche file.\n");
pdb_rec = pdb_rec->next;
if (!wpt)
fatal(MYNAME ": Couldn't allocate waypoint.\n");
vdata = (char *) pdb_rec->data;
- vlen = pdb_rec->data_len;
+ vlen = pdb_rec->size;
/* Field 1: Target */
p = field(&vdata, &vlen);
}
static void
-geoniche_read_bin(const struct pdb *pdb)
+geoniche_read_bin(void)
{
- struct pdb_record *pdb_rec;
+ pdbrec_t *pdb_rec;
/* Process records */
- for (pdb_rec = pdb->rec_index.rec; pdb_rec != NULL; pdb_rec = pdb_rec->next)
+ for (pdb_rec = file_in->rec_list; pdb_rec != NULL; pdb_rec = pdb_rec->next)
{
char *vdata = (char *) pdb_rec->data;
struct tm created, visited;
static void
data_read(void)
{
- struct pdb *pdb;
-
- if (NULL == (pdb = pdb_Read(fileno(FileIn))))
- fatal(MYNAME ": pdb_Read failed\n");
-
- if (pdb->creator != MYCREATOR)
+ if (file_in->creator != MYCREATOR)
fatal(MYNAME ": Not a GeoNiche file.\n");
- switch(pdb->type)
+ switch(file_in->type)
{
case MYTYPE_ASC:
- geoniche_read_asc(pdb);
+ geoniche_read_asc();
break;
case MYTYPE_BIN:
- geoniche_read_bin(pdb);
+ geoniche_read_bin();
break;
default:
fatal(MYNAME ": Unsupported GeoNiche file.\n");
}
-
- free_pdb(pdb);
}
static char *
static void
geoniche_writewpt(const waypoint *wpt)
{
- static int ct = 0;
- struct pdb_record *opdb_rec;
int vlen;
- static int vsize = 4096;
- ubyte *vdata;
+ char *vdata;
char *title;
struct tm tm;
char datestr[10+1];
time_t tx;
char *gs;
- if (ct == 0)
- {
- opdb_rec = new_Record (0, 0, ct++, sizeof(Rec0Magic), (ubyte *) Rec0Magic);
- if (opdb_rec == NULL)
- fatal(MYNAME ": libpdb couldn't create record\n");
- if (pdb_AppendRecord(PdbOut, opdb_rec))
- fatal(MYNAME ": libpdb couldn't append record\n");
+ if (rec_ct == 0) {
+ pdb_write_rec(file_out, 0, 0, ct++, Rec0Magic, sizeof(Rec0Magic));
}
if ( wpt->description && wpt->description[0] )
id = gid2id(wpt->shortname);
if (id < 0)
- id = ct;
+ id = rec_ct;
tx = (wpt->creation_time != 0) ? wpt->creation_time : gpsbabel_time;
if (tx == 0) { /* maybe zero during testo (freezed time) */
/* last chance to fill notes with something */
if (*notes == '\0') notes = xstrappend(notes, "(notes)");
- vdata = (ubyte *) xmalloc(vsize);
- if (vdata == NULL)
- fatal(MYNAME ": libpdb couldn't get record memory\n");
-
- for (;;)
- {
- vlen = snprintf((char *) vdata, vsize,
+ vlen = xasprintf(&vdata,
"Target,%d,%s,,%s,%f,%f,%f,%s,%s,,,,%d,,,,%s"
, id
, title
, notes
);
- if (vlen > -1 && vlen < vsize)
- break;
-
- /* try again with more space. */
- if (vlen > -1)
- vsize = vlen + 1;
- else
- vsize *= 2;
- vdata = (ubyte *) xrealloc(vdata, vsize);
- if (vdata == NULL)
- fatal(MYNAME ": libpdb couldn't get record memory\n");
- }
-
- opdb_rec = new_Record (0, 0, ct++, (uword) (vlen+1), vdata);
-
- if (opdb_rec == NULL)
- fatal(MYNAME ": libpdb couldn't create record\n");
- if (pdb_AppendRecord(PdbOut, opdb_rec))
- fatal(MYNAME ": libpdb couldn't append record\n");
+ pdb_write_rec(file_out, 0, 0, ct++, vdata, vlen + 1);
xfree(notes);
xfree(title);
xfree(vdata);
+
+ rec_ct++;
}
static void
data_write(void)
{
- if (NULL == (PdbOut = new_pdb()))
- fatal (MYNAME ": new_pdb failed\n");
-
if (Arg_dbname) {
if (case_ignore_strcmp(Arg_dbname, "GeoNiche Targets") == 0)
fatal(MYNAME ": Reserved database name!\n");
- strncpy(PdbOut->name, Arg_dbname, PDB_DBNAMELEN);
+ strncpy(file_out->name, Arg_dbname, PDB_DBNAMELEN);
}
else
- strncpy(PdbOut->name, FilenameOut, PDB_DBNAMELEN);
- PdbOut->name[PDB_DBNAMELEN-1] = 0;
-
- PdbOut->attributes = PDB_ATTR_BACKUP;
- PdbOut->ctime = PdbOut->mtime = current_time() + (49*365 + 17*366) * (60*60*24);
- PdbOut->type = MYTYPE_ASC;
- PdbOut->creator = MYCREATOR;
- PdbOut->version = 0;
- PdbOut->modnum = 1;
-
+ strncpy(file_out->name, FilenameOut, PDB_DBNAMELEN);
+ file_out->name[PDB_DBNAMELEN-1] = 0;
+
+ file_out->attr = PDB_FLAG_BACKUP;
+ file_out->ctime = file_out->mtime = current_time() + (49*365 + 17*366) * (60*60*24);
+ file_out->type = MYTYPE_ASC;
+ file_out->creator = MYCREATOR;
+ file_out->version = 0;
+ file_out->revision = 1;
+
+ rec_ct = 0;
+ ct = 0;
waypt_disp_all(geoniche_writewpt);
-
- pdb_Write(PdbOut, fileno(FileOut));
-
- free_pdb(PdbOut);
}
--- /dev/null
+/*
+
+ Support for "GeoGrid Viewer" binary tracklogs (*.log)
+
+ Copyright (C) 2007 Olaf Klein, o.b.klein@gpsbabel.org
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
+
+ */
+
+#include <ctype.h>
+#include <time.h>
+
+#include "defs.h"
+#include "grtcirc.h"
+#include "jeeps/gpsmath.h"
+
+#define MYNAME "ggv_log"
+
+static gbfile *fin, *fout;
+static int ggv_log_ver;
+
+static
+arglist_t ggv_log_args[] = {
+ ARG_TERMINATOR
+};
+
+/*******************************************************************************
+* %%% global callbacks called by gpsbabel main process %%% *
+*******************************************************************************/
+
+static void
+ggv_log_rd_init(const char *fname)
+{
+ static char magic[32];
+ int len = 0;
+
+ fin = gbfopen(fname, "rb", MYNAME);
+
+ for (;;) {
+ int cin;
+
+ cin = gbfgetc(fin);
+ if (cin < 0) break;
+
+ magic[len++] = cin;
+
+ if (cin == '\0') {
+ double ver = 0;
+ char *sver;
+ if (strncmp(magic, "DOMGVGPS Logfile V", 18) != 0) break;
+
+ sver = &magic[18];
+ sscanf(sver, "%lf:", &ver);
+ ggv_log_ver = ver * 10;
+ if ((ggv_log_ver == 10) || (ggv_log_ver == 25)) return; /* header accepted */
+
+ fatal(MYNAME ": Sorry, unsupported version (%s)!\n", sver);
+ }
+ else if (len == sizeof(magic))
+ break;
+ }
+ fatal(MYNAME ": Invalid header. Probably no " MYNAME " file!\n");
+}
+
+static void
+ggv_log_rd_deinit(void)
+{
+ gbfclose(fin);
+}
+
+static void
+ggv_log_read(void)
+{
+ signed char *buf;
+ int bufsz = 0, len;
+ route_head *trk = NULL;
+
+ switch(ggv_log_ver) {
+ case 10: bufsz = 0x2A; break;
+ case 25: bufsz = 0x6F; break;
+ }
+
+ buf = xmalloc(bufsz);
+
+ while ((len = gbfread(buf, 1, bufsz, fin))) {
+ int deg, min;
+ double xlat, xlon;
+ float sec;
+ struct tm tm;
+ waypoint *wpt;
+
+ if (len != bufsz) break;
+
+ if (trk == NULL) {
+ trk = route_head_alloc();
+ track_add_head(trk);
+ }
+
+ memset(&tm, 0, sizeof(tm));
+
+ wpt = waypt_new();
+
+ deg = (gbint16) le_read16(&buf[0]);
+ min = le_read16(&buf[2]);
+ sec = le_read_float(&buf[4]);
+ xlat = (double)deg + ((double)min / (double)60) + (sec / (double)3600.0);
+ wpt->latitude = xlat;
+
+ deg = (gbint16) le_read16(&buf[8]);
+ min = le_read16(&buf[10]);
+ sec = le_read_float(&buf[12]);
+ xlon = (double)deg + ((double)min / (double)60) + (sec / (double)3600.0);
+ wpt->longitude = xlon;
+
+ WAYPT_SET(wpt, course, le_read16(&buf[16 + 0]));
+
+ if (ggv_log_ver == 10) {
+ double secs;
+
+ wpt->altitude = le_read16(&buf[16 + 2]);
+ WAYPT_SET(wpt, speed, le_read16(&buf[16 + 4]));
+ tm.tm_year = le_read16(&buf[16 + 8]);
+ tm.tm_mon = le_read16(&buf[16 + 10]);
+ tm.tm_mday = le_read16(&buf[16 + 12]);
+ tm.tm_hour = le_read16(&buf[16 + 14]);
+ tm.tm_min = le_read16(&buf[16 + 16]);
+ secs = le_read_double(&buf[16 + 18]);
+ tm.tm_sec = (int)secs;
+ wpt->microseconds = (secs - tm.tm_sec) * 1000000;
+ }
+ else {
+ wpt->altitude = le_read16(&buf[16 + 4]);
+ wpt->sat = (unsigned char)buf[16 + 14];
+
+ /* other probably valid double values at offset:
+
+ 22: 0.0 - 20.0
+ 43: 0.0 - 59.0
+ 51: -1.0
+ 61: -1.0
+ 79: .. - 20.0 ? speed over ground ? (++)
+ 87: ? course ?
+ 95: 0.0 - 3.1 (++)
+ 103: -1
+
+ */
+ }
+
+ if (wpt->altitude == 0)
+ wpt->altitude = unknown_alt;
+
+ if (tm.tm_year >= 1900) {
+ tm.tm_year -= 1900;
+ if (tm.tm_mon > 0) {
+ tm.tm_mon--;
+ wpt->creation_time = mkgmtime(&tm);
+ }
+ }
+
+ track_add_wpt(trk, wpt);
+ }
+ xfree(buf);
+}
+
+static void
+ggv_log_wr_init(const char *fname)
+{
+ fout = gbfopen(fname, "wb", MYNAME);
+
+ gbfputcstr("DOMGVGPS Logfile V1.0:", fout);
+}
+
+static void
+ggv_log_wr_deinit(void)
+{
+ gbfclose(fout);
+}
+
+static void
+ggv_log_track_head_cb(const route_head *trk)
+{
+ queue *elem, *tmp;
+ waypoint *prev = NULL;
+
+ QUEUE_FOR_EACH((queue *)&trk->waypoint_list, elem, tmp) {
+ double latmin, lonmin, latsec, lonsec;
+ int latint, lonint;
+ double course = 0, speed = 0;
+ struct tm tm;
+ waypoint *wpt = (waypoint *)elem;
+ double secs = 0;
+
+ latint = wpt->latitude;
+ lonint = wpt->longitude;
+ latmin = 60.0 * (fabs(wpt->latitude) - latint);
+ lonmin = 60.0 * (fabs(wpt->longitude) - lonint);
+ latsec = 60.0 * (latmin - floor(latmin));
+ lonsec = 60.0 * (lonmin - floor(lonmin));
+
+ if (wpt->creation_time > 0) {
+ tm = *gmtime(&wpt->creation_time);
+ tm.tm_mon += 1;
+ tm.tm_year += 1900;
+ }
+ else
+ memset(&tm, 0, sizeof(tm));
+
+ if (prev != NULL) {
+ course = heading_true_degrees(
+ prev->latitude, prev->longitude,
+ wpt->latitude, wpt->longitude);
+ speed = waypt_speed(prev, wpt);
+ }
+ if (wpt->creation_time > 0)
+ secs = (double)tm.tm_sec + ((double)wpt->microseconds / 1000000);
+
+ gbfputint16((gbint16) latint, fout);
+ gbfputint16((gbint16) latmin, fout);
+ gbfputflt(latsec, fout);
+ gbfputint16((gbint16) lonint, fout);
+ gbfputint16((gbint16) lonmin, fout);
+ gbfputflt(lonsec, fout);
+ gbfputint16((gbint16) course, fout);
+ gbfputint16((gbint16) (wpt->altitude != unknown_alt) ? wpt->altitude : 0, fout);
+ gbfputint16((gbint16) speed, fout);
+ gbfputint16(0, fout);
+ gbfputint16(tm.tm_year, fout);
+ gbfputint16(tm.tm_mon, fout);
+ gbfputint16(tm.tm_mday, fout);
+ gbfputint16(tm.tm_hour, fout);
+ gbfputint16(tm.tm_min, fout);
+ gbfputdbl(secs, fout);
+
+ prev = wpt;
+ }
+}
+
+static void
+ggv_log_write(void)
+{
+ track_disp_all(ggv_log_track_head_cb, NULL, NULL);
+}
+
+/**************************************************************************/
+
+ff_vecs_t ggv_log_vecs = {
+ ff_type_file,
+ {
+ ff_cap_none, /* waypoints */
+ ff_cap_read | ff_cap_write, /* tracks */
+ ff_cap_none /* routes */
+ },
+ ggv_log_rd_init,
+ ggv_log_wr_init,
+ ggv_log_rd_deinit,
+ ggv_log_wr_deinit,
+ ggv_log_read,
+ ggv_log_write,
+ NULL,
+ ggv_log_args,
+ CET_CHARSET_ASCII, 1
+};
+/**************************************************************************/
time_t gpsbabel_now; /* gpsbabel startup-time; initialized in main.c with time() */
time_t gpsbabel_time; /* gpsbabel startup-time; initialized in main.c with current_time(), ! ZERO within testo ! */
+posn_status tracking_status;
static char *encoded_points = NULL;
static char *encoded_levels = NULL;
static char *script = NULL;
-static route_head *routehead;
+static route_head **routehead;
+static int *routecount;
static short_handle desc_handle;
static int serial = 0;
{ goog_segment_s, cb_start, "/page/directions/segments/segment" },
{ goog_segment, cb_cdata, "/page/directions/segments/segment" },
{ goog_td_s, cb_start, "/div/table/tr/td" },
+ { goog_td_s, cb_start, "/div/div/table/tr/td" },
{ goog_td_b, cb_cdata, "/div/table/tr/td/b" },
+ { goog_td_b, cb_cdata, "/div/div/table/tr/td/b" },
{ goog_td_e, cb_end, "/div/table/tr/td" },
+ { goog_td_e, cb_end, "/div/div/table/tr/td" },
{ NULL, 0, NULL }
};
static char goog_segname[7];
static char *goog_realname = NULL;
+static int goog_segroute = 0;
/*
* The segments contain an index into the points array. We use that
{
waypoint *wpt_tmp;
- wpt_tmp = route_find_waypt_by_name( routehead, goog_segname);
+ wpt_tmp = route_find_waypt_by_name( routehead[goog_segroute], goog_segname);
if (wpt_tmp) {
xfree(wpt_tmp->shortname);
wpt_tmp->shortname = mkshort(desc_handle,args);
{
const char **avp = &attrv[0];
int isdesc = 0;
+ int isseg = 0;
while (*avp) {
if ( 0 == strcmp(avp[0], "class" )) {
isdesc = !strcmp(avp[1], "desc" );
+ isseg = !strcmp(avp[1], "dirsegtext" );
}
else if ( isdesc && (0 == strcmp( avp[0], "id" ))) {
+ goog_segroute = 0;
snprintf( goog_segname, sizeof(goog_segname),
"\\%5.5x",
atoi(avp[1] + 6 ));
}
+ else if ( isseg && (0 == strcmp( avp[0], "id" ))) {
+ if ( strchr(strchr(avp[1],'_')+1,'_')) {
+ goog_segroute = atoi(strchr(avp[1],'_')+1);
+ }
+ else {
+ goog_segroute = 0;
+ }
+ snprintf( goog_segname, sizeof(goog_segname),
+ "\\%5.5x",
+ atoi(strrchr( avp[1],'_') + 1 )+routecount[goog_segroute]);
+ }
avp += 2;
}
}
long level2 = -9999;
char *str = encoded_points;
char *lstr = encoded_levels;
-
- routehead = route_head_alloc();
- route_add_head(routehead);
+
+ routehead[goog_segroute] = route_head_alloc();
+ route_add_head(routehead[goog_segroute]);
+ routecount[goog_segroute] = serial;
while ( str && *str )
{
wpt_tmp->route_priority=level;
wpt_tmp->shortname = (char *) xmalloc(7);
sprintf( wpt_tmp->shortname, "\\%5.5x", serial++ );
- route_add_wpt(routehead, wpt_tmp);
+ route_add_wpt(routehead[goog_segroute], wpt_tmp);
}
}
static void
google_read(void)
{
+ routehead = (route_head **)xmalloc(sizeof(route_head *));
+ routecount = (int *)xmalloc(sizeof(int));
+ goog_segroute = 0;
xml_read();
+ xfree( routehead );
+ xfree( routecount );
+
if ( encoded_points )
{
xfree( encoded_points );
char *end = NULL;
if ( xml && (!dict || (xml < dict ))) {
+ routehead = (route_head **)xmalloc(sizeof(route_head *));
+ routecount = (int *)xmalloc(sizeof(int));
+ goog_segroute = 0;
xml++;
end = strchr( xml+1, '\'' );
if ( end ) {
}
}
else if ( dict ) {
+ char qc = '\'';
+ int ofs = 9;
+ int panelofs = 8;
+ int count = 0;
+ char *tmp = NULL;
+ char *start = NULL;
+
char *panel = strstr( dict, "panel: '" );
encoded_points = strstr( dict, "points: '" );
encoded_levels = strstr( dict, "levels: '" );
+ if ( !encoded_points ) {
+ ofs = 10;
+ qc = '"';
+ encoded_points = strstr( dict, "\"points\":\"" );
+ encoded_levels = strstr( dict, "\"levels\":\"" );
+ if ( !encoded_points ) {
+ encoded_points = strstr(dict, "points:\"" );
+ encoded_levels = strstr(dict, "levels:\"" );
+ ofs = 8;
+ }
+ }
+
+ if ( !panel ) {
+ panel = strstr( dict, "panel:\"");
+ panelofs = 7;
+ }
- if ( encoded_points && encoded_levels ) {
- encoded_points += 9;
- encoded_levels += 9;
- end = strchr( encoded_points, '\'' );
- if ( end ) {
- *end = '\0';
- end = encoded_points;
- while ( (end = strstr(end, "\\\\" ))) {
- memmove( end, end+1, strlen(end)+1 );
- end++;
+ tmp = panel;
+ while ( tmp ) {
+ if ( qc == '"' ) {
+ char *tmp1 = strstr( tmp, "\"points\":\"" );
+ if ( !tmp1 ) {
+ tmp1 = strstr( tmp, "points:\"" );
}
- end = strchr( encoded_levels, '\'' );
+ tmp = tmp1;
+ }
+ else {
+ tmp = strstr( tmp, "points: '" );
+ }
+ count++;
+ if ( tmp ) {
+ tmp++;
+ }
+ }
+ routehead = (route_head **)xmalloc(sizeof(route_head *)*count);
+ routecount = (int *)xmalloc(sizeof(int)*count);
+ goog_segroute = 0;
+
+ do {
+
+ if ( encoded_points && encoded_levels ) {
+ encoded_points += ofs;
+ encoded_levels += ofs;
+ end = strchr( encoded_points, qc );
if ( end ) {
- *end = '\0';
- end = encoded_levels;
- while ( (end = strstr(end, "\\\\" ))) {
- memmove( end, end+1, strlen(end)+1 );
+ *end = '\0';
+ end = encoded_points;
+ while ( (end = strstr(end, "\\\\" ))) {
+ memmove( end, end+1, strlen(end)+1 );
end++;
}
- goog_poly_e( NULL, NULL );
- }
- }
- }
+ end = strchr( encoded_levels, qc );
+ if ( end ) {
+ start = end;
+ *end = '\0';
+ end = encoded_levels;
+ while ( (end = strstr(end, "\\\\" ))) {
+ memmove( end, end+1, strlen(end)+1 );
+ end++;
+ }
+ goog_poly_e( NULL, NULL );
+
+ goog_segroute++;
+ start++;
+ {
+ encoded_points = strstr( start, "points: '" );
+ encoded_levels = strstr( start, "levels: '" );
+ }
+ if ( !encoded_points ) {
+ encoded_points = strstr( start, "\"points\":\"" );
+ encoded_levels = strstr( start, "\"levels\":\"" );
+ }
+ if ( !encoded_points ) {
+ encoded_points = strstr( start, "points:\"" );
+ encoded_levels = strstr( start, "levels:\"" );
+ }
+ }
+ }
+ }
+ } while ( start && encoded_points && encoded_levels );
if ( panel ) {
- panel += 8;
+ panel += panelofs;
end = strstr( panel, "/table><div class=\\\"legal" );
- if ( end ) {
- strcpy(end,"/table></div>");
- end = panel;
- while ( (end = strstr( end, "\\\"" ))) {
- memmove( end, end+1, strlen(end)+1 );
+ if ( !end ) {
+ end = strstr( panel, "/table><div class=\\042legal" );
+ }
+ if ( !end ) {
+ end = strstr( panel, "/table\\u003e\\u003cdiv id=\\\"mrDragRouteTip\\\"" );
+ }
+ if ( end ) {
+ strcpy(end,"/table></div>");
+ }
+ if ( !end ) {
+ end = strstr( panel, "/div><div class=\\042legal");
+ if ( end ) {
+ strcpy( end, "/div></div>");
}
- end = panel;
- while ( (end = strstr( end, "\\'" ))) {
- memmove( end, end+1, strlen(end)+1 );
+ }
+
+ if ( end ) {
+ char *to = panel;
+ char *from = panel;
+ while ( *from ) {
+ if ( !strncmp( from, "\\\"", 2 )) {
+ *to++ = '"';
+ from += 2;
+ if ( *(to-2) != '=' ) {
+ *to++ = ' ';
+ }
+ }
+ else if ( !strncmp( from, "\\042", 4)) {
+ *to++ = '"';
+ from += 4;
+
+ if ( *(to-2) != '=' ) {
+ *to++ = ' ';
+ }
+ }
+ else if ( !strncmp( from, "\\u0026utm", 9)) {
+ strcpy( to, "&utm" );
+ to += 8;
+ from += 9;
+ }
+ else if ( !strncmp( from, "\\u0026", 6 )) {
+ *to++='&';
+ from += 6;
+ }
+ else if ( !strncmp( from, "\\u003c", 6 )) {
+ *to++='<';
+ from += 6;
+ }
+ else if ( !strncmp( from, "\\u003e", 6 )) {
+ *to++='>';
+ from += 6;
+ }
+ else if ( !strncmp( from, "\\'", 2)) {
+ *to++ = '\'';
+ from += 2;
+ }
+ else if ( !strncmp( from, " nowrap ", 8)) {
+ *to++ = ' ';
+ from += 8;
+ }
+ else if ( !strncmp( from, "tr style=\\\"display:none", 23 )) {
+ if ( strcmp( to-5, "/tr><" )) {
+ /* broken 6-26-07 missing </tr> that apparently doesn't bother browsers */
+ strcpy(to, "/tr><" );
+ to += 5;
+ }
+ *to++ = *from++;
+ }
+ else {
+ *to++ = *from++;
+ }
+ }
+ *to = '\0';
+
+#if 0
+ {
+ FILE *foo = fopen( "foo.xml", "w" );
+ fwrite( panel, sizeof(char), strlen(panel), foo );
+ fclose( foo );
}
+#endif
+
xml_deinit();
xml_init( NULL, google_map, NULL );
+ xml_readprefixstring( "<!DOCTYPE foo [" );
+ xml_readprefixstring( xhtml_entities );
+ xml_readprefixstring( "]>" );
xml_readstring( panel );
}
}
}
xfree( script );
+ xfree( routehead );
+ xfree( routecount );
script = NULL;
}
#include "defs.h"
#if PDBFMTS_ENABLED
-#include "coldsync/palm.h"
-#include "coldsync/pdb.h"
+#include "pdbfile.h"
#include "garmin_tables.h"
#define MYNAME "GPilotS"
};
-static FILE *file_in;
-static FILE *file_out;
+static pdbfile *file_in, *file_out;
static const char *out_fname;
-static struct pdb *opdb;
-static struct pdb_record *opdb_rec;
-
+static int ct = 0;
static char *dbname = NULL;
static
static void
rd_init(const char *fname)
{
- file_in = xfopen(fname, "rb", MYNAME);
+ file_in = pdb_open(fname, MYNAME);
}
static void
rd_deinit(void)
{
- fclose(file_in);
+ pdb_close(file_in);
if ( dbname ) {
xfree(dbname);
dbname = NULL;
static void
wr_init(const char *fname)
{
- file_out = xfopen(fname, "wb", MYNAME);
+ file_out = pdb_create(fname, MYNAME);
out_fname = fname;
}
static void
wr_deinit(void)
{
- fclose(file_out);
+ pdb_close(file_out);
if ( dbname ) {
xfree(dbname);
dbname = NULL;
data_read(void)
{
struct record *rec;
- struct pdb *pdb;
- struct pdb_record *pdb_rec;
+ pdbrec_t *pdb_rec;
route_head *track_head = NULL;
- if (NULL == (pdb = pdb_Read(fileno(file_in)))) {
- fatal(MYNAME ": pdb_Read failed\n");
- }
-
- if (pdb->creator != MYCREATOR) {
+ if (file_in->creator != MYCREATOR) {
fatal(MYNAME ": Not a %s file.\n", MYNAME);
}
- switch(pdb->type) {
+ switch(file_in->type) {
case MYWPT:
/* blah */
break;
/* blah */
break;
default:
- fatal(MYNAME ": Unknown file type 0x%x\n", (int) pdb->type);
+ fatal(MYNAME ": Unknown file type 0x%x\n", (int) file_in->type);
}
- for(pdb_rec = pdb->rec_index.rec; pdb_rec; pdb_rec=pdb_rec->next) {
+ for(pdb_rec = file_in->rec_list; pdb_rec; pdb_rec=pdb_rec->next) {
waypoint *wpt_tmp;
Custom_Trk_Point_Type *tp_cust;
Compact_Trk_Point_Type *tp_comp;
fi.i = le_read32(&rec->wpt.d108.alt);
wpt_tmp->altitude = fi.f;
fi.i = le_read32(&rec->wpt.d108.dpth);
- wpt_tmp->depth = fi.f;
+ WAYPT_SET(wpt_tmp, depth, fi.f);
fi.i = le_read32(&rec->wpt.d108.dist);
- wpt_tmp->proximity = fi.f;
+ WAYPT_SET(wpt_tmp, proximity, fi.f);
wpt_tmp->wpt_flags.icon_descr_is_dynamic = 0;
wpt_tmp->icon_descr = gt_find_desc_from_icon_number((rec->wpt.d108.smbl[1] << 8) + rec->wpt.d108.smbl[0], PCX, NULL);
waypt_add(wpt_tmp);
}
}
- free_pdb(pdb);
}
my_write_wpt(const waypoint *wpt)
{
struct record *rec;
- static int ct;
char *vdata;
int lat, lon;
le_write32(&rec->wpt.d103.lat, lat);
le_write32(&rec->wpt.d103.lon, lon);
- opdb_rec = new_Record(0, 0, ct++, (uword) (vdata - (char *) rec), (const ubyte *) rec);
-
- if (opdb_rec == NULL) {
- fatal(MYNAME ": libpdb couldn't create record\n");
- }
-
- if (pdb_AppendRecord(opdb, opdb_rec)) {
- fatal(MYNAME ": libpdb couldn't append record\n");
- }
+ pdb_write_rec(file_out, 0, 0, ct++, rec, (char *)vdata - (char *)rec);
xfree(rec);
}
static void
data_write(void)
{
- if (NULL == (opdb = new_pdb())) {
- fatal (MYNAME ": new_pdb failed\n");
- }
-
if ( dbname ) {
- strncpy( opdb->name, dbname, PDB_DBNAMELEN );
+ strncpy( file_out->name, dbname, PDB_DBNAMELEN );
} else {
- strncpy(opdb->name, out_fname, PDB_DBNAMELEN);
+ strncpy(file_out->name, out_fname, PDB_DBNAMELEN);
}
/*
* Populate header.
*/
- opdb->name[PDB_DBNAMELEN-1] = 0;
- opdb->attributes = PDB_ATTR_BACKUP;
- opdb->ctime = opdb->mtime = current_time() + 2082844800U;
+ file_out->name[PDB_DBNAMELEN-1] = 0;
+ file_out->attr = PDB_FLAG_BACKUP;
+ file_out->ctime = file_out->mtime = current_time() + 2082844800U;
- opdb->type = MYWPT;
- opdb->creator = MYCREATOR;
- opdb->version = 1;
+ file_out->type = MYWPT;
+ file_out->creator = MYCREATOR;
+ file_out->version = 1;
waypt_disp_all(my_write_wpt);
-
- pdb_Write(opdb, fileno(file_out));
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>GPSBabel Documentation</title><link rel="stylesheet" href="http://www.gpsbabel.org/style3.css" type="text/css" /><meta name="generator" content="DocBook XSL Stylesheets V1.71.1" /></head><body><div class="book" lang="en" xml:lang="en"><div class="titlepage"><div><div><h1 class="title"><a id="GPSBabel_Documentation_Book"></a>GPSBabel Documentation</h1></div></div><hr /></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="preface"><a href="#Introduction">Introduction</a></span></dt><dd><dl><dt><span class="section"><a href="#The_Problem">The Problem: Too many incompatible formats</a></span></dt><dt><span class="section"><a href="#The_Solution">The Solution</a></span></dt></dl></dd><dt><span class="chapter"><a href="#Getting_and_Building">1. Getting it and Building it</a></span></dt><dt><span class="chapter"><a href="#Usage">2. Usage</a></span></dt><dd><dl><dt><span class="sect1"><a href="#Invocation">Invocation</a></span></dt><dt><span class="sect1"><a href="#Suboptions">Suboptions</a></span></dt><dt><span class="sect1"><a href="#Advanced_Usage">Advanced Usage</a></span></dt><dt><span class="sect1"><a href="#Route_And_Track_Modes">Route and Track Modes</a></span></dt><dt><span class="sect1"><a href="#inifile">Working with predefined options</a></span></dt><dt><span class="sect1"><a href="#tracking">Realtime tracking</a></span></dt><dt><span class="sect1"><a href="#batchfile">Batch mode (command files)</a></span></dt></dl></dd><dt><span class="chapter"><a href="#The_Formats">3. The Formats</a></span></dt><dd><dl><dt><span class="section"><a href="#fmt_xcsv">? Character Separated Values (xcsv)</a></span></dt><dt><span class="section"><a href="#fmt_alantrl">Alan Map500 tracklogs (.trl) (alantrl)</a></span></dt><dt><span class="section"><a href="#fmt_alanwpr">Alan Map500 waypoints and routes (.wpr) (alanwpr)</a></span></dt><dt><span class="section"><a href="#fmt_tabsep">All database fields on one tab-separated line (tabsep)</a></span></dt><dt><span class="section"><a href="#fmt_baroiq">Brauniger IQ Series Barograph Download (baroiq)</a></span></dt><dt><span class="section"><a href="#fmt_cambridge">Cambridge/Winpilot glider software (cambridge)</a></span></dt><dt><span class="section"><a href="#fmt_cst">CarteSurTable data file (cst)</a></span></dt><dt><span class="section"><a href="#fmt_cetus">Cetus for Palm/OS (cetus)</a></span></dt><dt><span class="section"><a href="#fmt_coastexp">CoastalExplorer XML (coastexp)</a></span></dt><dt><span class="section"><a href="#fmt_csv">Comma separated values (csv)</a></span></dt><dt><span class="section"><a href="#fmt_compegps">CompeGPS data files (.wpt/.trk/.rte) (compegps)</a></span></dt><dt><span class="section"><a href="#fmt_copilot">CoPilot Flight Planner for Palm/OS (copilot)</a></span></dt><dt><span class="section"><a href="#fmt_coto">cotoGPS for Palm/OS (coto)</a></span></dt><dt><span class="section"><a href="#fmt_custom">Custom "Everything" Style (custom)</a></span></dt><dt><span class="section"><a href="#fmt_axim_gpb">Dell Axim Navigation System (.gpb) file format (axim_gpb)</a></span></dt><dt><span class="section"><a href="#fmt_an1">DeLorme .an1 (drawing) file (an1)</a></span></dt><dt><span class="section"><a href="#fmt_gpl">DeLorme GPL (gpl)</a></span></dt><dt><span class="section"><a href="#fmt_saplus">DeLorme Street Atlas Plus (saplus)</a></span></dt><dt><span class="section"><a href="#fmt_saroute">DeLorme Street Atlas Route (saroute)</a></span></dt><dt><span class="section"><a href="#fmt_xmap">DeLorme XMap HH Native .WPT (xmap)</a></span></dt><dt><span class="section"><a href="#fmt_xmap2006">DeLorme XMap/SAHH 2006 Native .TXT (xmap2006)</a></span></dt><dt><span class="section"><a href="#fmt_xmapwpt">DeLorme XMat HH Street Atlas USA .WPT (PPC) (xmapwpt)</a></span></dt><dt><span class="section"><a href="#fmt_easygps">EasyGPS binary format (easygps)</a></span></dt><dt><span class="section"><a href="#fmt_igc">FAI/IGC Flight Recorder Data Format (igc)</a></span></dt><dt><span class="section"><a href="#fmt_gpssim">Franson GPSGate Simulation (gpssim)</a></span></dt><dt><span class="section"><a href="#fmt_fugawi">Fugawi (fugawi)</a></span></dt><dt><span class="section"><a href="#fmt_garmin301">Garmin 301 Custom position and heartrate (garmin301)</a></span></dt><dt><span class="section"><a href="#fmt_glogbook">Garmin Logbook XML (glogbook)</a></span></dt><dt><span class="section"><a href="#fmt_gdb">Garmin MapSource - gdb (gdb)</a></span></dt><dt><span class="section"><a href="#fmt_mapsource">Garmin MapSource - mps (mapsource)</a></span></dt><dt><span class="section"><a href="#fmt_garmin_txt">Garmin MapSource - txt (tab delimited) (garmin_txt)</a></span></dt><dt><span class="section"><a href="#fmt_pcx">Garmin PCX5 (pcx)</a></span></dt><dt><span class="section"><a href="#fmt_garmin_poi">Garmin POI database (garmin_poi)</a></span></dt><dt><span class="section"><a href="#fmt_garmin">Garmin serial/USB protocol (garmin)</a></span></dt><dt><span class="section"><a href="#fmt_gtrnctr">Garmin Training Centerxml (gtrnctr)</a></span></dt><dt><span class="section"><a href="#fmt_geo">Geocaching.com .loc (geo)</a></span></dt><dt><span class="section"><a href="#fmt_gcdb">GeocachingDB for Palm/OS (gcdb)</a></span></dt><dt><span class="section"><a href="#fmt_geonet">GEOnet Names Server (GNS) (geonet)</a></span></dt><dt><span class="section"><a href="#fmt_geoniche">GeoNiche .pdb (geoniche)</a></span></dt><dt><span class="section"><a href="#fmt_kml">Google Earth (Keyhole) Markup Language (kml)</a></span></dt><dt><span class="section"><a href="#fmt_google">Google Maps XML (google)</a></span></dt><dt><span class="section"><a href="#fmt_gpilots">GpilotS (gpilots)</a></span></dt><dt><span class="section"><a href="#fmt_gtm">GPS TrackMaker (gtm)</a></span></dt><dt><span class="section"><a href="#fmt_arc">GPSBabel arc filter file (arc)</a></span></dt><dt><span class="section"><a href="#fmt_gpsdrive">GpsDrive Format (gpsdrive)</a></span></dt><dt><span class="section"><a href="#fmt_gpsdrivetrack">GpsDrive Format for Tracks (gpsdrivetrack)</a></span></dt><dt><span class="section"><a href="#fmt_gpsman">GPSman (gpsman)</a></span></dt><dt><span class="section"><a href="#fmt_gpspilot">GPSPilot Tracker for Palm/OS (gpspilot)</a></span></dt><dt><span class="section"><a href="#fmt_gpsutil">gpsutil (gpsutil)</a></span></dt><dt><span class="section"><a href="#fmt_gpx">GPX XML (gpx)</a></span></dt><dt><span class="section"><a href="#fmt_hiketech">HikeTech (hiketech)</a></span></dt><dt><span class="section"><a href="#fmt_holux">Holux (gm-100) .wpo Format (holux)</a></span></dt><dt><span class="section"><a href="#fmt_hsandv">HSA Endeavour Navigator export File (hsandv)</a></span></dt><dt><span class="section"><a href="#fmt_html">HTML Output (html)</a></span></dt><dt><span class="section"><a href="#fmt_ignrando">IGN Rando track files (ignrando)</a></span></dt><dt><span class="section"><a href="#fmt_ktf2">Kartex 5 Track File (ktf2)</a></span></dt><dt><span class="section"><a href="#fmt_kwf2">Kartex 5 Waypoint File (kwf2)</a></span></dt><dt><span class="section"><a href="#fmt_kompass_tk">Kompass (DAV) Track (.tk) (kompass_tk)</a></span></dt><dt><span class="section"><a href="#fmt_kompass_wp">Kompass (DAV) Waypoints (.wp) (kompass_wp)</a></span></dt><dt><span class="section"><a href="#fmt_psitrex">KuDaTa PsiTrex text (psitrex)</a></span></dt><dt><span class="section"><a href="#fmt_lowranceusr">Lowrance USR (lowranceusr)</a></span></dt><dt><span class="section"><a href="#fmt_maggeo">Magellan Explorist Geocaching (maggeo)</a></span></dt><dt><span class="section"><a href="#fmt_mapsend">Magellan Mapsend (mapsend)</a></span></dt><dt><span class="section"><a href="#fmt_magnav">Magellan NAV Companion for Palm/OS (magnav)</a></span></dt><dt><span class="section"><a href="#fmt_magellanx">Magellan SD files (as for eXplorist) (magellanx)</a></span></dt><dt><span class="section"><a href="#fmt_magellan">Magellan SD files (as for Meridian) (magellan)</a></span></dt><dt><span class="section"><a href="#fmt_magellan1">Magellan serial protocol (magellan)</a></span></dt><dt><span class="section"><a href="#fmt_tef">Map&Guide 'TourExchangeFormat' XML (tef)</a></span></dt><dt><span class="section"><a href="#fmt_mag_pdb">Map&Guide to Palm/OS exported files (.pdb) (mag_pdb)</a></span></dt><dt><span class="section"><a href="#fmt_mapconverter">Mapopolis.com Mapconverter CSV (mapconverter)</a></span></dt><dt><span class="section"><a href="#fmt_mxf">MapTech Exchange Format (mxf)</a></span></dt><dt><span class="section"><a href="#fmt_msroute">Microsoft AutoRoute 2002 (pin/route reader) (msroute)</a></span></dt><dt><span class="section"><a href="#fmt_msroute1">Microsoft Streets and Trips (pin/route reader) (msroute)</a></span></dt><dt><span class="section"><a href="#fmt_s_and_t">Microsoft Streets and Trips 2002-2006 (s_and_t)</a></span></dt><dt><span class="section"><a href="#fmt_bcr">Motorrad Routenplaner (Map&Guide) .bcr files (bcr)</a></span></dt><dt><span class="section"><a href="#fmt_psp">MS PocketStreets 2002 Pushpin (psp)</a></span></dt><dt><span class="section"><a href="#fmt_tpg">National Geographic Topo .tpg (waypoints) (tpg)</a></span></dt><dt><span class="section"><a href="#fmt_tpo2">National Geographic Topo 2.x .tpo (tpo2)</a></span></dt><dt><span class="section"><a href="#fmt_tpo3">National Geographic Topo 3.x/4.x .tpo (tpo3)</a></span></dt><dt><span class="section"><a href="#fmt_navicache">Navicache.com XML (navicache)</a></span></dt><dt><span class="section"><a href="#fmt_nmn4">Navigon Mobile Navigator .rte files (nmn4)</a></span></dt><dt><span class="section"><a href="#fmt_dna">Navitrak DNA marker format (dna)</a></span></dt><dt><span class="section"><a href="#fmt_netstumbler">NetStumbler Summary File (text) (netstumbler)</a></span></dt><dt><span class="section"><a href="#fmt_nima">NIMA/GNIS Geographic Names File (nima)</a></span></dt><dt><span class="section"><a href="#fmt_nmea">NMEA 0183 sentences (nmea)</a></span></dt><dt><span class="section"><a href="#fmt_ozi">OziExplorer (ozi)</a></span></dt><dt><span class="section"><a href="#fmt_palmdoc">PalmDoc Output (palmdoc)</a></span></dt><dt><span class="section"><a href="#fmt_pathaway">PathAway Database for Palm/OS (pathaway)</a></span></dt><dt><span class="section"><a href="#fmt_quovadis">Quovadis (quovadis)</a></span></dt><dt><span class="section"><a href="#fmt_raymarine">Raymarine Waypoint File (.rwf) (raymarine)</a></span></dt><dt><span class="section"><a href="#fmt_cup">See You flight analysis data (cup)</a></span></dt><dt><span class="section"><a href="#fmt_sportsim">Sportsim track files (part of zipped .ssz files) (sportsim)</a></span></dt><dt><span class="section"><a href="#fmt_stmsdf">Suunto Trek Manager (STM) .sdf files (stmsdf)</a></span></dt><dt><span class="section"><a href="#fmt_stmwpp">Suunto Trek Manager (STM) WaypointPlus files (stmwpp)</a></span></dt><dt><span class="section"><a href="#fmt_openoffice">Tab delimited fields useful for OpenOffice, Ploticus etc. (openoffice)</a></span></dt><dt><span class="section"><a href="#fmt_text">Textual Output (text)</a></span></dt><dt><span class="section"><a href="#fmt_tomtom">TomTom POI file (tomtom)</a></span></dt><dt><span class="section"><a href="#fmt_tmpro">TopoMapPro Places File (tmpro)</a></span></dt><dt><span class="section"><a href="#fmt_dmtlog">TrackLogs digital mapping (.trl) (dmtlog)</a></span></dt><dt><span class="section"><a href="#fmt_tiger">U.S. Census Bureau Tiger Mapping Service (tiger)</a></span></dt><dt><span class="section"><a href="#fmt_unicsv">Universal csv with field structure in first line (unicsv)</a></span></dt><dt><span class="section"><a href="#fmt_vcard">Vcard Output (for iPod) (vcard)</a></span></dt><dt><span class="section"><a href="#fmt_vitosmt">Vito Navigator II tracks (vitosmt)</a></span></dt><dt><span class="section"><a href="#fmt_wfff">WiFiFoFum 2.0 for PocketPC XML (wfff)</a></span></dt><dt><span class="section"><a href="#fmt_wbt-bin">Wintec WBT-100/200 Binary file format (wbt-bin)</a></span></dt><dt><span class="section"><a href="#fmt_wbt">Wintec WBT-100/200 GPS Download (wbt)</a></span></dt><dt><span class="section"><a href="#fmt_yahoo">Yahoo Geocode API data (yahoo)</a></span></dt></dl></dd><dt><span class="chapter"><a href="#Data_Filters">4. Data Filters</a></span></dt><dd><dl><dt><span class="section"><a href="#filter_polygon">Include Only Points Inside Polygon (polygon)</a></span></dt><dt><span class="section"><a href="#filter_arc">Include Only Points Within Distance of Arc (arc)</a></span></dt><dt><span class="section"><a href="#filter_radius">Include Only Points Within Radius (radius)</a></span></dt><dt><span class="section"><a href="#filter_interpolate">Interpolate between trackpoints (interpolate)</a></span></dt><dt><span class="section"><a href="#filter_track">Manipulate track lists (track)</a></span></dt><dt><span class="section"><a href="#filter_sort">Rearrange waypoints by resorting (sort)</a></span></dt><dt><span class="section"><a href="#filter_nuketypes">Remove all waypoints, tracks, or routes (nuketypes)</a></span></dt><dt><span class="section"><a href="#filter_duplicate">Remove Duplicates (duplicate)</a></span></dt><dt><span class="section"><a href="#filter_position">Remove Points Within Distance (position)</a></span></dt><dt><span class="section"><a href="#filter_discard">Remove unreliable points with high hdop or vdop (discard)</a></span></dt><dt><span class="section"><a href="#filter_reverse">Reverse stops within routes (reverse)</a></span></dt><dt><span class="section"><a href="#filter_stack">Save and restore waypoint lists (stack)</a></span></dt><dt><span class="section"><a href="#filter_simplify">Simplify routes (simplify)</a></span></dt><dt><span class="section"><a href="#filter_transform">Transform waypoints into a route, tracks into routes, ... (transform)</a></span></dt></dl></dd><dt><span class="appendix"><a href="#Datums">A. Supported Datums</a></span></dt><dt><span class="appendix"><a href="#GarminIcons">B. Garmin Icons</a></span></dt><dt><span class="appendix"><a href="#Styles">C. GPSBabel XCSV Style Files</a></span></dt><dd><dl><dt><span class="section"><a href="#styles_intro">Introduction</a></span></dt><dt><span class="section"><a href="#style_intro2">Style file overview</a></span></dt><dt><span class="section"><a href="#styles_internal_const">Internal Constants</a></span></dt><dt><span class="section"><a href="#style_global">Global Properties of the File</a></span></dt><dt><span class="section"><a href="#style_behavior">GPSBabel Behavior Directives</a></span></dt><dt><span class="section"><a href="#style_layout">Defining the Layout of the File</a></span></dt><dt><span class="section"><a href="#style_define">Defining Fields Within the File</a></span></dt><dt><span class="section"><a href="#style_examples">Examples</a></span></dt><dt><span class="section"><a href="#style_notes">Miscellaneous Notes</a></span></dt></dl></dd></dl></div><div class="list-of-tables"><p><b>List of Tables</b></p><dl><dt>3.1. <a href="#garmin_grid">Grid values for garmin_txt</a></dt></dl></div><div class="list-of-examples"><p><b>List of Examples</b></p><dl><dt>3.1. <a href="#all_garmin_txt_options">Command showing garmin_txt output with all options</a></dt><dt>3.2. <a href="#sample_bcr_command">Sample BCR command with all options</a></dt><dt>3.3. <a href="#wbt-bin-on-macos">Command showing conversion of a Wintec binary file to GPX</a></dt><dt>3.4. <a href="#wbt-on-macos">Command showing WBT-200 download and erase over Bluetooth on Mac OS X</a></dt><dt>4.1. <a href="#example_polygon_filter">Using the polygon filter</a></dt><dt>4.2. <a href="#example_in_or_close_to">Using the polygon and arc filters to find points in or nearly in a
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>GPSBabel Documentation</title><link rel="stylesheet" href="http://www.gpsbabel.org/style3.css" type="text/css" /><meta name="generator" content="DocBook XSL Stylesheets V1.72.0" /></head><body><div class="book" lang="en" xml:lang="en"><div class="titlepage"><div><div><h1 class="title"><a id="GPSBabel_Documentation_Book"></a>GPSBabel Documentation</h1></div></div><hr /></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="preface"><a href="#Introduction">Introduction</a></span></dt><dd><dl><dt><span class="section"><a href="#The_Problem">The Problem: Too many incompatible GPS file formats</a></span></dt><dt><span class="section"><a href="#The_Solution">The Solution</a></span></dt></dl></dd><dt><span class="chapter"><a href="#Getting_and_Building">1. Getting it and Building it</a></span></dt><dt><span class="chapter"><a href="#Usage">2. Usage</a></span></dt><dd><dl><dt><span class="sect1"><a href="#Invocation">Invocation</a></span></dt><dt><span class="sect1"><a href="#Suboptions">Suboptions</a></span></dt><dt><span class="sect1"><a href="#Advanced_Usage">Advanced Usage</a></span></dt><dt><span class="sect1"><a href="#Route_And_Track_Modes">Route and Track Modes</a></span></dt><dt><span class="sect1"><a href="#inifile">Working with predefined options</a></span></dt><dt><span class="sect1"><a href="#tracking">Realtime tracking</a></span></dt><dt><span class="sect1"><a href="#batchfile">Batch mode (command files)</a></span></dt></dl></dd><dt><span class="chapter"><a href="#The_Formats">3. The Formats</a></span></dt><dd><dl><dt><span class="section"><a href="#fmt_xcsv">? Character Separated Values (xcsv)</a></span></dt><dt><span class="section"><a href="#fmt_alantrl">Alan Map500 tracklogs (.trl) (alantrl)</a></span></dt><dt><span class="section"><a href="#fmt_alanwpr">Alan Map500 waypoints and routes (.wpr) (alanwpr)</a></span></dt><dt><span class="section"><a href="#fmt_tabsep">All database fields on one tab-separated line (tabsep)</a></span></dt><dt><span class="section"><a href="#fmt_baroiq">Brauniger IQ Series Barograph Download (baroiq)</a></span></dt><dt><span class="section"><a href="#fmt_cambridge">Cambridge/Winpilot glider software (cambridge)</a></span></dt><dt><span class="section"><a href="#fmt_cst">CarteSurTable data file (cst)</a></span></dt><dt><span class="section"><a href="#fmt_cetus">Cetus for Palm/OS (cetus)</a></span></dt><dt><span class="section"><a href="#fmt_coastexp">CoastalExplorer XML (coastexp)</a></span></dt><dt><span class="section"><a href="#fmt_csv">Comma separated values (csv)</a></span></dt><dt><span class="section"><a href="#fmt_compegps">CompeGPS data files (.wpt/.trk/.rte) (compegps)</a></span></dt><dt><span class="section"><a href="#fmt_copilot">CoPilot Flight Planner for Palm/OS (copilot)</a></span></dt><dt><span class="section"><a href="#fmt_coto">cotoGPS for Palm/OS (coto)</a></span></dt><dt><span class="section"><a href="#fmt_custom">Custom "Everything" Style (custom)</a></span></dt><dt><span class="section"><a href="#fmt_axim_gpb">Dell Axim Navigation System (.gpb) file format (axim_gpb)</a></span></dt><dt><span class="section"><a href="#fmt_an1">DeLorme .an1 (drawing) file (an1)</a></span></dt><dt><span class="section"><a href="#fmt_gpl">DeLorme GPL (gpl)</a></span></dt><dt><span class="section"><a href="#fmt_saplus">DeLorme Street Atlas Plus (saplus)</a></span></dt><dt><span class="section"><a href="#fmt_saroute">DeLorme Street Atlas Route (saroute)</a></span></dt><dt><span class="section"><a href="#fmt_xmap">DeLorme XMap HH Native .WPT (xmap)</a></span></dt><dt><span class="section"><a href="#fmt_xmap2006">DeLorme XMap/SAHH 2006 Native .TXT (xmap2006)</a></span></dt><dt><span class="section"><a href="#fmt_xmapwpt">DeLorme XMat HH Street Atlas USA .WPT (PPC) (xmapwpt)</a></span></dt><dt><span class="section"><a href="#fmt_easygps">EasyGPS binary format (easygps)</a></span></dt><dt><span class="section"><a href="#fmt_igc">FAI/IGC Flight Recorder Data Format (igc)</a></span></dt><dt><span class="section"><a href="#fmt_gpssim">Franson GPSGate Simulation (gpssim)</a></span></dt><dt><span class="section"><a href="#fmt_fugawi">Fugawi (fugawi)</a></span></dt><dt><span class="section"><a href="#fmt_g7towin">G7ToWin data files (.g7t) (g7towin)</a></span></dt><dt><span class="section"><a href="#fmt_garmin301">Garmin 301 Custom position and heartrate (garmin301)</a></span></dt><dt><span class="section"><a href="#fmt_glogbook">Garmin Logbook XML (glogbook)</a></span></dt><dt><span class="section"><a href="#fmt_gdb">Garmin MapSource - gdb (gdb)</a></span></dt><dt><span class="section"><a href="#fmt_mapsource">Garmin MapSource - mps (mapsource)</a></span></dt><dt><span class="section"><a href="#fmt_garmin_txt">Garmin MapSource - txt (tab delimited) (garmin_txt)</a></span></dt><dt><span class="section"><a href="#fmt_pcx">Garmin PCX5 (pcx)</a></span></dt><dt><span class="section"><a href="#fmt_garmin_poi">Garmin POI database (garmin_poi)</a></span></dt><dt><span class="section"><a href="#fmt_garmin_gpi">Garmin Points of Interest (.gpi) (garmin_gpi)</a></span></dt><dt><span class="section"><a href="#fmt_garmin">Garmin serial/USB protocol (garmin)</a></span></dt><dt><span class="section"><a href="#fmt_gtrnctr">Garmin Training Centerxml (gtrnctr)</a></span></dt><dt><span class="section"><a href="#fmt_geo">Geocaching.com .loc (geo)</a></span></dt><dt><span class="section"><a href="#fmt_gcdb">GeocachingDB for Palm/OS (gcdb)</a></span></dt><dt><span class="section"><a href="#fmt_ggv_log">Geogrid Viewer tracklogs (.log) (ggv_log)</a></span></dt><dt><span class="section"><a href="#fmt_geonet">GEOnet Names Server (GNS) (geonet)</a></span></dt><dt><span class="section"><a href="#fmt_geoniche">GeoNiche .pdb (geoniche)</a></span></dt><dt><span class="section"><a href="#fmt_kml">Google Earth (Keyhole) Markup Language (kml)</a></span></dt><dt><span class="section"><a href="#fmt_google">Google Maps XML (google)</a></span></dt><dt><span class="section"><a href="#fmt_gpilots">GpilotS (gpilots)</a></span></dt><dt><span class="section"><a href="#fmt_gtm">GPS TrackMaker (gtm)</a></span></dt><dt><span class="section"><a href="#fmt_arc">GPSBabel arc filter file (arc)</a></span></dt><dt><span class="section"><a href="#fmt_gpsdrive">GpsDrive Format (gpsdrive)</a></span></dt><dt><span class="section"><a href="#fmt_gpsdrivetrack">GpsDrive Format for Tracks (gpsdrivetrack)</a></span></dt><dt><span class="section"><a href="#fmt_gpsman">GPSman (gpsman)</a></span></dt><dt><span class="section"><a href="#fmt_gpspilot">GPSPilot Tracker for Palm/OS (gpspilot)</a></span></dt><dt><span class="section"><a href="#fmt_gpsutil">gpsutil (gpsutil)</a></span></dt><dt><span class="section"><a href="#fmt_gpx">GPX XML (gpx)</a></span></dt><dt><span class="section"><a href="#fmt_hiketech">HikeTech (hiketech)</a></span></dt><dt><span class="section"><a href="#fmt_holux">Holux (gm-100) .wpo Format (holux)</a></span></dt><dt><span class="section"><a href="#fmt_hsandv">HSA Endeavour Navigator export File (hsandv)</a></span></dt><dt><span class="section"><a href="#fmt_html">HTML Output (html)</a></span></dt><dt><span class="section"><a href="#fmt_ignrando">IGN Rando track files (ignrando)</a></span></dt><dt><span class="section"><a href="#fmt_ktf2">Kartex 5 Track File (ktf2)</a></span></dt><dt><span class="section"><a href="#fmt_kwf2">Kartex 5 Waypoint File (kwf2)</a></span></dt><dt><span class="section"><a href="#fmt_kompass_tk">Kompass (DAV) Track (.tk) (kompass_tk)</a></span></dt><dt><span class="section"><a href="#fmt_kompass_wp">Kompass (DAV) Waypoints (.wp) (kompass_wp)</a></span></dt><dt><span class="section"><a href="#fmt_psitrex">KuDaTa PsiTrex text (psitrex)</a></span></dt><dt><span class="section"><a href="#fmt_lowranceusr">Lowrance USR (lowranceusr)</a></span></dt><dt><span class="section"><a href="#fmt_maggeo">Magellan Explorist Geocaching (maggeo)</a></span></dt><dt><span class="section"><a href="#fmt_mapsend">Magellan Mapsend (mapsend)</a></span></dt><dt><span class="section"><a href="#fmt_magnav">Magellan NAV Companion for Palm/OS (magnav)</a></span></dt><dt><span class="section"><a href="#fmt_magellanx">Magellan SD files (as for eXplorist) (magellanx)</a></span></dt><dt><span class="section"><a href="#fmt_magellan">Magellan SD files (as for Meridian) (magellan)</a></span></dt><dt><span class="section"><a href="#fmt_magellan1">Magellan serial protocol (magellan)</a></span></dt><dt><span class="section"><a href="#fmt_tef">Map&Guide 'TourExchangeFormat' XML (tef)</a></span></dt><dt><span class="section"><a href="#fmt_mag_pdb">Map&Guide to Palm/OS exported files (.pdb) (mag_pdb)</a></span></dt><dt><span class="section"><a href="#fmt_mapconverter">Mapopolis.com Mapconverter CSV (mapconverter)</a></span></dt><dt><span class="section"><a href="#fmt_mxf">MapTech Exchange Format (mxf)</a></span></dt><dt><span class="section"><a href="#fmt_msroute">Microsoft AutoRoute 2002 (pin/route reader) (msroute)</a></span></dt><dt><span class="section"><a href="#fmt_msroute1">Microsoft Streets and Trips (pin/route reader) (msroute)</a></span></dt><dt><span class="section"><a href="#fmt_s_and_t">Microsoft Streets and Trips 2002-2006 (s_and_t)</a></span></dt><dt><span class="section"><a href="#fmt_bcr">Motorrad Routenplaner (Map&Guide) .bcr files (bcr)</a></span></dt><dt><span class="section"><a href="#fmt_psp">MS PocketStreets 2002 Pushpin (psp)</a></span></dt><dt><span class="section"><a href="#fmt_tpg">National Geographic Topo .tpg (waypoints) (tpg)</a></span></dt><dt><span class="section"><a href="#fmt_tpo2">National Geographic Topo 2.x .tpo (tpo2)</a></span></dt><dt><span class="section"><a href="#fmt_tpo3">National Geographic Topo 3.x/4.x .tpo (tpo3)</a></span></dt><dt><span class="section"><a href="#fmt_navicache">Navicache.com XML (navicache)</a></span></dt><dt><span class="section"><a href="#fmt_nmn4">Navigon Mobile Navigator .rte files (nmn4)</a></span></dt><dt><span class="section"><a href="#fmt_dna">Navitrak DNA marker format (dna)</a></span></dt><dt><span class="section"><a href="#fmt_netstumbler">NetStumbler Summary File (text) (netstumbler)</a></span></dt><dt><span class="section"><a href="#fmt_nima">NIMA/GNIS Geographic Names File (nima)</a></span></dt><dt><span class="section"><a href="#fmt_nmea">NMEA 0183 sentences (nmea)</a></span></dt><dt><span class="section"><a href="#fmt_ozi">OziExplorer (ozi)</a></span></dt><dt><span class="section"><a href="#fmt_palmdoc">PalmDoc Output (palmdoc)</a></span></dt><dt><span class="section"><a href="#fmt_pathaway">PathAway Database for Palm/OS (pathaway)</a></span></dt><dt><span class="section"><a href="#fmt_quovadis">Quovadis (quovadis)</a></span></dt><dt><span class="section"><a href="#fmt_raymarine">Raymarine Waypoint File (.rwf) (raymarine)</a></span></dt><dt><span class="section"><a href="#fmt_cup">See You flight analysis data (cup)</a></span></dt><dt><span class="section"><a href="#fmt_sportsim">Sportsim track files (part of zipped .ssz files) (sportsim)</a></span></dt><dt><span class="section"><a href="#fmt_stmsdf">Suunto Trek Manager (STM) .sdf files (stmsdf)</a></span></dt><dt><span class="section"><a href="#fmt_stmwpp">Suunto Trek Manager (STM) WaypointPlus files (stmwpp)</a></span></dt><dt><span class="section"><a href="#fmt_openoffice">Tab delimited fields useful for OpenOffice, Ploticus etc. (openoffice)</a></span></dt><dt><span class="section"><a href="#fmt_text">Textual Output (text)</a></span></dt><dt><span class="section"><a href="#fmt_tomtom_itn">TomTom Itineraries (.itn) (tomtom_itn)</a></span></dt><dt><span class="section"><a href="#fmt_tomtom_asc">TomTom POI file (.asc) (tomtom_asc)</a></span></dt><dt><span class="section"><a href="#fmt_tomtom">TomTom POI file (.ov2) (tomtom)</a></span></dt><dt><span class="section"><a href="#fmt_tmpro">TopoMapPro Places File (tmpro)</a></span></dt><dt><span class="section"><a href="#fmt_dmtlog">TrackLogs digital mapping (.trl) (dmtlog)</a></span></dt><dt><span class="section"><a href="#fmt_tiger">U.S. Census Bureau Tiger Mapping Service (tiger)</a></span></dt><dt><span class="section"><a href="#fmt_unicsv">Universal csv with field structure in first line (unicsv)</a></span></dt><dt><span class="section"><a href="#fmt_vcard">Vcard Output (for iPod) (vcard)</a></span></dt><dt><span class="section"><a href="#fmt_vitosmt">Vito Navigator II tracks (vitosmt)</a></span></dt><dt><span class="section"><a href="#fmt_vitovtt">Vito SmartMap tracks (.vtt) (vitovtt)</a></span></dt><dt><span class="section"><a href="#fmt_wfff">WiFiFoFum 2.0 for PocketPC XML (wfff)</a></span></dt><dt><span class="section"><a href="#fmt_wbt-bin">Wintec WBT-100/200 Binary File Format (wbt-bin)</a></span></dt><dt><span class="section"><a href="#fmt_wbt">Wintec WBT-100/200 GPS Download (wbt)</a></span></dt><dt><span class="section"><a href="#fmt_wbt-tk1">Wintec WBT-201/G-Rays 2 Binary File Format (wbt-tk1)</a></span></dt><dt><span class="section"><a href="#fmt_yahoo">Yahoo Geocode API data (yahoo)</a></span></dt></dl></dd><dt><span class="chapter"><a href="#Data_Filters">4. Data Filters</a></span></dt><dd><dl><dt><span class="section"><a href="#filter_polygon">Include Only Points Inside Polygon (polygon)</a></span></dt><dt><span class="section"><a href="#filter_arc">Include Only Points Within Distance of Arc (arc)</a></span></dt><dt><span class="section"><a href="#filter_radius">Include Only Points Within Radius (radius)</a></span></dt><dt><span class="section"><a href="#filter_interpolate">Interpolate between trackpoints (interpolate)</a></span></dt><dt><span class="section"><a href="#filter_track">Manipulate track lists (track)</a></span></dt><dt><span class="section"><a href="#filter_sort">Rearrange waypoints by resorting (sort)</a></span></dt><dt><span class="section"><a href="#filter_nuketypes">Remove all waypoints, tracks, or routes (nuketypes)</a></span></dt><dt><span class="section"><a href="#filter_duplicate">Remove Duplicates (duplicate)</a></span></dt><dt><span class="section"><a href="#filter_position">Remove Points Within Distance (position)</a></span></dt><dt><span class="section"><a href="#filter_discard">Remove unreliable points with high hdop or vdop (discard)</a></span></dt><dt><span class="section"><a href="#filter_reverse">Reverse stops within routes (reverse)</a></span></dt><dt><span class="section"><a href="#filter_stack">Save and restore waypoint lists (stack)</a></span></dt><dt><span class="section"><a href="#filter_simplify">Simplify routes (simplify)</a></span></dt><dt><span class="section"><a href="#filter_transform">Transform waypoints into a route, tracks into routes, ... (transform)</a></span></dt></dl></dd><dt><span class="appendix"><a href="#Datums">A. Supported Datums</a></span></dt><dt><span class="appendix"><a href="#GarminIcons">B. Garmin Icons</a></span></dt><dt><span class="appendix"><a href="#Styles">C. GPSBabel XCSV Style Files</a></span></dt><dd><dl><dt><span class="section"><a href="#styles_intro">Introduction</a></span></dt><dt><span class="section"><a href="#style_intro2">Style file overview</a></span></dt><dt><span class="section"><a href="#styles_internal_const">Internal Constants</a></span></dt><dt><span class="section"><a href="#style_global">Global Properties of the File</a></span></dt><dt><span class="section"><a href="#style_behavior">GPSBabel Behavior Directives</a></span></dt><dt><span class="section"><a href="#style_layout">Defining the Layout of the File</a></span></dt><dt><span class="section"><a href="#style_define">Defining Fields Within the File</a></span></dt><dt><span class="section"><a href="#style_examples">Examples</a></span></dt><dt><span class="section"><a href="#style_notes">Miscellaneous Notes</a></span></dt></dl></dd><dt><span class="glossary"><a href="#Glossary">Glossary</a></span></dt></dl></div><div class="list-of-tables"><p><b>List of Tables</b></p><dl><dt>3.1. <a href="#garmin_grid">Grid values for garmin_txt</a></dt><dt>3.2. <a href="#id2984364">track file header (8 bytes)</a></dt><dt>3.3. <a href="#id2984418">track point (32 bytes)</a></dt></dl></div><div class="list-of-examples"><p><b>List of Examples</b></p><dl><dt>3.1. <a href="#gdb_roadbook_option">Using gdb option <code class="option">roadbook</code> to create simple html roadbook</a></dt><dt>3.2. <a href="#all_garmin_txt_options">Command showing garmin_txt output with all options</a></dt><dt>3.3. <a href="#all_garmin_gpi_options">Command showing garmin_gpi output example</a></dt><dt>3.4. <a href="#sample_bcr_command">Sample BCR command with all options</a></dt><dt>3.5. <a href="#text_splitoutput">Example for splitoutput option to text format</a></dt><dt>3.6. <a href="#wbt-bin-on-macos">Command showing conversion of a Wintec binary file to GPX</a></dt><dt>3.7. <a href="#wbt-on-macos">Command showing WBT-200 download and erase over Bluetooth on Mac OS X</a></dt><dt>3.8. <a href="#wbt-tk1">Command showing conversion of a Wintec binary file to GPX</a></dt><dt>4.1. <a href="#example_polygon_filter">Using the polygon filter</a></dt><dt>4.2. <a href="#example_in_or_close_to">Using the polygon and arc filters to find points in or nearly in a
polygon</a></dt><dt>4.3. <a href="#example_arc_filter">Using the arc filter</a></dt><dt>4.4. <a href="#radius_to_find_points_close">Using the radius filter to find points close to a given point</a></dt><dt>4.5. <a href="#example_interpolate_filter">Using the interpolate filter</a></dt><dt>4.6. <a href="#ex_track_move">Time-shifting a track with the track filter</a></dt><dt>4.7. <a href="#ex_track_merge">Merging tracks with the track filter</a></dt><dt>4.8. <a href="#ex_track_startstop">Extracting a period of time with the track filter</a></dt><dt>4.9. <a href="#example_nuketypes_filter">Filtering data types with nuketypes</a></dt><dt>4.10. <a href="#duplicate_to_suppress_points">Using the duplicate filter to suppress points with the same
name and location</a></dt><dt>4.11. <a href="#duplicate_to_ignore">Using the duplicate filter to implement an "ignore list."</a></dt><dt>4.12. <a href="#Correcting_Cache_Locations">Using the duplicate filter to correct the locations of "puzzle"
-geocaches</a></dt><dt>4.13. <a href="#posn_to_suppress_close_points">Using the position filter to suppress close points</a></dt><dt>4.14. <a href="#example_discard_filter">Using the discard filter</a></dt><dt>4.15. <a href="#transform_to_wpt">Converting a track to a sequence of waypoints</a></dt><dt>4.16. <a href="#transform_to_rte">Converting a pile of waypoints to a GPX route</a></dt><dt>4.17. <a href="#transform_to_trk">Converting a pile of waypoints to a GPX track</a></dt><dt>4.18. <a href="#transform_del">Convert a GPX track to GPX waypoints, tossing the original track</a></dt></dl></div><div class="preface" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="Introduction"></a>Introduction</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#The_Problem">The Problem: Too many incompatible formats</a></span></dt><dt><span class="section"><a href="#The_Solution">The Solution</a></span></dt></dl></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="The_Problem"></a>The Problem: Too many incompatible formats</h2></div></div></div><p> There are simply too many gratuitously different file formats
+geocaches</a></dt><dt>4.13. <a href="#posn_to_suppress_close_points">Using the position filter to suppress close points</a></dt><dt>4.14. <a href="#example_discard_filter">Using the discard filter</a></dt><dt>4.15. <a href="#transform_to_wpt">Converting a track to a sequence of waypoints</a></dt><dt>4.16. <a href="#transform_to_rte">Converting a pile of waypoints to a GPX route</a></dt><dt>4.17. <a href="#transform_to_trk">Converting a pile of waypoints to a GPX track</a></dt><dt>4.18. <a href="#transform_del">Convert a GPX track to GPX waypoints, tossing the original track</a></dt></dl></div><div class="preface" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="Introduction"></a>Introduction</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#The_Problem">The Problem: Too many incompatible GPS file formats</a></span></dt><dt><span class="section"><a href="#The_Solution">The Solution</a></span></dt></dl></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="The_Problem"></a>The Problem: Too many incompatible GPS file formats</h2></div></div></div><p> There are simply too many gratuitously different file formats
to hold waypoint, track, and route information in various programs
used by computers and GPS receivers.
<a href="http://www.topografix.com/gpx.asp" target="_top">GPX</a> defines a
</p><p>There are additional flags that can be passed to configure to
customize your build of GPSBabel.
</p><p><strong class="userinput"><code>./configure --help</code></strong></p><p>
-lists all the supported options, but additionally we have:
+lists all the supported options, but additionally we have:</p><p>
<code class="option">--disable-shapefile</code> Excludes the shapefile support.
</p><p>
<code class="option">--disable-pdb</code> Excludes the Palm database support and all formats that rely on it.
</p><p>To use
this program, just tell it what you're reading, where to read
it from, what you're writing, and what to write it to. For
- example:</p><p><strong class="userinput"><code>gpsbabel -i geo -f /tmp/geocaching.loc -o gpx -F /tmp/geocaching.gpx</code></strong></p><p>tells it to read the file "/tmp/geocaching.loc" in geocaching.com
- format and create a new file in GPX format.</p><p> This command will read from a Magellan unit attached
+ example:</p><p><strong class="userinput"><code>gpsbabel -i geo -f /tmp/geocaching.loc -o gpx -F /tmp/geocaching.gpx</code></strong></p><p>tells it to read the file <code class="filename">/tmp/geocaching.loc</code> in geocaching.com
+ format and create a new file <code class="filename">/tmp/geocaching.gpx</code> in GPX format. It's important to note that the names have nothign to do with the formats actually used.</p><p> This command will read from a Magellan unit attached
to the first serial port on a Linux system (device names will
- vary on other OSes) and write them as a geocaching loc file.
- The second command does the same on Microsoft Windows.</p><p><strong class="userinput"><code>gpsbabel -i magellan -f /dev/ttyS0 -o geo -F mag.loc</code></strong></p><p><strong class="userinput"><code>gpsbabel -i magellan -f com1 -o geo -F mag.loc</code></strong></p><p>Optionally, you may specify <em class="parameter"><code>"-s"</code></em> in any command line. This
+ vary on other OSes) and write them as a geocaching loc file.</p><p><strong class="userinput"><code>gpsbabel -i magellan -f /dev/ttyS0 -o geo -F mag.loc</code></strong></p><p>This second command does the same on Microsoft Windows.</p><p><strong class="userinput"><code>gpsbabel -i magellan -f com1 -o geo -F mag.loc</code></strong></p><p>Optionally, you may specify <em class="parameter"><code>-s</code></em> in any command line. This
causes the program to ignore any "short" names that may be
present in the source data format and synthesize one from the
long name. This is particularly useful if you're writing to
like this useful.</p><p><strong class="userinput"><code>gpsbabel -s -i geo -f geocaching.loc -o magellan -F /dev/ttyS0 </code></strong></p><p><strong class="userinput"><code>gpsbabel -s -i geo -f geocaching.loc -o magellan -F com1</code></strong></p></div><div class="sect1" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="Suboptions"></a>Suboptions</h2></div></div></div><p>
Many of the available format options in GPSBabel can themselves
take options. While we try to make all the formats do the most
- sensible thing possible without any extra options, this allows
+ sensible thing possible without any extra options; this allows
great power and flexibility in the operation of the program.
</p><p>
Suboptions are comma separated and immediately follow the option
output side you can do this with the option <code class="option">-c
<character set></code>. You can get a complete list
of supported character sets with "gpsbabel -l". To change
- the character set on both sides you should do this:</p><p><strong class="userinput"><code>gpsbabel -i xcsv,style=foo.style -c latin1 -f foo -o xcsv,style=bar.style -c ms-ansi -F bar</code></strong></p><p>Note, that some formats has a fixed character set and ignore this option.</p></div><div class="sect1" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="Route_And_Track_Modes"></a>Route and Track Modes</h2></div></div></div><p> Most formats supported by GPSBabel will make a reasonable attempt to work
+ the character set on both sides you should do this:</p><p><strong class="userinput"><code>gpsbabel -i xcsv,style=foo.style -c latin1 -f foo -o xcsv,style=bar.style -c ms-ansi -F bar</code></strong></p><p>Note, that some formats have a fixed character set and ignore this option.</p></div><div class="sect1" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="Route_And_Track_Modes"></a>Route and Track Modes</h2></div></div></div><p> Most formats supported by GPSBabel will make a reasonable attempt to work
transparently with waypoints, tracks, and routes. Some
formats, like <a href="#fmt_garmin" title="Garmin serial/USB protocol (garmin)">garmin</a> and <a href="#fmt_magellan" title="Magellan SD files (as for Meridian) (magellan)">magellan</a> require the <em class="parameter"><code>-t</code></em> flag to work with tracks and
<em class="parameter"><code>-r</code></em> to work with
retained the 30 most mathematically significant turnpoints but that
may not really be the route you had in mind.
</p><p> Tracks and routes will sometimes be converted to a
- list of waypoints when necessary, f.i. when writing into one
+ list of waypoints when necessary, One example is when writing into one
of the CSV formats. The inverse operation is not supported
right now, so reading the converted track back from CSV will
always result in a list of waypoints, not the original track.
Introduced in GPSBabel 1.3.1, we now have an <span class="emphasis"><em>experimental</em></span> feature for realtime tracking via the new <code class="option">-T</code> option. This reads position reports from selected formats and writes an output file when a position report is received.
</p><p>
As of this writing, Garmin's PVT protocol and NMEA are supported
- inputs and KML is supported on output. Additional formats
- may be added by interested parties later.
+ inputs. KML, NMEA, and the variou XCSV formats are supported on
+ output. Additional formats may be added by interested parties
+ later.
</p><p><strong class="userinput"><code>gpsbabel -T -i garmin -f usb: -o kml -F xxx.kml</code></strong></p><p>
Will read the USB-connected Garmin and rewrite 'xxx.kml' atomically,
suitable for a self-refreshing network link in Google Earth.
by placing the input and filtering directives in a file called 'all_my_files'.
</p><p><strong class="userinput"><code>gpsbabel -b all_my_files -o gdb -F all_my_tracks.gdb</code></strong></p><p>
'all_my_files' could look like this:
- </p><table class="simplelist" border="0" summary="Simple list"><tr><td>-i gpx</td></tr><tr><td>-f saxony_in_summer_2004.gpx -f austria_2005.gpx</td></tr><tr><td>-i gdb</td></tr><tr><td>-f croatia_2006.gdb</td></tr><tr><td>-x nuketypes,waypoints,routes</td></tr><tr><td>-x track,pack,split,title="LOG # %Y%m%d"</td></tr></table></div></div><div class="chapter" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="The_Formats"></a>Chapter 3. The Formats</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#fmt_xcsv">? Character Separated Values (xcsv)</a></span></dt><dt><span class="section"><a href="#fmt_alantrl">Alan Map500 tracklogs (.trl) (alantrl)</a></span></dt><dt><span class="section"><a href="#fmt_alanwpr">Alan Map500 waypoints and routes (.wpr) (alanwpr)</a></span></dt><dt><span class="section"><a href="#fmt_tabsep">All database fields on one tab-separated line (tabsep)</a></span></dt><dt><span class="section"><a href="#fmt_baroiq">Brauniger IQ Series Barograph Download (baroiq)</a></span></dt><dt><span class="section"><a href="#fmt_cambridge">Cambridge/Winpilot glider software (cambridge)</a></span></dt><dt><span class="section"><a href="#fmt_cst">CarteSurTable data file (cst)</a></span></dt><dt><span class="section"><a href="#fmt_cetus">Cetus for Palm/OS (cetus)</a></span></dt><dt><span class="section"><a href="#fmt_coastexp">CoastalExplorer XML (coastexp)</a></span></dt><dt><span class="section"><a href="#fmt_csv">Comma separated values (csv)</a></span></dt><dt><span class="section"><a href="#fmt_compegps">CompeGPS data files (.wpt/.trk/.rte) (compegps)</a></span></dt><dt><span class="section"><a href="#fmt_copilot">CoPilot Flight Planner for Palm/OS (copilot)</a></span></dt><dt><span class="section"><a href="#fmt_coto">cotoGPS for Palm/OS (coto)</a></span></dt><dt><span class="section"><a href="#fmt_custom">Custom "Everything" Style (custom)</a></span></dt><dt><span class="section"><a href="#fmt_axim_gpb">Dell Axim Navigation System (.gpb) file format (axim_gpb)</a></span></dt><dt><span class="section"><a href="#fmt_an1">DeLorme .an1 (drawing) file (an1)</a></span></dt><dt><span class="section"><a href="#fmt_gpl">DeLorme GPL (gpl)</a></span></dt><dt><span class="section"><a href="#fmt_saplus">DeLorme Street Atlas Plus (saplus)</a></span></dt><dt><span class="section"><a href="#fmt_saroute">DeLorme Street Atlas Route (saroute)</a></span></dt><dt><span class="section"><a href="#fmt_xmap">DeLorme XMap HH Native .WPT (xmap)</a></span></dt><dt><span class="section"><a href="#fmt_xmap2006">DeLorme XMap/SAHH 2006 Native .TXT (xmap2006)</a></span></dt><dt><span class="section"><a href="#fmt_xmapwpt">DeLorme XMat HH Street Atlas USA .WPT (PPC) (xmapwpt)</a></span></dt><dt><span class="section"><a href="#fmt_easygps">EasyGPS binary format (easygps)</a></span></dt><dt><span class="section"><a href="#fmt_igc">FAI/IGC Flight Recorder Data Format (igc)</a></span></dt><dt><span class="section"><a href="#fmt_gpssim">Franson GPSGate Simulation (gpssim)</a></span></dt><dt><span class="section"><a href="#fmt_fugawi">Fugawi (fugawi)</a></span></dt><dt><span class="section"><a href="#fmt_garmin301">Garmin 301 Custom position and heartrate (garmin301)</a></span></dt><dt><span class="section"><a href="#fmt_glogbook">Garmin Logbook XML (glogbook)</a></span></dt><dt><span class="section"><a href="#fmt_gdb">Garmin MapSource - gdb (gdb)</a></span></dt><dt><span class="section"><a href="#fmt_mapsource">Garmin MapSource - mps (mapsource)</a></span></dt><dt><span class="section"><a href="#fmt_garmin_txt">Garmin MapSource - txt (tab delimited) (garmin_txt)</a></span></dt><dt><span class="section"><a href="#fmt_pcx">Garmin PCX5 (pcx)</a></span></dt><dt><span class="section"><a href="#fmt_garmin_poi">Garmin POI database (garmin_poi)</a></span></dt><dt><span class="section"><a href="#fmt_garmin">Garmin serial/USB protocol (garmin)</a></span></dt><dt><span class="section"><a href="#fmt_gtrnctr">Garmin Training Centerxml (gtrnctr)</a></span></dt><dt><span class="section"><a href="#fmt_geo">Geocaching.com .loc (geo)</a></span></dt><dt><span class="section"><a href="#fmt_gcdb">GeocachingDB for Palm/OS (gcdb)</a></span></dt><dt><span class="section"><a href="#fmt_geonet">GEOnet Names Server (GNS) (geonet)</a></span></dt><dt><span class="section"><a href="#fmt_geoniche">GeoNiche .pdb (geoniche)</a></span></dt><dt><span class="section"><a href="#fmt_kml">Google Earth (Keyhole) Markup Language (kml)</a></span></dt><dt><span class="section"><a href="#fmt_google">Google Maps XML (google)</a></span></dt><dt><span class="section"><a href="#fmt_gpilots">GpilotS (gpilots)</a></span></dt><dt><span class="section"><a href="#fmt_gtm">GPS TrackMaker (gtm)</a></span></dt><dt><span class="section"><a href="#fmt_arc">GPSBabel arc filter file (arc)</a></span></dt><dt><span class="section"><a href="#fmt_gpsdrive">GpsDrive Format (gpsdrive)</a></span></dt><dt><span class="section"><a href="#fmt_gpsdrivetrack">GpsDrive Format for Tracks (gpsdrivetrack)</a></span></dt><dt><span class="section"><a href="#fmt_gpsman">GPSman (gpsman)</a></span></dt><dt><span class="section"><a href="#fmt_gpspilot">GPSPilot Tracker for Palm/OS (gpspilot)</a></span></dt><dt><span class="section"><a href="#fmt_gpsutil">gpsutil (gpsutil)</a></span></dt><dt><span class="section"><a href="#fmt_gpx">GPX XML (gpx)</a></span></dt><dt><span class="section"><a href="#fmt_hiketech">HikeTech (hiketech)</a></span></dt><dt><span class="section"><a href="#fmt_holux">Holux (gm-100) .wpo Format (holux)</a></span></dt><dt><span class="section"><a href="#fmt_hsandv">HSA Endeavour Navigator export File (hsandv)</a></span></dt><dt><span class="section"><a href="#fmt_html">HTML Output (html)</a></span></dt><dt><span class="section"><a href="#fmt_ignrando">IGN Rando track files (ignrando)</a></span></dt><dt><span class="section"><a href="#fmt_ktf2">Kartex 5 Track File (ktf2)</a></span></dt><dt><span class="section"><a href="#fmt_kwf2">Kartex 5 Waypoint File (kwf2)</a></span></dt><dt><span class="section"><a href="#fmt_kompass_tk">Kompass (DAV) Track (.tk) (kompass_tk)</a></span></dt><dt><span class="section"><a href="#fmt_kompass_wp">Kompass (DAV) Waypoints (.wp) (kompass_wp)</a></span></dt><dt><span class="section"><a href="#fmt_psitrex">KuDaTa PsiTrex text (psitrex)</a></span></dt><dt><span class="section"><a href="#fmt_lowranceusr">Lowrance USR (lowranceusr)</a></span></dt><dt><span class="section"><a href="#fmt_maggeo">Magellan Explorist Geocaching (maggeo)</a></span></dt><dt><span class="section"><a href="#fmt_mapsend">Magellan Mapsend (mapsend)</a></span></dt><dt><span class="section"><a href="#fmt_magnav">Magellan NAV Companion for Palm/OS (magnav)</a></span></dt><dt><span class="section"><a href="#fmt_magellanx">Magellan SD files (as for eXplorist) (magellanx)</a></span></dt><dt><span class="section"><a href="#fmt_magellan">Magellan SD files (as for Meridian) (magellan)</a></span></dt><dt><span class="section"><a href="#fmt_magellan1">Magellan serial protocol (magellan)</a></span></dt><dt><span class="section"><a href="#fmt_tef">Map&Guide 'TourExchangeFormat' XML (tef)</a></span></dt><dt><span class="section"><a href="#fmt_mag_pdb">Map&Guide to Palm/OS exported files (.pdb) (mag_pdb)</a></span></dt><dt><span class="section"><a href="#fmt_mapconverter">Mapopolis.com Mapconverter CSV (mapconverter)</a></span></dt><dt><span class="section"><a href="#fmt_mxf">MapTech Exchange Format (mxf)</a></span></dt><dt><span class="section"><a href="#fmt_msroute">Microsoft AutoRoute 2002 (pin/route reader) (msroute)</a></span></dt><dt><span class="section"><a href="#fmt_msroute1">Microsoft Streets and Trips (pin/route reader) (msroute)</a></span></dt><dt><span class="section"><a href="#fmt_s_and_t">Microsoft Streets and Trips 2002-2006 (s_and_t)</a></span></dt><dt><span class="section"><a href="#fmt_bcr">Motorrad Routenplaner (Map&Guide) .bcr files (bcr)</a></span></dt><dt><span class="section"><a href="#fmt_psp">MS PocketStreets 2002 Pushpin (psp)</a></span></dt><dt><span class="section"><a href="#fmt_tpg">National Geographic Topo .tpg (waypoints) (tpg)</a></span></dt><dt><span class="section"><a href="#fmt_tpo2">National Geographic Topo 2.x .tpo (tpo2)</a></span></dt><dt><span class="section"><a href="#fmt_tpo3">National Geographic Topo 3.x/4.x .tpo (tpo3)</a></span></dt><dt><span class="section"><a href="#fmt_navicache">Navicache.com XML (navicache)</a></span></dt><dt><span class="section"><a href="#fmt_nmn4">Navigon Mobile Navigator .rte files (nmn4)</a></span></dt><dt><span class="section"><a href="#fmt_dna">Navitrak DNA marker format (dna)</a></span></dt><dt><span class="section"><a href="#fmt_netstumbler">NetStumbler Summary File (text) (netstumbler)</a></span></dt><dt><span class="section"><a href="#fmt_nima">NIMA/GNIS Geographic Names File (nima)</a></span></dt><dt><span class="section"><a href="#fmt_nmea">NMEA 0183 sentences (nmea)</a></span></dt><dt><span class="section"><a href="#fmt_ozi">OziExplorer (ozi)</a></span></dt><dt><span class="section"><a href="#fmt_palmdoc">PalmDoc Output (palmdoc)</a></span></dt><dt><span class="section"><a href="#fmt_pathaway">PathAway Database for Palm/OS (pathaway)</a></span></dt><dt><span class="section"><a href="#fmt_quovadis">Quovadis (quovadis)</a></span></dt><dt><span class="section"><a href="#fmt_raymarine">Raymarine Waypoint File (.rwf) (raymarine)</a></span></dt><dt><span class="section"><a href="#fmt_cup">See You flight analysis data (cup)</a></span></dt><dt><span class="section"><a href="#fmt_sportsim">Sportsim track files (part of zipped .ssz files) (sportsim)</a></span></dt><dt><span class="section"><a href="#fmt_stmsdf">Suunto Trek Manager (STM) .sdf files (stmsdf)</a></span></dt><dt><span class="section"><a href="#fmt_stmwpp">Suunto Trek Manager (STM) WaypointPlus files (stmwpp)</a></span></dt><dt><span class="section"><a href="#fmt_openoffice">Tab delimited fields useful for OpenOffice, Ploticus etc. (openoffice)</a></span></dt><dt><span class="section"><a href="#fmt_text">Textual Output (text)</a></span></dt><dt><span class="section"><a href="#fmt_tomtom">TomTom POI file (tomtom)</a></span></dt><dt><span class="section"><a href="#fmt_tmpro">TopoMapPro Places File (tmpro)</a></span></dt><dt><span class="section"><a href="#fmt_dmtlog">TrackLogs digital mapping (.trl) (dmtlog)</a></span></dt><dt><span class="section"><a href="#fmt_tiger">U.S. Census Bureau Tiger Mapping Service (tiger)</a></span></dt><dt><span class="section"><a href="#fmt_unicsv">Universal csv with field structure in first line (unicsv)</a></span></dt><dt><span class="section"><a href="#fmt_vcard">Vcard Output (for iPod) (vcard)</a></span></dt><dt><span class="section"><a href="#fmt_vitosmt">Vito Navigator II tracks (vitosmt)</a></span></dt><dt><span class="section"><a href="#fmt_wfff">WiFiFoFum 2.0 for PocketPC XML (wfff)</a></span></dt><dt><span class="section"><a href="#fmt_wbt-bin">Wintec WBT-100/200 Binary file format (wbt-bin)</a></span></dt><dt><span class="section"><a href="#fmt_wbt">Wintec WBT-100/200 GPS Download (wbt)</a></span></dt><dt><span class="section"><a href="#fmt_yahoo">Yahoo Geocode API data (yahoo)</a></span></dt></dl></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="fmt_xcsv"></a>? Character Separated Values (xcsv)</h2></div></div></div><p class="fmtcapshdr">
+ </p><table class="simplelist" border="0" summary="Simple list"><tr><td>-i gpx</td></tr><tr><td>-f saxony_in_summer_2004.gpx -f austria_2005.gpx</td></tr><tr><td>-i gdb</td></tr><tr><td>-f croatia_2006.gdb</td></tr><tr><td>-x nuketypes,waypoints,routes</td></tr><tr><td>-x track,pack,split,title="LOG # %Y%m%d"</td></tr></table></div></div><div class="chapter" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="The_Formats"></a>Chapter 3. The Formats</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#fmt_xcsv">? Character Separated Values (xcsv)</a></span></dt><dt><span class="section"><a href="#fmt_alantrl">Alan Map500 tracklogs (.trl) (alantrl)</a></span></dt><dt><span class="section"><a href="#fmt_alanwpr">Alan Map500 waypoints and routes (.wpr) (alanwpr)</a></span></dt><dt><span class="section"><a href="#fmt_tabsep">All database fields on one tab-separated line (tabsep)</a></span></dt><dt><span class="section"><a href="#fmt_baroiq">Brauniger IQ Series Barograph Download (baroiq)</a></span></dt><dt><span class="section"><a href="#fmt_cambridge">Cambridge/Winpilot glider software (cambridge)</a></span></dt><dt><span class="section"><a href="#fmt_cst">CarteSurTable data file (cst)</a></span></dt><dt><span class="section"><a href="#fmt_cetus">Cetus for Palm/OS (cetus)</a></span></dt><dt><span class="section"><a href="#fmt_coastexp">CoastalExplorer XML (coastexp)</a></span></dt><dt><span class="section"><a href="#fmt_csv">Comma separated values (csv)</a></span></dt><dt><span class="section"><a href="#fmt_compegps">CompeGPS data files (.wpt/.trk/.rte) (compegps)</a></span></dt><dt><span class="section"><a href="#fmt_copilot">CoPilot Flight Planner for Palm/OS (copilot)</a></span></dt><dt><span class="section"><a href="#fmt_coto">cotoGPS for Palm/OS (coto)</a></span></dt><dt><span class="section"><a href="#fmt_custom">Custom "Everything" Style (custom)</a></span></dt><dt><span class="section"><a href="#fmt_axim_gpb">Dell Axim Navigation System (.gpb) file format (axim_gpb)</a></span></dt><dt><span class="section"><a href="#fmt_an1">DeLorme .an1 (drawing) file (an1)</a></span></dt><dt><span class="section"><a href="#fmt_gpl">DeLorme GPL (gpl)</a></span></dt><dt><span class="section"><a href="#fmt_saplus">DeLorme Street Atlas Plus (saplus)</a></span></dt><dt><span class="section"><a href="#fmt_saroute">DeLorme Street Atlas Route (saroute)</a></span></dt><dt><span class="section"><a href="#fmt_xmap">DeLorme XMap HH Native .WPT (xmap)</a></span></dt><dt><span class="section"><a href="#fmt_xmap2006">DeLorme XMap/SAHH 2006 Native .TXT (xmap2006)</a></span></dt><dt><span class="section"><a href="#fmt_xmapwpt">DeLorme XMat HH Street Atlas USA .WPT (PPC) (xmapwpt)</a></span></dt><dt><span class="section"><a href="#fmt_easygps">EasyGPS binary format (easygps)</a></span></dt><dt><span class="section"><a href="#fmt_igc">FAI/IGC Flight Recorder Data Format (igc)</a></span></dt><dt><span class="section"><a href="#fmt_gpssim">Franson GPSGate Simulation (gpssim)</a></span></dt><dt><span class="section"><a href="#fmt_fugawi">Fugawi (fugawi)</a></span></dt><dt><span class="section"><a href="#fmt_g7towin">G7ToWin data files (.g7t) (g7towin)</a></span></dt><dt><span class="section"><a href="#fmt_garmin301">Garmin 301 Custom position and heartrate (garmin301)</a></span></dt><dt><span class="section"><a href="#fmt_glogbook">Garmin Logbook XML (glogbook)</a></span></dt><dt><span class="section"><a href="#fmt_gdb">Garmin MapSource - gdb (gdb)</a></span></dt><dt><span class="section"><a href="#fmt_mapsource">Garmin MapSource - mps (mapsource)</a></span></dt><dt><span class="section"><a href="#fmt_garmin_txt">Garmin MapSource - txt (tab delimited) (garmin_txt)</a></span></dt><dt><span class="section"><a href="#fmt_pcx">Garmin PCX5 (pcx)</a></span></dt><dt><span class="section"><a href="#fmt_garmin_poi">Garmin POI database (garmin_poi)</a></span></dt><dt><span class="section"><a href="#fmt_garmin_gpi">Garmin Points of Interest (.gpi) (garmin_gpi)</a></span></dt><dt><span class="section"><a href="#fmt_garmin">Garmin serial/USB protocol (garmin)</a></span></dt><dt><span class="section"><a href="#fmt_gtrnctr">Garmin Training Centerxml (gtrnctr)</a></span></dt><dt><span class="section"><a href="#fmt_geo">Geocaching.com .loc (geo)</a></span></dt><dt><span class="section"><a href="#fmt_gcdb">GeocachingDB for Palm/OS (gcdb)</a></span></dt><dt><span class="section"><a href="#fmt_ggv_log">Geogrid Viewer tracklogs (.log) (ggv_log)</a></span></dt><dt><span class="section"><a href="#fmt_geonet">GEOnet Names Server (GNS) (geonet)</a></span></dt><dt><span class="section"><a href="#fmt_geoniche">GeoNiche .pdb (geoniche)</a></span></dt><dt><span class="section"><a href="#fmt_kml">Google Earth (Keyhole) Markup Language (kml)</a></span></dt><dt><span class="section"><a href="#fmt_google">Google Maps XML (google)</a></span></dt><dt><span class="section"><a href="#fmt_gpilots">GpilotS (gpilots)</a></span></dt><dt><span class="section"><a href="#fmt_gtm">GPS TrackMaker (gtm)</a></span></dt><dt><span class="section"><a href="#fmt_arc">GPSBabel arc filter file (arc)</a></span></dt><dt><span class="section"><a href="#fmt_gpsdrive">GpsDrive Format (gpsdrive)</a></span></dt><dt><span class="section"><a href="#fmt_gpsdrivetrack">GpsDrive Format for Tracks (gpsdrivetrack)</a></span></dt><dt><span class="section"><a href="#fmt_gpsman">GPSman (gpsman)</a></span></dt><dt><span class="section"><a href="#fmt_gpspilot">GPSPilot Tracker for Palm/OS (gpspilot)</a></span></dt><dt><span class="section"><a href="#fmt_gpsutil">gpsutil (gpsutil)</a></span></dt><dt><span class="section"><a href="#fmt_gpx">GPX XML (gpx)</a></span></dt><dt><span class="section"><a href="#fmt_hiketech">HikeTech (hiketech)</a></span></dt><dt><span class="section"><a href="#fmt_holux">Holux (gm-100) .wpo Format (holux)</a></span></dt><dt><span class="section"><a href="#fmt_hsandv">HSA Endeavour Navigator export File (hsandv)</a></span></dt><dt><span class="section"><a href="#fmt_html">HTML Output (html)</a></span></dt><dt><span class="section"><a href="#fmt_ignrando">IGN Rando track files (ignrando)</a></span></dt><dt><span class="section"><a href="#fmt_ktf2">Kartex 5 Track File (ktf2)</a></span></dt><dt><span class="section"><a href="#fmt_kwf2">Kartex 5 Waypoint File (kwf2)</a></span></dt><dt><span class="section"><a href="#fmt_kompass_tk">Kompass (DAV) Track (.tk) (kompass_tk)</a></span></dt><dt><span class="section"><a href="#fmt_kompass_wp">Kompass (DAV) Waypoints (.wp) (kompass_wp)</a></span></dt><dt><span class="section"><a href="#fmt_psitrex">KuDaTa PsiTrex text (psitrex)</a></span></dt><dt><span class="section"><a href="#fmt_lowranceusr">Lowrance USR (lowranceusr)</a></span></dt><dt><span class="section"><a href="#fmt_maggeo">Magellan Explorist Geocaching (maggeo)</a></span></dt><dt><span class="section"><a href="#fmt_mapsend">Magellan Mapsend (mapsend)</a></span></dt><dt><span class="section"><a href="#fmt_magnav">Magellan NAV Companion for Palm/OS (magnav)</a></span></dt><dt><span class="section"><a href="#fmt_magellanx">Magellan SD files (as for eXplorist) (magellanx)</a></span></dt><dt><span class="section"><a href="#fmt_magellan">Magellan SD files (as for Meridian) (magellan)</a></span></dt><dt><span class="section"><a href="#fmt_magellan1">Magellan serial protocol (magellan)</a></span></dt><dt><span class="section"><a href="#fmt_tef">Map&Guide 'TourExchangeFormat' XML (tef)</a></span></dt><dt><span class="section"><a href="#fmt_mag_pdb">Map&Guide to Palm/OS exported files (.pdb) (mag_pdb)</a></span></dt><dt><span class="section"><a href="#fmt_mapconverter">Mapopolis.com Mapconverter CSV (mapconverter)</a></span></dt><dt><span class="section"><a href="#fmt_mxf">MapTech Exchange Format (mxf)</a></span></dt><dt><span class="section"><a href="#fmt_msroute">Microsoft AutoRoute 2002 (pin/route reader) (msroute)</a></span></dt><dt><span class="section"><a href="#fmt_msroute1">Microsoft Streets and Trips (pin/route reader) (msroute)</a></span></dt><dt><span class="section"><a href="#fmt_s_and_t">Microsoft Streets and Trips 2002-2006 (s_and_t)</a></span></dt><dt><span class="section"><a href="#fmt_bcr">Motorrad Routenplaner (Map&Guide) .bcr files (bcr)</a></span></dt><dt><span class="section"><a href="#fmt_psp">MS PocketStreets 2002 Pushpin (psp)</a></span></dt><dt><span class="section"><a href="#fmt_tpg">National Geographic Topo .tpg (waypoints) (tpg)</a></span></dt><dt><span class="section"><a href="#fmt_tpo2">National Geographic Topo 2.x .tpo (tpo2)</a></span></dt><dt><span class="section"><a href="#fmt_tpo3">National Geographic Topo 3.x/4.x .tpo (tpo3)</a></span></dt><dt><span class="section"><a href="#fmt_navicache">Navicache.com XML (navicache)</a></span></dt><dt><span class="section"><a href="#fmt_nmn4">Navigon Mobile Navigator .rte files (nmn4)</a></span></dt><dt><span class="section"><a href="#fmt_dna">Navitrak DNA marker format (dna)</a></span></dt><dt><span class="section"><a href="#fmt_netstumbler">NetStumbler Summary File (text) (netstumbler)</a></span></dt><dt><span class="section"><a href="#fmt_nima">NIMA/GNIS Geographic Names File (nima)</a></span></dt><dt><span class="section"><a href="#fmt_nmea">NMEA 0183 sentences (nmea)</a></span></dt><dt><span class="section"><a href="#fmt_ozi">OziExplorer (ozi)</a></span></dt><dt><span class="section"><a href="#fmt_palmdoc">PalmDoc Output (palmdoc)</a></span></dt><dt><span class="section"><a href="#fmt_pathaway">PathAway Database for Palm/OS (pathaway)</a></span></dt><dt><span class="section"><a href="#fmt_quovadis">Quovadis (quovadis)</a></span></dt><dt><span class="section"><a href="#fmt_raymarine">Raymarine Waypoint File (.rwf) (raymarine)</a></span></dt><dt><span class="section"><a href="#fmt_cup">See You flight analysis data (cup)</a></span></dt><dt><span class="section"><a href="#fmt_sportsim">Sportsim track files (part of zipped .ssz files) (sportsim)</a></span></dt><dt><span class="section"><a href="#fmt_stmsdf">Suunto Trek Manager (STM) .sdf files (stmsdf)</a></span></dt><dt><span class="section"><a href="#fmt_stmwpp">Suunto Trek Manager (STM) WaypointPlus files (stmwpp)</a></span></dt><dt><span class="section"><a href="#fmt_openoffice">Tab delimited fields useful for OpenOffice, Ploticus etc. (openoffice)</a></span></dt><dt><span class="section"><a href="#fmt_text">Textual Output (text)</a></span></dt><dt><span class="section"><a href="#fmt_tomtom_itn">TomTom Itineraries (.itn) (tomtom_itn)</a></span></dt><dt><span class="section"><a href="#fmt_tomtom_asc">TomTom POI file (.asc) (tomtom_asc)</a></span></dt><dt><span class="section"><a href="#fmt_tomtom">TomTom POI file (.ov2) (tomtom)</a></span></dt><dt><span class="section"><a href="#fmt_tmpro">TopoMapPro Places File (tmpro)</a></span></dt><dt><span class="section"><a href="#fmt_dmtlog">TrackLogs digital mapping (.trl) (dmtlog)</a></span></dt><dt><span class="section"><a href="#fmt_tiger">U.S. Census Bureau Tiger Mapping Service (tiger)</a></span></dt><dt><span class="section"><a href="#fmt_unicsv">Universal csv with field structure in first line (unicsv)</a></span></dt><dt><span class="section"><a href="#fmt_vcard">Vcard Output (for iPod) (vcard)</a></span></dt><dt><span class="section"><a href="#fmt_vitosmt">Vito Navigator II tracks (vitosmt)</a></span></dt><dt><span class="section"><a href="#fmt_vitovtt">Vito SmartMap tracks (.vtt) (vitovtt)</a></span></dt><dt><span class="section"><a href="#fmt_wfff">WiFiFoFum 2.0 for PocketPC XML (wfff)</a></span></dt><dt><span class="section"><a href="#fmt_wbt-bin">Wintec WBT-100/200 Binary File Format (wbt-bin)</a></span></dt><dt><span class="section"><a href="#fmt_wbt">Wintec WBT-100/200 GPS Download (wbt)</a></span></dt><dt><span class="section"><a href="#fmt_wbt-tk1">Wintec WBT-201/G-Rays 2 Binary File Format (wbt-tk1)</a></span></dt><dt><span class="section"><a href="#fmt_yahoo">Yahoo Geocode API data (yahoo)</a></span></dt></dl></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="fmt_xcsv"></a>? Character Separated Values (xcsv)</h2></div></div></div><p class="fmtcapshdr">
This format can...
</p><div class="itemizedlist"><ul type="disc"><li><p class="fmtcapsitem">
read and write waypoints
</p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="fmt_baroiq"></a>Brauniger IQ Series Barograph Download (baroiq)</h2></div></div></div><p class="fmtcapshdr">
This format can...
</p><div class="itemizedlist"><ul type="disc"><li><p class="fmtcapsitem">
- read and write waypoints
- </p></li><li><p class="fmtcapsitem">
- read and write tracks
- </p></li><li><p class="fmtcapsitem">
- read and write routes
+ read tracks
</p></li></ul></div><p>Serial download protocol for the <a href="http://www.brauniger.com" target="_top">Brauniger</a> IQ series of
barograph recording flight instruments. This format creates a
track of altitude vs time which can be merged with a GPS track
difficulty and terrain, GPSBabel will automatically include that information
in the waypoint descriptions in the generated drawing file. If you do not
want that, specify the "nogc" option on the command line:
-</p><p><strong class="userinput"><code>gpsbabel -i gpx -f 12345.gpx -o an1,nogc -F 12345.an1</code></strong></p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="fmt_an1_o_deficon"></a><code class="option">deficon</code> option</h3></div></div></div><p>
+</p><p><strong class="userinput"><code>gpsbabel -i gpx -f 12345.gpx -o an1,nogc -F 12345.an1</code></strong></p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="fmt_an1_o_nourl"></a><code class="option">nourl</code> option</h3></div></div></div><p>
+ Do not add URLs to description.
+ </p><p>
+If your original waypoint data contains URLs, GPSBabel will include them as
+links in the generated drawing file. This causes the waypoint symbol to have
+a blue border, and it causes the waypoint text to be drawn in blue with an
+underline.
+</p><p>
+If you do not want this behavior, specify the "nourl" option on the command
+line:
+</p><p><strong class="userinput"><code>gpsbabel -i gpx -f 12345.gpx -o an1,nourl -F 12345.an1</code></strong></p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="fmt_an1_o_deficon"></a><code class="option">deficon</code> option</h3></div></div></div><p>
Symbol to use for point data.
</p><p>
This option allows you to specify which symbol to use for points that
Fugawi):</p><table class="simplelist" border="0" summary="Simple list"><tr><td> - Name</td></tr><tr><td> - Comment</td></tr><tr><td> - Description</td></tr><tr><td> - Latidude</td></tr><tr><td> - Longitude</td></tr><tr><td> - Altitude (metres)</td></tr><tr><td> - Date (yyyymmdd/yymmdd)</td></tr><tr><td> - Time of day (hhmmss)</td></tr></table><p> When importing tracks, use "[ignore]" instead of "Name",
"Comment" and "Description".</p><p>
<a href="http://www.fugawi.com/" target="_top">http://www.fugawi.com/</a>
- </p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="fmt_garmin301"></a>Garmin 301 Custom position and heartrate (garmin301)</h2></div></div></div><p class="fmtcapshdr">
+ </p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="fmt_g7towin"></a>G7ToWin data files (.g7t) (g7towin)</h2></div></div></div><p class="fmtcapshdr">
+ This format can...
+ </p><div class="itemizedlist"><ul type="disc"><li><p class="fmtcapsitem">
+ read waypoints
+ </p></li><li><p class="fmtcapsitem">
+ read tracks
+ </p></li><li><p class="fmtcapsitem">
+ read routes
+ </p></li></ul></div><p>
+ Like GPSBabel <a href="http://www.gpsinformation.org/ronh/g7towin.htm" target="_top">G7ToWin</a> is a program which allows uploading and
+ downloading information from several GPS devices (Garmin, Lowrance/Eagle, Magellan).
+ G7ToWin has its own data format, which is an enhanced format used in Gardown.
+</p><p>
+ This format can read both file types, G7ToWin (.g7t) and Gardown (.gdn).
+</p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="fmt_garmin301"></a>Garmin 301 Custom position and heartrate (garmin301)</h2></div></div></div><p class="fmtcapshdr">
This format can...
</p><div class="itemizedlist"><ul type="disc"><li><p class="fmtcapsitem">
read and write waypoints
This option specifies the default category for gdb output. It should be a
number from 1 to 16.
</p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="fmt_gdb_o_ver"></a><code class="option">ver</code> option</h3></div></div></div><p>
- Version of gdb file to generate (1,2).
+ Version of gdb file to generate (1..3).
</p><p>
This option specifies the data format version for the output file. Version
-2 is the default. Currently, the only other valid value for this option is
-1.
+2 is the default. Currently, the only other valid values for this option are
+1 and 3.
</p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="fmt_gdb_o_via"></a><code class="option">via</code> option</h3></div></div></div><p>
Drop route points that do not have an equivalent waypoint (hidden points).
</p><p>
This option instructs GPSBabel to drop hidden (calculated) points from
routes.
-</p></div></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="fmt_mapsource"></a>Garmin MapSource - mps (mapsource)</h2></div></div></div><p class="fmtcapshdr">
+</p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="fmt_gdb_o_roadbook"></a><code class="option">roadbook</code> option</h3></div></div></div><p>
+ Include major turn points (with description) from calculated route.
+ </p><p>
+ If this option is specified, GPSBabel drops all calculated route points,
+ with exception of points with a description (i.e. "Make U-turns until you know where you are.").
+ The priority of this option is higher than of the <code class="option">via</code> option.
+ A value of 1 or y overwrites the <code class="option">via</code> settings.
+</p><div class="example"><a id="gdb_roadbook_option"></a><p class="title"><b>Example 3.1. Using gdb option <code class="option">roadbook</code> to create simple html roadbook</b></p><div class="example-contents"><p>
+ <strong class="userinput"><code>
+ gpsbabel -i gdb,roadbook -f sample.gdb -x nuketypes,waypoints,tracks -x transform,wpt=rte -o html -F roadbook.html
+ </code></strong>
+ </p><p>
+ Because gdb creates internal a route AND a waypoint list, you have to drop all
+ waypoints and transform the route into waypoints. So you'll get a well ordered
+ html output. We sugess these steps for all waypoint-only formats as html.
+ </p></div></div><br class="example-break" /></div></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="fmt_mapsource"></a>Garmin MapSource - mps (mapsource)</h2></div></div></div><p class="fmtcapshdr">
This format can...
</p><div class="itemizedlist"><ul type="disc"><li><p class="fmtcapsitem">
read and write waypoints
temperature units, and the representation of date and time fields. GPSBabel
tries to read all items automatically. Problems with date and time format can
be solved with the 'date' and 'time' options.
-</p><div class="example"><a id="all_garmin_txt_options"></a><p class="title"><b>Example 3.1. Command showing garmin_txt output with all options</b></p><div class="example-contents"><p><strong class="userinput"><code>gpsbabel -i garmin_txt,date="MM/DD/YYYY",time="hh:mm:ss xx" -f in.txt -o garmin_txt,date="DD.MM.YYYY",datum="WGS 72",dist=m,prec=6,temp=c,time="HH:mm:ss",utc=+2 -F out.txt</code></strong></p></div></div><br class="example-break" /><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="fmt_garmin_txt_o_date"></a><code class="option">date</code> option</h3></div></div></div><p>
+</p><div class="example"><a id="all_garmin_txt_options"></a><p class="title"><b>Example 3.2. Command showing garmin_txt output with all options</b></p><div class="example-contents"><p><strong class="userinput"><code>gpsbabel -i garmin_txt,date="MM/DD/YYYY",time="hh:mm:ss xx" -f in.txt -o garmin_txt,date="DD.MM.YYYY",datum="WGS 72",dist=m,prec=6,temp=c,time="HH:mm:ss",utc=+2 -F out.txt</code></strong></p></div></div><br class="example-break" /><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="fmt_garmin_txt_o_date"></a><code class="option">date</code> option</h3></div></div></div><p>
Read/Write date format (i.e. yyyy/mm/dd).
</p><p>
This option specifies the input and output format for the date. The format
Write position using this grid..
</p><p>
This value specifies the grid to be used on write.
-</p><div class="table"><a id="garmin_grid"></a><p class="title"><b>Table 3.1. Grid values for garmin_txt</b></p><div class="table-contents"><table summary="Grid values for garmin_txt" border="1"><colgroup><col /><col /><col /><col /></colgroup><thead><tr><th># idx</th><th>short</th><th>file-header</th><th>sample</th></tr></thead><tbody><tr><td>0</td><td>ddd</td><td>Lat/Lon hddd.ddddd</td><td> S26.25333 E27.92333</td></tr><tr><td>1</td><td>dm</td><td>Lat/Lon hddd°mm.mm</td><td>N33 56.539 W118 24.471</td></tr><tr><td>2</td><td>dm</td><td>Lat/Lon hddd°mm'ss.s</td><td>S25 25 26.8 E28 06 07.3</td></tr><tr><td>3</td><td>bng</td><td>British National Grid</td><td>TQ 18919 69392</td></tr></tbody></table></div></div><br class="table-break" /><p>
+</p><div class="table"><a id="garmin_grid"></a><p class="title"><b>Table 3.1. Grid values for garmin_txt</b></p><div class="table-contents"><table summary="Grid values for garmin_txt" border="1"><colgroup><col /><col /><col /><col /></colgroup><thead><tr><th># idx</th><th>short</th><th>file-header</th><th>sample</th></tr></thead><tbody><tr><td>0</td><td>ddd</td><td>Lat/Lon hddd.ddddd</td><td> S26.25333 E27.92333</td></tr><tr><td>1</td><td>dmm</td><td>Lat/Lon hddd°mm.mm</td><td>N33 56.539 W118 24.471</td></tr><tr><td>2</td><td>dms</td><td>Lat/Lon hddd°mm'ss.s</td><td>S25 25 26.8 E28 06 07.3</td></tr><tr><td>3</td><td>bng</td><td>British National Grid</td><td>TQ 18919 69392</td></tr><tr><td>4</td><td>utm</td><td>Universal Transverse Mercator</td><td>33 U 318293 5637154</td></tr></tbody></table></div></div><br class="table-break" /><p>
Idx or short are valid params for this option.
</p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="fmt_garmin_txt_o_prec"></a><code class="option">prec</code> option</h3></div></div></div><p>
Precision of coordinates.
loads custom points of interest into certain models of
Garmin GPS receivers. (As of this writing, only the models introduced
in 2005 and later are supported. See Garmin's site for more info.)
-This is the format readable that that program.</p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="fmt_garmin"></a>Garmin serial/USB protocol (garmin)</h2></div></div></div><p class="fmtcapshdr">
+This is the format readable that that program.</p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="fmt_garmin_gpi"></a>Garmin Points of Interest (.gpi) (garmin_gpi)</h2></div></div></div><p class="fmtcapshdr">
+ This format can...
+ </p><div class="itemizedlist"><ul type="disc"><li><p class="fmtcapsitem">
+ read and write waypoints
+ </p></li></ul></div><p>
+ The format garmin_gpi supports binary POI (.gpi) files useable
+ on newer Garmin GPS receivers (see also <a href="#fmt_garmin_poi" title="Garmin POI database (garmin_poi)">garmin_poi</a> for some hints).
+ <a href="http://www.garmin.com/support/agree.jsp?id=927" target="_top">Garmin POI-Loader</a> is the standard application that creates GPI's
+ with all possible features.
+</p><p>
+ The layout of GPI files isn't documented and our module was created
+ via reverse engeneering. If you get a problem on reading or writing
+ a GPI file, please provide that file (mailto:gpsbabel-misc@lists.sourceforge.net).
+</p><p>
+ At this time we don't support special features as "Tour-Guide", alerts or links
+ to sounds and pictures.
+</p><p>
+ This module does not support direct transfer of .GPI files to
+ receivers in Garmin protocol mode. For units like Nuvi, Zumo, or
+ Streetpilot, just choose a file that's on the drive where your
+ GPS is mounted. For units like the X series (GPSMap60, etc.)
+ you must explictly put the unit in mass storage mode or mount
+ the memory chip in an external reader and transfer the file
+ directly.
+</p><div class="example"><a id="all_garmin_gpi_options"></a><p class="title"><b>Example 3.3. Command showing garmin_gpi output example</b></p><div class="example-contents"><p>
+ <strong class="userinput"><code>
+ gpsbabel -i gpx -f "My Points.gpx" -o garmin_gpi,category="Nice Restaurants",bitmap=restaurant.bmp,notes -F "My Points.gpi"
+ </code></strong>
+ </p></div></div><br class="example-break" /><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="fmt_garmin_gpi_o_bitmap"></a><code class="option">bitmap</code> option</h3></div></div></div><p>
+ Use specified bitmap on output.
+ </p><p>
+ The bitmap (BMP) should be 24x24 (or smaller) and can be in
+ RGB-colors (24- and 32-bit) or 8-bit indexed color format.
+</p><p>
+ A color value of 0xFF00FF (blue=255, green=0, red=255),
+ also called "Magenta", can be used for transparent areas.
+</p><p>
+ <strong class="userinput"><code>
+ gpsbabel -i gpx -f "My Points.gpx" -o garmin_gpi,bitmap="tux.bmp" -F "My Points.gpi"
+ </code></strong>
+</p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="fmt_garmin_gpi_o_category"></a><code class="option">category</code> option</h3></div></div></div><p>
+ Default category on output.
+ </p><p>
+ With this option you can specify the category which is primary
+ visible on the device (default is "My points").
+</p><p>
+ <strong class="userinput"><code>
+ gpsbabel -i gpx -f "My Points.gpx" -o garmin_gpi,category="Best Restaurants" -F "My Points.gpi"
+ </code></strong>
+</p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="fmt_garmin_gpi_o_hide"></a><code class="option">hide</code> option</h3></div></div></div><p>
+ Don't show gpi bitmap on device.
+ </p><p>
+ For a large list of points (or whyever) it can be useful when
+ no bitmaps are displayed on device. With this option no bitmap
+ is stored and displayed.
+</p><p>
+ <strong class="userinput"><code>
+ gpsbabel -i gpx -f "My Points.gpx" -o garmin_gpi,hide -F "My Points.gpi"
+ </code></strong>
+</p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="fmt_garmin_gpi_o_descr"></a><code class="option">descr</code> option</h3></div></div></div><p>
+ Write description to address field.
+ </p><p>
+ The GPI address field is often visible in lists on the device. Use this
+ option if you want to see the waypoint description (which can be an address too)
+ in this lists.
+</p><p>
+ <strong class="userinput"><code>
+ gpsbabel -i gpx -f "My Points.gpx" -o garmin_gpi,descr -F "My Points.gpi"
+ </code></strong>
+</p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="fmt_garmin_gpi_o_notes"></a><code class="option">notes</code> option</h3></div></div></div><p>
+ Write notes to address field.
+ </p><p>
+ The GPI address field is often visible in lists on the device. Use this
+ option if you want to see the waypoint notes (which can be an address too)
+ in this lists.
+</p><p>
+ <strong class="userinput"><code>
+ gpsbabel -i gpx -f "My Points.gpx" -o garmin_gpi,notes -F "My Points.gpi"
+ </code></strong>
+</p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="fmt_garmin_gpi_o_position"></a><code class="option">position</code> option</h3></div></div></div><p>
+ Write position to address field.
+ </p><p>
+ The GPI address field is often visible in lists on the device. Use this
+ option if you want to see the waypoint position (coordinates) in this lists.
+</p><p>
+ <strong class="userinput"><code>
+ gpsbabel -i gpx -f "My Points.gpx" -o garmin_gpi,position -F "My Points.gpi"
+ </code></strong>
+</p></div></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="fmt_garmin"></a>Garmin serial/USB protocol (garmin)</h2></div></div></div><p class="fmtcapshdr">
This format can...
</p><div class="itemizedlist"><ul type="disc"><li><p class="fmtcapsitem">
read and write waypoints
getty, pppd, etc.) is using the serial port.
</p><p>
Supported Garmin GPS receivers with USB include
- </p><table class="simplelist" border="0" summary="Simple list"><tr><td>Astro</td><td>GPSMAP 276C</td><td>GPSMAP 96C</td><td>StreetPilot 7200</td></tr><tr><td>Edge 205</td><td>GPSMAP 295</td><td>Nuvi 300<sup>[<a id="gpx" href="#ftn.gpx">2</a>]</sup></td><td>StreetPilot 7500</td></tr><tr><td>Edge 305</td><td>GPSMAP 296C</td><td>Nuvi 310<sup>[<a href="#ftn.gpx">2</a>]</sup></td><td>StreetPilot c310</td></tr><tr><td>eTrex Legend C</td><td>GPSMAP 378</td><td>Nuvi 350<sup>[<a href="#ftn.gpx">2</a>]</sup></td><td>StreetPilot c320</td></tr><tr><td>eTrex LegendCX</td><td>GPSMAP 396</td><td>Nuvi 370<sup>[<a href="#ftn.gpx">2</a>]</sup></td><td>StreetPilot c330</td></tr><tr><td>eTrex Venture C</td><td>GPSMAP 478</td><td>Nuvi 660<sup>[<a href="#ftn.gpx">2</a>]</sup></td><td>StreetPilot c340</td></tr><tr><td>eTrex Venture CX</td><td>GPSMAP 496</td><td>Nuvi 670<sup>[<a href="#ftn.gpx">2</a>]</sup></td><td>StreetPilot c510<sup>[<a href="#ftn.gpx">2</a>]</sup></td></tr><tr><td>eTrex VistaC</td><td>GPSMAP 60C</td><td>Nuvi 680<sup>[<a href="#ftn.gpx">2</a>]</sup></td><td>StreetPilot c530<sup>[<a href="#ftn.gpx">2</a>]</sup></td></tr><tr><td>eTrex Vista CX</td><td>GPSMAP 60CS</td><td>Quest</td><td>StreetPilot c550<sup>[<a href="#ftn.gpx">2</a>]</sup></td></tr><tr><td>Forerunner 205</td><td>GPSMAP 60CSX</td><td>Quest II</td><td>StreetPilot c580<sup>[<a href="#ftn.gpx">2</a>]</sup></td></tr><tr><td>Forerunner 301</td><td>GPSMAP 60CX</td><td>StreetPilot 2610</td><td>StreetPilot i2</td></tr><tr><td>Forerunner 305</td><td>GPSMAP 76C</td><td>StreetPilot 2620</td><td>StreetPilot i3</td></tr><tr><td>Foretrex 201</td><td>GPSMAP 76CS</td><td>StreetPilot 2650</td><td>StreetPilot i5</td></tr><tr><td>Foretrex 301</td><td>GPSMAP 76CSX</td><td>StreetPilot 2720</td><td>Zumo 450<sup>[<a href="#ftn.gpx">2</a>]</sup></td></tr><tr><td>GPS 18<sup>[<a id="posnonly" href="#ftn.posnonly">1</a>]</sup></td><td>GPSMAP 76CX</td><td>StreetPilot 2730</td><td>Zumo 550<sup>[<a href="#ftn.gpx">2</a>]</sup></td></tr><tr><td>GPSMAP 195</td><td>GPSMAP 96</td><td>StreetPilot 2820</td><td> </td></tr></table><p>
+ </p><table class="simplelist" border="0" summary="Simple list"><tr><td>Astro</td><td>Forerunner 301</td><td>GPSMAP 60CSx</td><td>StreetPilot 2620</td></tr><tr><td>Edge 205</td><td>Forerunner 305</td><td>GPSMAP 60Cx</td><td>StreetPilot 2650</td></tr><tr><td>Edge 305</td><td>Foretrex 201</td><td>GPSMAP 76C</td><td>StreetPilot 2720</td></tr><tr><td>eTrex Legend C</td><td>Foretrex 301</td><td>GPSMAP 76CS</td><td>StreetPilot 2730</td></tr><tr><td>eTrex Legend Cx</td><td>GPS 18<sup>[<a id="posnonly" href="#ftn.posnonly">1</a>]</sup></td><td>GPSMAP 76CSX</td><td>StreetPilot 2820</td></tr><tr><td>eTrex Legend HCx</td><td>GPSMAP 195</td><td>GPSMAP 76Cx</td><td>StreetPilot 7200</td></tr><tr><td>eTrex Summit Cx</td><td>GPSMAP 276C</td><td>GPSMAP 96</td><td>StreetPilot 7500</td></tr><tr><td>eTrex Summit HC</td><td>GPSMAP 295</td><td>GPSMAP 96C</td><td>StreetPilot c310</td></tr><tr><td>eTrex Venture C</td><td>GPSMAP 296C</td><td>Quest</td><td>StreetPilot c320</td></tr><tr><td>eTrex Venture Cx</td><td>GPSMAP 378</td><td>Quest II</td><td>StreetPilot c330</td></tr><tr><td>eTrex Venture HC</td><td>GPSMAP 396</td><td>Rhino 520</td><td>StreetPilot c340</td></tr><tr><td>eTrex Vista C</td><td>GPSMAP 478</td><td>Rhino 530</td><td>StreetPilot i2</td></tr><tr><td>eTrex Vista Cx</td><td>GPSMAP 496</td><td>Rhino 520 HCx</td><td>StreetPilot i3</td></tr><tr><td>eTrex Vista HCx</td><td>GPSMAP 60C</td><td>Rhino 530 HCx</td><td>StreetPilot i5</td></tr><tr><td>Forerunner 205</td><td>GPSMAP 60CS</td><td>StreetPilot 2610</td><td> </td></tr></table><p>
</p><p>the following Bluetooth Garmin products:
</p><table class="simplelist" border="0" summary="Simple list"><tr><td>GPS 10<sup>[<a href="#ftn.posnonly">1</a>]</sup></td><td> </td><td> </td><td> </td></tr></table><p>
</p><p>and most serial Garmin GPS receivers including:
-</p><table class="simplelist" border="0" summary="Simple list"><tr><td>eMap</td><td>eTrex Yellow</td><td>GPS 12Map </td><td>GPS II+ </td></tr><tr><td>eTrex Camo</td><td>Forerunner 201</td><td>GPS 12 </td><td>GPS V</td></tr><tr><td>eTrex Legend</td><td>Foretrex 201</td><td>GPS 12XL </td><td>StreetPilot III</td></tr><tr><td>eTrex Summit</td><td>Geko 201</td><td>GPS III </td><td>StreetPilot III+</td></tr><tr><td>eTrex Venture</td><td>Geko 301</td><td>GPS III+ </td><td> </td></tr><tr><td>eTrex Vista</td><td>GPS 12CX </td><td>GPS II </td><td> </td></tr></table><p>
+</p><table class="simplelist" border="0" summary="Simple list"><tr><td>eMap</td><td>eTrex H</td><td>GPS 12 </td><td>Rhino 110</td></tr><tr><td>eTrex Camo</td><td>Forerunner 201</td><td>GPS 12XL </td><td>Rhino 120</td></tr><tr><td>eTrex Legend</td><td>Foretrex 201</td><td>GPS III </td><td>Rhino 130</td></tr><tr><td>eTrex Summit</td><td>Geko 201</td><td>GPS III+ </td><td>StreetPilot III</td></tr><tr><td>eTrex Venture</td><td>Geko 301</td><td>GPS II </td><td>StreetPilot III+</td></tr><tr><td>eTrex Vista</td><td>GPS 12CX </td><td>GPS II+ </td><td> </td></tr><tr><td>eTrex (Basic Yellow)</td><td>GPS 12Map </td><td>GPS V</td><td> </td></tr></table><p>
+</p><p>
+The following Garmin GPS receivers are supported, but they do not
+support Garmin communication protocol and don't work with the
+<code class="option">garmin</code> option. To use these receivers, read or write
+GPX files from the mass storage device as mounted on your computer.
+</p><table class="simplelist" border="0" summary="Simple list"><tr><td>Nuvi 200<sup>[<a href="#ftn.gpx">2</a>]</sup></td><td>Nuvi 310<sup>[<a href="#ftn.gpx">2</a>]</sup></td><td>Nuvi 660<sup>[<a href="#ftn.gpx">2</a>]</sup></td><td>StreetPilot c580<sup>[<a href="#ftn.gpx">2</a>]</sup></td></tr><tr><td>Nuvi 200W<sup>[<a href="#ftn.gpx">2</a>]</sup></td><td>Nuvi 350<sup>[<a href="#ftn.gpx">2</a>]</sup></td><td>Nuvi 670<sup>[<a href="#ftn.gpx">2</a>]</sup></td><td>Zumo 450<sup>[<a href="#ftn.gpx">2</a>]</sup></td></tr><tr><td>Nuvi 250<sup>[<a href="#ftn.gpx">2</a>]</sup></td><td>Nuvi 370<sup>[<a href="#ftn.gpx">2</a>]</sup></td><td>Nuvi 680<sup>[<a href="#ftn.gpx">2</a>]</sup></td><td>Zumo 500<sup>[<a href="#ftn.gpx">2</a>]</sup></td></tr><tr><td>Nuvi 250W<sup>[<a href="#ftn.gpx">2</a>]</sup></td><td>Nuvi 600<sup>[<a href="#ftn.gpx">2</a>]</sup></td><td>StreetPilot c510<sup>[<a href="#ftn.gpx">2</a>]</sup></td><td>Zumo 550<sup>[<a href="#ftn.gpx">2</a>]</sup></td></tr><tr><td>Nuvi 270<sup>[<a href="#ftn.gpx">2</a>]</sup></td><td>Nuvi 650<sup>[<a href="#ftn.gpx">2</a>]</sup></td><td>StreetPilot c530<sup>[<a href="#ftn.gpx">2</a>]</sup></td><td> </td></tr><tr><td>Nuvi 300<sup>[<a id="gpx" href="#ftn.gpx">2</a>]</sup></td><td>Nuvi 650FM<sup>[<a href="#ftn.gpx">2</a>]</sup></td><td>StreetPilot c550<sup>[<a href="#ftn.gpx">2</a>]</sup></td><td> </td></tr></table><p>
</p><p>
None of the GPSBabel developers has access to every model on that
list, but we've received reports of success and/or have reasonable
<a href="http://vip.hyperusa.com/~dougs/geocachingdb/geocachingdb.htm" target="_top">
GeocachingDB</a> program by DougsBrat. It works with v2
and v3 of this program.
- </p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="fmt_geonet"></a>GEOnet Names Server (GNS) (geonet)</h2></div></div></div><p class="fmtcapshdr">
+ </p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="fmt_ggv_log"></a>Geogrid Viewer tracklogs (.log) (ggv_log)</h2></div></div></div><p class="fmtcapshdr">
+ This format can...
+ </p><div class="itemizedlist"><ul type="disc"><li><p class="fmtcapsitem">
+ read and write tracks
+ </p></li></ul></div><p>
+ Binary track logs used by the <span class="productname">Geogrid</span>™-Viewer, a very
+ popular product in Germany.
+</p><p>
+ GPSBabel has full support for version 1.0 of this file format.
+</p><p>
+ We can also read some GPS data (including coordinates) from version 2.5. But
+ it seems, that this newer version doesn't more store time stamps. This can be
+ a problem when converting to other formats or if you want to use our track filter.
+</p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="fmt_geonet"></a>GEOnet Names Server (GNS) (geonet)</h2></div></div></div><p class="fmtcapshdr">
This format can...
</p><div class="itemizedlist"><ul type="disc"><li><p class="fmtcapsitem">
read and write waypoints
The <a href="http://www.lowrance.com" target="_top">Lowrance iFinder GPS</a> series has the unique capability
to output its data to an MMC card. The data is saved to the card as a
.USR file and can be read by your computer using a card reader.
-Waypoints, routes, tracks are supported. By default, Event marker
-icons are converted to waypoints. Symbols tend to get lost in the
-translation.
+Waypoints, icons, routes, tracks are supported. Event marker icons contain a symbol, name, latitude and longitude
+only. By default, Event marker
+icons are converted to waypoints on read. On write, you are able to create icons from waypoints.
</p><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="fmt_lowranceusr_o_ignoreicons"></a><code class="option">ignoreicons</code> option</h3></div></div></div><p>
- Ignore event marker icons.
+ Ignore event marker icons on read.
+ </p><p>
+This option instructs GPSBabel to not convert icons to waypoints on input,
+but to instead disregard them altogether
+</p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="fmt_lowranceusr_o_writeasicons"></a><code class="option">writeasicons</code> option</h3></div></div></div><p>
+ Treat waypoints as icons on write.
</p><p>
-This option instructs GPSBabel to not convert icons to waypoints on input.
+(USR output) This option converts the waypoint information to an event marker icon.
</p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="fmt_lowranceusr_o_merge"></a><code class="option">merge</code> option</h3></div></div></div><p>
(USR output) Merge into one segmented track.
</p><p>
-This option merges all tracks into a single track with multiple segments.
+(USR output) This option merges all tracks into a single track with multiple segments.
</p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="fmt_lowranceusr_o_break"></a><code class="option">break</code> option</h3></div></div></div><p>
(USR input) Break segments into separate tracks.
</p><p>
-This option breaks track segments into separate tracks when reading a .USR
+(USR input) Break track segments into separate tracks.
file.
</p></div></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="fmt_maggeo"></a>Magellan Explorist Geocaching (maggeo)</h2></div></div></div><p class="fmtcapshdr">
This format can...
conversion from the Mercator projection to polar (latitude/longitude)
coordinates and back again may result in visible differences. Experience
reports are welcome.
-</p><div class="example"><a id="sample_bcr_command"></a><p class="title"><b>Example 3.2. Sample BCR command with all options</b></p><div class="example-contents"><p><strong class="userinput"><code>gpsbabel -r -i gpx -f in.gpx -o bcr,index=1,name="From A to B",radius=6371012 -F a_to_b.bcr</code></strong></p></div></div><br class="example-break" /><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="fmt_bcr_o_index"></a><code class="option">index</code> option</h3></div></div></div><p>
+</p><div class="example"><a id="sample_bcr_command"></a><p class="title"><b>Example 3.4. Sample BCR command with all options</b></p><div class="example-contents"><p><strong class="userinput"><code>gpsbabel -r -i gpx -f in.gpx -o bcr,index=1,name="From A to B",radius=6371012 -F a_to_b.bcr</code></strong></p></div></div><br class="example-break" /><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="fmt_bcr_o_index"></a><code class="option">index</code> option</h3></div></div></div><p>
Index of route to write (if more the one in source).
</p><p>
Because the format supports only one route, this option may be used
Where can I find documentation for the layout of PSP files?
</a></dt><dt>13. <a href="#morehelp">
I have some other problem, what do I do?
-</a></dt></dl><table border="0" summary="Q and A Set"><col align="left" width="1%" /><tbody><tr class="question"><td align="left" valign="top"><a id="why"></a><a id="id2579092"></a><b>1.</b></td><td align="left" valign="top"><p>
+</a></dt></dl><table border="0" summary="Q and A Set"><col align="left" width="1%" /><tbody><tr class="question"><td align="left" valign="top"><a id="why"></a><a id="id2976535"></a><b>1.</b></td><td align="left" valign="top"><p>
Why should I use GPSBabel/psp to make pushpins when Streets & Trips (S&T)
already does that for me?
</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
<span class="emphasis"><em>with the proper coordinates</em></span>
where S&T does not in some areas of the U.S.
(Nashville, TN for instance).
-</p></td></tr><tr class="question"><td align="left" valign="top"><a id="blank"></a><a id="id2579137"></a><b>2.</b></td><td align="left" valign="top"><p>
+</p></td></tr><tr class="question"><td align="left" valign="top"><a id="blank"></a><a id="id2976579"></a><b>2.</b></td><td align="left" valign="top"><p>
I keep getting a blank (32 byte) PSP file.
</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
There are either no points to write, or you have botched the command
looks like this:
</p><p><strong class="userinput"><code>gpsbabel -i geo -f geocaching.loc -o psp -F NewOrleans.psp</code></strong></p><p>
Note the use of "-f" for INPUT files and "-F" for OUTPUT files.
-</p></td></tr><tr class="question"><td align="left" valign="top"><a id="now_what"></a><a id="id2579174"></a><b>3.</b></td><td align="left" valign="top"><p>
+</p></td></tr><tr class="question"><td align="left" valign="top"><a id="now_what"></a><a id="id2976616"></a><b>3.</b></td><td align="left" valign="top"><p>
I've created a PSP file, now what do I do with it?
</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
To use pushpins in Pocketstreets, you need to have both a map and a
pushpin file. These two files must exist in the same folder and have
exactly the same base name as the map. For example, the pins that
correspond to the map "NewOrleans.mps" should be named "NewOrleans.psp".
-</p></td></tr><tr class="question"><td align="left" valign="top"><a id="no_map"></a><a id="id2579798"></a><b>4.</b></td><td align="left" valign="top"><p>
+</p></td></tr><tr class="question"><td align="left" valign="top"><a id="no_map"></a><a id="id2977240"></a><b>4.</b></td><td align="left" valign="top"><p>
I don't have a map. What do I do now?
</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
Create one using the "Export map to Pocketstreets" option in S&T. You
can also pick up some major city maps on the web from the MS Pocketstreets
website if you are interested in seeing how it works.
-</p></td></tr><tr class="question"><td align="left" valign="top"><a id="have_est"></a><a id="id2579828"></a><b>5.</b></td><td align="left" valign="top"><p>
+</p></td></tr><tr class="question"><td align="left" valign="top"><a id="have_est"></a><a id="id2977270"></a><b>5.</b></td><td align="left" valign="top"><p>
I have .EST files, not .PSP files. What's up with that?
</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
In order to make PSP files, you need to use the "Export map to
Pocketstreets" function in S&T. .EST files are for use in S&T, not
Pocketstreets.
-</p></td></tr><tr class="question"><td align="left" valign="top"><a id="coord_jitter"></a><a id="id2579853"></a><b>6.</b></td><td align="left" valign="top"><p>
+</p></td></tr><tr class="question"><td align="left" valign="top"><a id="coord_jitter"></a><a id="id2977295"></a><b>6.</b></td><td align="left" valign="top"><p>
The .PSP files differ when I use GPSBabel/psp versus Pocketstreets to
create them. What's up?
</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
Pocketstreets makes corrections to the S&T waypoint data upon initial
loading. GPSBabel/psp writes PSP files with these corrections already made.
Ask MS.
-</p></td></tr><tr class="question"><td align="left" valign="top"><a id="mappoint"></a><a id="id2579881"></a><b>7.</b></td><td align="left" valign="top"><p>
+</p></td></tr><tr class="question"><td align="left" valign="top"><a id="mappoint"></a><a id="id2977323"></a><b>7.</b></td><td align="left" valign="top"><p>
Does GPSBabel/psp work with (Autoroute, Mappoint, etc..) .PSP files?
</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
As of this writing, I haven't seen any so I can't be sure. If they
follow the same layout as S&T 2002, I'd imagine so.
-</p></td></tr><tr class="question"><td align="left" valign="top"><a id="after2001"></a><a id="id2579906"></a><b>8.</b></td><td align="left" valign="top"><p>
+</p></td></tr><tr class="question"><td align="left" valign="top"><a id="after2001"></a><a id="id2977347"></a><b>8.</b></td><td align="left" valign="top"><p>
Does GPSBabel/psp work with (S&T 2001, S&T 2002, etc...) files?
</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
MS changed the file layout between S&T 2001 and S&T 2002. The GPSBabel psp
module is known to work fine with S&T 2002 and 2003.
-</p></td></tr><tr class="question"><td align="left" valign="top"><a id="non_us"></a><a id="id2579932"></a><b>9.</b></td><td align="left" valign="top"><p>
+</p></td></tr><tr class="question"><td align="left" valign="top"><a id="non_us"></a><a id="id2977373"></a><b>9.</b></td><td align="left" valign="top"><p>
Does GPSBabel/psp work with (insert your country/location here) maps?
</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
If it doesn't, feel free to inquire on the
<a href="https://lists.sourceforge.net/lists/listinfo/gpsbabel-misc" target="_top">GPSBabel-Misc</a>
mailing list.
-</p></td></tr><tr class="question"><td align="left" valign="top"><a id="wrong_coords"></a><a id="id2579961"></a><b>10.</b></td><td align="left" valign="top"><p>
+</p></td></tr><tr class="question"><td align="left" valign="top"><a id="wrong_coords"></a><a id="id2977403"></a><b>10.</b></td><td align="left" valign="top"><p>
What do you mean S&T writes points with the wrong coordinates?
</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
At some point in the "Export map to Pocketstreets" function in S&T,
1.4 miles WEST of their original location. I'm not a geometry buff,
but I'd imagine they have a reference point for generating coordinates
that's wrong in (at least) that area.
-</p></td></tr><tr class="question"><td align="left" valign="top"><a id="splitting"></a><a id="id2579997"></a><b>11.</b></td><td align="left" valign="top"><p>
+</p></td></tr><tr class="question"><td align="left" valign="top"><a id="splitting"></a><a id="id2977439"></a><b>11.</b></td><td align="left" valign="top"><p>
I have 800 waypoints that cover a dozen or so Pocketstreets maps.
Do I need to to split my points up into smaller chunks to match the
area covered by the maps?
area. Points that are not on the current map will be "grayed out"
in pushpin explorer in Pocketsreets. This is the reason the PSP
module was written for GPSBabel in the first place.
-</p></td></tr><tr class="question"><td align="left" valign="top"><a id="doc_for_layout"></a><a id="id2580024"></a><b>12.</b></td><td align="left" valign="top"><p>
+</p></td></tr><tr class="question"><td align="left" valign="top"><a id="doc_for_layout"></a><a id="id2977466"></a><b>12.</b></td><td align="left" valign="top"><p>
Where can I find documentation for the layout of PSP files?
</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
Just about everything I know about the PSP file format is documented
in the source. To the best of my knowledge, there is no documentation
(and for good reason, I've come to discover).
-</p></td></tr><tr class="question"><td align="left" valign="top"><a id="morehelp"></a><a id="id2580049"></a><b>13.</b></td><td align="left" valign="top"><p>
+</p></td></tr><tr class="question"><td align="left" valign="top"><a id="morehelp"></a><a id="id2977491"></a><b>13.</b></td><td align="left" valign="top"><p>
I have some other problem, what do I do?
</p></td></tr><tr class="answer"><td align="left" valign="top"></td><td align="left" valign="top"><p>
Ask your question on the <a href="https://lists.sourceforge.net/lists/listinfo/gpsbabel-misc" target="_top">GPSBabel-Misc</a> mailing list.
If you are using this option with compressed or simplified tracks from
your handheld GPS receiver, you might find the
<a href="#filter_interpolate" title="Interpolate between trackpoints (interpolate)">interpolate</a> filter useful.
+</p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="fmt_nmea_o_append_positioning"></a><code class="option">append_positioning</code> option</h3></div></div></div><p>
+ Append realtime positioning data to the output file instead of truncating.
+ </p><p>
+ When writing NMEA realtime positioning data, append to the
+ output file instead of truncating it on each successive position
+ fix.
</p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="fmt_nmea_o_baud"></a><code class="option">baud</code> option</h3></div></div></div><p>
Speed in bits per second of serial port (baud=4800).
</p><p>
read and write routes
</p></li></ul></div><p>OziExplorer Waypoint Format - Another CSV format file.
Tested against OziExplorer v 3.90.3a / Shareware. Contributed by Alex
-Mottram</p><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="fmt_ozi_o_snlen"></a><code class="option">snlen</code> option</h3></div></div></div><p>
+Mottram</p><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="fmt_ozi_o_pack"></a><code class="option">pack</code> option</h3></div></div></div><p>
+ Write all tracks into one file.
+ </p><p>
+ In normal case GPSBabel creates for each track a separate file (track.plt, track-1.plt, ...).
+ With this option all tracks will be written into one file. A '1' in the third field of the
+ trackpoint record signals the beginning of a new track.
+</p><p>
+ <strong class="userinput"><code>
+ gpsbabel -i gpx -f tracks.gpx -o ozi,pack -F track
+ </code></strong>
+</p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="fmt_ozi_o_snlen"></a><code class="option">snlen</code> option</h3></div></div></div><p>
Max synthesized shortname length.
</p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="fmt_ozi_o_snwhite"></a><code class="option">snwhite</code> option</h3></div></div></div><p>
Allow whitespace synth. shortnames.
Known limits: max. 16 characters for waypoint names and max. 50 waypoints per route.
</p><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="fmt_raymarine_o_location"></a><code class="option">location</code> option</h3></div></div></div><p>
Default location.
- </p></div></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="fmt_cup"></a>See You flight analysis data (cup)</h2></div></div></div><p class="fmtcapshdr">
+ </p><p>
+ With this option you can specify the name of the folder
+ where the waypoints are placed.
+</p><p>
+ This name is also limited to 16 characters.
+</p></div></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="fmt_cup"></a>See You flight analysis data (cup)</h2></div></div></div><p class="fmtcapshdr">
This format can...
</p><div class="itemizedlist"><ul type="disc"><li><p class="fmtcapsitem">
read and write waypoints
</p><p>
This option should be 'f' if you want the altitude expressed in feet and
'm' for meters. The default is 'f'.
-</p></div></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="fmt_tomtom"></a>TomTom POI file (tomtom)</h2></div></div></div><p class="fmtcapshdr">
+</p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="fmt_text_o_splitoutput"></a><code class="option">splitoutput</code> option</h3></div></div></div><p>
+ Write each waypoint in a separate file.
+ </p><p>
+ Splits output into separate files for each waypoint by appending a
+ decimal number to the output filename.
+</p><div class="example"><a id="text_splitoutput"></a><p class="title"><b>Example 3.5. Example for splitoutput option to text format</b></p><div class="example-contents"><p>
+ If "MyPQ.gpx" contains five waypoints,
+ <strong class="userinput"><code>
+ gpsbabel -i gpx -f MyPocketQuery -o text,split -F blah
+ </code></strong>
+ will result in files named blah1 ... blah5, each containing info
+ from one of those waypoints.
+ </p></div></div><br class="example-break" /></div></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="fmt_tomtom_itn"></a>TomTom Itineraries (.itn) (tomtom_itn)</h2></div></div></div><p class="fmtcapshdr">
+ This format can...
+ </p><div class="itemizedlist"><ul type="disc"><li><p class="fmtcapsitem">
+ read and write routes
+ </p></li></ul></div><p>
+This format is derived from the <a href="#fmt_xcsv" title="? Character Separated Values (xcsv)">xcsv</a>
+format, so it has all of the same options as that format.
+</p><p>
+ tomtom_itn can be used to read and write <a href="http://www.tomtom.com" target="_top">TomTom</a> Navigator Itineraries (Routes).
+</p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="fmt_tomtom_asc"></a>TomTom POI file (.asc) (tomtom_asc)</h2></div></div></div><p class="fmtcapshdr">
+ This format can...
+ </p><div class="itemizedlist"><ul type="disc"><li><p class="fmtcapsitem">
+ read and write waypoints
+ </p></li></ul></div><p>
+This format is derived from the <a href="#fmt_xcsv" title="? Character Separated Values (xcsv)">xcsv</a>
+format, so it has all of the same options as that format.
+</p><p>
+ With this format you can read and write <a href="http://www.tomtom.com" target="_top">TomTom</a>
+ Points of Interest - POI (ascii) files.
+ It is a simple text (csv) format with only latitude, longitude and a short name.
+</p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="fmt_tomtom"></a>TomTom POI file (.ov2) (tomtom)</h2></div></div></div><p class="fmtcapshdr">
This format can...
</p><div class="itemizedlist"><ul type="disc"><li><p class="fmtcapsitem">
read and write waypoints
Geocaching traits when available.</p></div></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="fmt_unicsv"></a>Universal csv with field structure in first line (unicsv)</h2></div></div></div><p class="fmtcapshdr">
This format can...
</p><div class="itemizedlist"><ul type="disc"><li><p class="fmtcapsitem">
- read waypoints
+ read and write waypoints
+ </p></li><li><p class="fmtcapsitem">
+ read and write tracks
+ </p></li><li><p class="fmtcapsitem">
+ read and write routes
</p></li></ul></div><p>
- Unicsv examines the first line of a file to determine the field
- order and field separator in that file. It is thus read-only format.
- </p><p>
- If the first line contains any tabs, the data lines are assumed
- to be tab separated. Otherwise the fields are assumed to be
- separated by commas.
- </p><p>
- The list of keywords include "lat", "lon", "desc", "name",
- "notes", "alt", "utm z", "utm n", "utm e", "utm c" and "url".
- Fuller spellings (i.e. "longitude") may be used.
- </p><p>
- A typical file may be:
- </p><pre class="screen">
- Name, Latitude, Longitude, Description
- GCEBB,35.972033,-87.134700,Mountain Bike Heaven by susy1313
- GC1A37,36.090683,-86.679550,The Troll by a182pilot & Family
- </pre><p>
- </p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="fmt_vcard"></a>Vcard Output (for iPod) (vcard)</h2></div></div></div><p class="fmtcapshdr">
+ Unicsv examines the first line of a file to determine the field
+ order and field separator in that file. It is thus read-only format.
+</p><p>
+ If the first line contains any tabs, the data lines are assumed
+ to be tab separated. Otherwise the fields are assumed to be
+ separated by commas.
+</p><p>
+ The list of keywords include:
+ </p><pre class="screen">
+ alt = Altitude
+ bng_e = British National Grid's easting
+ bng = full coordinate in BNG format (zone easting northing)
+ bng_pos = full coordinate in BNG format (zone easting northing)
+ bng_n = British National Grid's northing
+ bng_z = British National Grid's zone
+ caden = Cadence
+ comment = Notes
+ cour = Heading / Course true
+ date = Date (yyyy/mm/dd)
+ depth = Depth
+ desc = Description
+ ele = Altitude (elevation)
+ fix = 3d, 2d, etc.
+ geschw = Geschwindigkeit (speed)
+ hdop = Horizontal precision
+ head = Heading / Course true
+ heart = Heartrate
+ icon = Symbol (icon) name
+ lat = Latitude
+ lon = Longitude
+ name = Waypoint name ("Shortname")
+ notes = Notes
+ pdop = Precision summary (horizontal & vertical)
+ prox = Proximity
+ sat = Number of sats used for fix
+ speed = Speed
+ symb = Symbol (icon) name
+ tempf = Temperature (degrees Fahrenheit)
+ temp = Temperature (degrees Celsius)
+ time = Time (hh:mm:ss[.msec])
+ url = URL
+ utc_d = UTC date
+ utc_t = UTC time
+ utm_c = UTM zone character
+ utm_e = UTM easting
+ utm = full coordinate in UTM format (zone zone-ch easting northing)
+ utm_pos = full coordinate in UTM format (zone zone-ch easting northing)
+ utm_n = UTM northing
+ utm_z = UTM zone
+ vdop = Vertical precision
+ x = Longitude
+ x_pos = Longitude
+ y = Latitude
+ y_pos = Latitude
+ z = Altitude (elevation)
+ </pre><p>
+ We support some enhanced Garmin attributes. They are also available in
+ <a href="#fmt_gpx" title="GPX XML (gpx)">gpx</a>, <a href="#fmt_gdb" title="Garmin MapSource - gdb (gdb)">gdb</a>,
+ <a href="#fmt_garmin_gpi" title="Garmin Points of Interest (.gpi) (garmin_gpi)">garmin_gpi</a> and partly
+ <a href="#fmt_garmin_txt" title="Garmin MapSource - txt (tab delimited) (garmin_txt)">garmin_txt</a>. These entities are currently
+ not visible in <span class="productname">MapSource</span>™ (6.12.4), but are NOT dropped
+ when working with GDB (version 3) or GPX files.
+ </p><pre class="screen"></pre><p>
+ Please note, that these do NOT provide a geocoding service; don't expect
+ to "convert" a street address to a latitude and longitude.
+ </p><pre class="screen">
+ addr = Street address
+ city = City
+ country = Country
+ faci = Facility (not available in GPX)
+ phone = Phone number
+ post = Postal code
+ state = State
+ </pre><p>
+ Fuller spellings (i.e. "longitude") may be used. You can also
+ use keywords with a whitespace instead of an underscore.
+</p><p>
+ A typical file may be:
+ </p><pre class="screen">
+ Name, Latitude, Longitude, Description
+ GCEBB,35.972033,-87.134700,Mountain Bike Heaven by susy1313
+ GC1A37,36.090683,-86.679550,The Troll by a182pilot & Family
+ </pre><p>
+</p><p>
+ On the output side unicsv writes fixed number of columns (waypoint index, latitude and longitude)
+ followed by a variable column list depending on internal data.
+</p><p>
+ With at least ONE valid timestamp in data a unicsv output may look like that:
+ </p><pre class="screen">
+ No,Name,Latitude,Longitude,Description,Date,Time
+ 1,"GCEBB",35.972033,-87.134700,"Mountain Bike Heaven by susy1313",2003/06/29,09:00:00
+ 2,"GC1A37",36.090683,-86.679550,"The Troll by a182pilot & Family",,
+ </pre><p>
+</p><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="fmt_unicsv_o_datum"></a><code class="option">datum</code> option</h3></div></div></div><p>
+ GPS datum (def. WGS 84).
+ </p><p>
+ This option specifies the datum to be used on output. Valid values for this
+ option are listed in <a href="#Datums" title="Appendix A. Supported Datums">Appendix A, <i>Supported Datums</i></a>.
+</p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="fmt_unicsv_o_grid"></a><code class="option">grid</code> option</h3></div></div></div><p>
+ Write position using this grid..
+ </p><p>
+ This value specifies the grid to be used on write. It is similar to
+ the grid option of garmin_txt (see <a href="#garmin_grid" title="Table 3.1. Grid values for garmin_txt">Table 3.1, “Grid values for garmin_txt”</a>). The only difference is that unicsv does not
+ write a degree sign (°) into the output file.
+</p><p>
+ Without this option unicsv writes the coordinates as simple numbers like in the samples above.
+</p></div></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="fmt_vcard"></a>Vcard Output (for iPod) (vcard)</h2></div></div></div><p class="fmtcapshdr">
This format can...
</p><div class="itemizedlist"><ul type="disc"><li><p class="fmtcapsitem">
write waypoints
format reads a Vito Navigator II .SMT track file and can work in
either waypoint or track mode. The speed, heading and Dilution of
Position data is written in the notes field.</p><p> Support for writing .SMT tracks is very experimental and
-may crash VitoNavigator II on the Pocket PC.</p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="fmt_wfff"></a>WiFiFoFum 2.0 for PocketPC XML (wfff)</h2></div></div></div><p class="fmtcapshdr">
+may crash VitoNavigator II on the Pocket PC.</p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="fmt_vitovtt"></a>Vito SmartMap tracks (.vtt) (vitovtt)</h2></div></div></div><p class="fmtcapshdr">
+ This format can...
+ </p><div class="itemizedlist"><ul type="disc"><li><p class="fmtcapsitem">
+ read tracks
+ </p></li></ul></div><p>
+ This format reads the binary (.vtt) track logs recorded by
+ <a href="http://vitotechnology.com/en/products/smartmap_nokia_series60.html" target="_top">
+ <span class="application">VITO SmartMap for Nokia Series 60</span>
+ </a> 1.0, a GPS application for smartphones connected to
+ NMEA 0183-compatible Bluetooth GPS receivers. It may work
+ with .vtt files produced by versions of VITO SmartMap
+ for other platforms.
+</p><p>
+ This format was reverse engineered from a .vtt file.
+ Currently, the coordinates, altitude, and time are
+ available for each point recorded in a track.
+ The course speed and heading fields have been identified,
+ but the units are not certain and so those fields are ignored.
+ The rest of the entry has not yet been decoded. The format
+ uses little-endian byte ordering. The application displays
+ metric units by default. Time is UTC.
+</p><div class="table"><a id="id2984364"></a><p class="title"><b>Table 3.2. track file header (8 bytes)</b></p><div class="table-contents"><table summary="track file header (8 bytes)" border="1"><colgroup><col /><col /></colgroup><thead><tr><th>Position</th><th>Field info</th></tr></thead><tbody><tr><td>bytes 0-3</td><td>Probably a version field. Int value is 3 in sample file.</td></tr><tr><td>bytes 4-7</td><td>Number of points in file as int.</td></tr></tbody></table></div></div><br class="table-break" /><div class="table"><a id="id2984418"></a><p class="title"><b>Table 3.3. track point (32 bytes)</b></p><div class="table-contents"><table summary="track point (32 bytes)" border="1"><colgroup><col /><col /></colgroup><thead><tr><th>Position</th><th>Field info</th></tr></thead><tbody><tr><td>bytes 0-3</td><td>Decimal latitude multiplied by 20000000 as int.</td></tr><tr><td>bytes 4-7</td><td>Decimal longitude multiplied by 10000000 as int.</td></tr><tr><td>bytes 8-11</td><td>Altitude in meters as float.</td></tr><tr><td>bytes 12-13</td><td>Year, with century, as int.</td></tr><tr><td>byte 14</td><td>Month, ranging 1-12.</td></tr><tr><td>byte 15</td><td>Day of month, ranging 1-31.</td></tr><tr><td>byte 16</td><td>Hour, ranging 0-23.</td></tr><tr><td>byte 17</td><td>Minute, ranging 0-59.</td></tr><tr><td>bytes 18-21</td><td>Decimal second multiplied by 30000000 as int.</td></tr><tr><td>bytes 22-25</td><td>
+ Probably speed in meters per second as float.
+ Ranges 0-~3 in file, seems reasonable since sample
+ file was acquired on foot.
+ </td></tr><tr><td>bytes 26-27</td><td>
+ Probably decimal heading multiplied by something.
+ Ranges between min and max values possible when
+ decoded as integer. Doesn't change when speed field is 0.
+ Doesn't change smoothly, jumps around a bit.
+ </td></tr><tr><td>bytes 28-31</td><td>
+ Status field of some kind. Changes only twice in file.
+ May contain satellite count or PDOP info, as both are
+ reported by the application's GUI.
+ </td></tr></tbody></table></div></div><br class="table-break" /></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="fmt_wfff"></a>WiFiFoFum 2.0 for PocketPC XML (wfff)</h2></div></div></div><p class="fmtcapshdr">
This format can...
</p><div class="itemizedlist"><ul type="disc"><li><p class="fmtcapsitem">
read waypoints
Ad-hoc open icon name.
</p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="fmt_wfff_o_snmac"></a><code class="option">snmac</code> option</h3></div></div></div><p>
Shortname is MAC address.
- </p></div></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="fmt_wbt-bin"></a>Wintec WBT-100/200 Binary file format (wbt-bin)</h2></div></div></div><p class="fmtcapshdr">
+ </p></div></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="fmt_wbt-bin"></a>Wintec WBT-100/200 Binary File Format (wbt-bin)</h2></div></div></div><p class="fmtcapshdr">
This format can...
</p><div class="itemizedlist"><ul type="disc"><li><p class="fmtcapsitem">
read tracks
GPS data logger. This format reads the binary file format created
by Wintec's Windows application.</p><p>
<a href="http://www.semsons.com/wi3mugpsrebt.html" target="_top">Wintec WBT-200 </a>
-</p><div class="example"><a id="wbt-bin-on-macos"></a><p class="title"><b>Example 3.3. Command showing conversion of a Wintec binary file to GPX</b></p><div class="example-contents"><p><strong class="userinput"><code>gpsbabel -i wbt-bin -f tracks.bin -o
+</p><div class="example"><a id="wbt-bin-on-macos"></a><p class="title"><b>Example 3.6. Command showing conversion of a Wintec binary file to GPX</b></p><div class="example-contents"><p><strong class="userinput"><code>gpsbabel -i wbt-bin -f tracks.bin -o
gpx -F out.gpx</code></strong></p></div></div><br class="example-break" /></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="fmt_wbt"></a>Wintec WBT-100/200 GPS Download (wbt)</h2></div></div></div><p class="fmtcapshdr">
This format can...
</p><div class="itemizedlist"><ul type="disc"><li><p class="fmtcapsitem">
+ read waypoints
+ </p></li><li><p class="fmtcapsitem">
read tracks
</p></li></ul></div><p>Serial download protocol for the <span class="productname">Wintec WBT-200</span>™ GPS data logger. Although untested it is expected that this will also support the WBT-100.</p><p>
<a href="http://www.semsons.com/wi3mugpsrebt.html" target="_top">Wintec WBT-200</a>
-</p><div class="example"><a id="wbt-on-macos"></a><p class="title"><b>Example 3.4. Command showing WBT-200 download and erase over Bluetooth on Mac OS X</b></p><div class="example-contents"><p><strong class="userinput"><code>gpsbabel -i wbt,erase -f /dev/cu.WBT200-SPPslave-1 -o gpx -F out.gpx</code></strong></p></div></div><br class="example-break" /><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="fmt_wbt_o_erase"></a><code class="option">erase</code> option</h3></div></div></div><p>
+</p><div class="example"><a id="wbt-on-macos"></a><p class="title"><b>Example 3.7. Command showing WBT-200 download and erase over Bluetooth on Mac OS X</b></p><div class="example-contents"><p><strong class="userinput"><code>gpsbabel -t -w -i wbt,erase -f /dev/cu.WBT200-SPPslave-1 -o gpx -F out.gpx</code></strong></p></div></div><br class="example-break" /><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="fmt_wbt_o_erase"></a><code class="option">erase</code> option</h3></div></div></div><p>
Erase device data after download.
- </p><p>This option erases the track log from the device after download.</p></div></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="fmt_yahoo"></a>Yahoo Geocode API data (yahoo)</h2></div></div></div><p class="fmtcapshdr">
+ </p><p>This option erases the track log from the device after download.</p></div></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="fmt_wbt-tk1"></a>Wintec WBT-201/G-Rays 2 Binary File Format (wbt-tk1)</h2></div></div></div><p class="fmtcapshdr">
+ This format can...
+ </p><div class="itemizedlist"><ul type="disc"><li><p class="fmtcapsitem">
+ read tracks
+ </p></li></ul></div><p>File protocol for the <span class="productname">Wintec WBT-201 / G-Rays 2</span>™
+GPS data logger. This format reads the binary file format created
+by Wintec's Time Machine X application.</p><p>
+<a href="http://www.semsons.com/wiwbmu3gpsre2.html" target="_top">Wintec WBT-201</a>
+</p><div class="example"><a id="wbt-tk1"></a><p class="title"><b>Example 3.8. Command showing conversion of a Wintec binary file to GPX</b></p><div class="example-contents"><p><strong class="userinput"><code>gpsbabel -w -t -i wbt-tk1 -f tracks.tk1 -o gpx -F out.gpx</code></strong></p></div></div><br class="example-break" /></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="fmt_yahoo"></a>Yahoo Geocode API data (yahoo)</h2></div></div></div><p class="fmtcapshdr">
This format can...
</p><div class="itemizedlist"><ul type="disc"><li><p class="fmtcapsitem">
read waypoints
format use that file. If you created a new style file called
"mystyle.style" and you want to write the waypoints from
a GPX file named "mine.gpx" to it, you would issue a command like:
-</p><p><strong class="userinput"><code>gpsbabel -i gpx -f mine.gpx -o xcsv,style=mystyle.style -f mine.new</code></strong></p><p>
+</p><p><strong class="userinput"><code>gpsbabel -i gpx -f mine.gpx -o xcsv,style=mystyle.style -F mine.new</code></strong></p><p>
You might then examine <code class="filename">mine.new</code> to see if it met
your expectations. If not, you could continue to tweak
<code class="filename">mystyle.style</code> until it did, rerunning the above
# to the letter "n" in "min" and the letter "e" in "deg."
# (writes 31 40 00.000N)
IFIELD LAT_HUMAN_READABLE,"","%d %d %f%c"
+</pre></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="style_def_map_en_bng"></a>MAP_EN_BNG</h3></div></div></div><p>
+ MAP_EN_BNG converts coordinates from/to British National Grid (BNG).
+</p><p>
+ The only supported order of the items is: Map,Easting,Northing.
+ During output all coordinates have to be located within this limited area.
+</p><p>
+examples:
+</p><pre class="screen">
+ IFIELD MAP_EN_BNG,"","%s%5d %5d" # (writes i.e. "SJ00001 00001")
+ IFIELD MAP_EN_BNG,"","%s %d %d" # (writes i.e. "TQ 888 999")
</pre></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="style_def_lonhuman"></a>LON_HUMAN_READABLE</h3></div></div></div><p>
See LAT_HUMAN_READABLE except LON_HUMAN_READABLE defines LONGITUDE.
</p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="style_def_latlonhuman"></a>LATLON_HUMAN_READABLE</h3></div></div></div><p>
</p><p>
example:
</p><pre class="screen"> IFIELD LON_NMEA, "%f", "%010.3f" # (writes -08708.082)
+</pre></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="style_def_latlon_10ex"></a>LAT_10EX / LON_10EX</h3></div></div></div><p>
+ Defines the latitude or longitude in the format used i.e. by TomTom Navigator
+ itinerary files. It is degress multiplied by 10 power X. X have to be replaced with
+ a valid decimal value. A factor of 10000 would be generated by LAT_10E5 as shown
+ in the examples below.
+</p><p>
+examples:
+</p><pre class="screen"> IFIELD LAT_10E5, "%f", "%.f" # (writes 3558322)
+</pre><pre class="screen"> IFIELD LON_10E5, "%f", "%.f" # (writes -8708082)
</pre></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="style_def_altfeet"></a>ALT_FEET</h3></div></div></div><p>
ALT_FEET is the position's ALTITUDE in FEET. This value is treated as
a SIGNED DOUBLE PRECISION FLOAT and requires a FLOATING POINT printf
</p><p>
example:
</p><pre class="screen"> IFIELD ISO_TIME,"","%s"
+</pre></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="style_def_isotimems"></a>ISO_TIME_MS</h3></div></div></div><p>
+ ISO_TIME_MS is much like ISO_TIME, but expresses milliseconds at the
+ end of the timestamp.
+ It is thus in the format yyyy-mm-ddThh:mm:ss.SSSzzzzz
+ where 'SSS' is milliseconds and zzzzzz is the local time offset
+ or the character Z for UTC time.
+ On output, UTC 'Z' time zone will always be used.
+</p><p>
+example:
+</p><pre class="screen"> IFIELD ISO_TIME_MS,"","%s"
</pre></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="style_def_geodiff"></a>GEOCACHE_DIFF</h3></div></div></div><p>
GEOCACHE_DIFF is valid only for geocaches and represents a DOUBLE
PRECISION FLOAT. This is the geocache "difficulty" rating as defined by
</p><p>
example:
</p><pre class="screen"> PATH_SPEED,"","%f"
+</pre></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="style_def_pathspeed_kph"></a>PATH_SPEED_KPH</h3></div></div></div><p>
+ Like PATH_SPEED but means kilometers per hour.
+</p><p>
+example:
+</p><pre class="screen"> PATH_SPEED_KPH,"","%.1f"
+</pre></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="style_def_pathspeed_mph"></a>PATH_SPEED_MPH</h3></div></div></div><p>
+ Like PATH_SPEED but means miles per hour.
+</p><p>
+example:
+</p><pre class="screen"> PATH_SPEED_MPH,"","%.1f"
+</pre></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="style_def_pathspeed_knots"></a>PATH_SPEED_KNOTS</h3></div></div></div><p>
+ Like PATH_SPEED but means knots (nautical).
+</p><p>
+example:
+</p><pre class="screen"> PATH_SPEED_KNOTS,"","%.1f"
</pre></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="style_def_pathcourse"></a>PATH_COURSE</h3></div></div></div><p>
Course in degerees. Gpsbabel does not calculate this data by default;
it is read from the input file if present. (If not present, it may be
</p><p>
example:
</p><pre class="screen"> GPS_FIX,"","%s"
-</pre></div></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="style_examples"></a>Examples</h2></div></div></div><p>
+</pre></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="style_track_name"></a>TRACK_NAME</h3></div></div></div><p>The name of the track currently being operated on. Needs string conversion.</p><p>example:</p><pre class="screen">TRACK_NAME, "", "%s"</pre></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="style_route_name"></a>ROUTE_NAME</h3></div></div></div><p>The name of the route currently being operated on. Needs string conversion.</p><p>example:</p><pre class="screen">ROUTE_NAME, "", "%s"</pre></div></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="style_examples"></a>Examples</h2></div></div></div><p>
Here is one example style file from the GPSBabel source.
</p><div class="literallayout"><p><br />
# gpsbabel XCSV style file<br />
written on output and are not used to supplement missing input. When
using default values your mileage will vary greatly depending on the
input formats used to populate waypoint data.
-</p></div></div></div></div></body></html>
+</p></div></div></div><div class="glossary"><div class="titlepage"><div><div><h2 class="title"><a id="Glossary"></a>Glossary</h2></div></div></div><p>Terms that are used in conjunction with GPSBabel.</p><div class="glossdiv"><h3 class="title">G</h3><dl><dt><a id="gl_xml"></a>Geocaching</dt><dd><p>GPS based "paper chase", see
+ <a href="http://en.wikipedia.org/wiki/Geocaching" target="_top">http://en.wikipedia.org/wiki/Geocaching</a></p></dd></dl></div><div class="glossdiv"><h3 class="title">I</h3><dl><dt><a id="gl_itinerary"></a>Itinerary</dt><dd><p>same as a Route (e.g. used by TomTom)</p></dd></dl></div><div class="glossdiv"><h3 class="title">P</h3><dl><dt><a id="gl_poi"></a>Points of Interest (POI)</dt><dd><p>a collection of gas stations, post boxes, shops and
+ like.</p></dd></dl></div><div class="glossdiv"><h3 class="title">R</h3><dl><dt><a id="gl_route"></a>Route</dt><dd><p>a list of geopoints (often with names) connected in
+ a specific order. Usually a collection of geopoints
+ defining the route you want to pass while traveling,
+ created by PC software, or generated inside a GPS device.
+ They can be composed of existing waypoints, or new
+ "routepoints" might be generated.</p></dd></dl></div><div class="glossdiv"><h3 class="title">T</h3><dl><dt><a id="gl_track"></a>Track</dt><dd><p>a collection of geopoints recorded by your GPS
+ device while traveling -- "breadcrumb trails". The order
+ of trackpoints within the track is important. Usually a
+ trackpoint doesn't have a name or comment, but a
+ timestamp. This distinguishes a trackpoint from a
+ waypoint.</p></dd></dl></div><div class="glossdiv"><h3 class="title">W</h3><dl><dt><a id="gl_waypoint"></a>Waypoints</dt><dd><p>are geopoints that are not necessarily connected to
+ other points, and their order is unimportant. They can be
+ entered before, while or after you actually visit the
+ place and might have tags like name, comment and the
+ like. Usually used to mark special locations as your
+ home, a hotel or a geocache.</p></dd></dl></div></div></div></body></html>
#include "defs.h"
#if PDBFMTS_ENABLED
-#include "coldsync/palm.h"
-#include "coldsync/pdb.h"
+#include "pdbfile.h"
#define MYNAME "GPSPilot"
#define MYTYPE_POINTS 0x706f696e /* poin */
pdb_32 en_latitude; /* similarly */
};
-static FILE *file_in;
-static FILE *file_out;
+static pdbfile *file_in, *file_out;
static const char *out_fname;
-static struct pdb *opdb;
-static struct pdb_record *opdb_rec;
static char *dbname = NULL;
+static int ct;
static
arglist_t gpspilot_args[] = {
static void
rd_init(const char *fname)
{
- file_in = xfopen(fname, "rb", MYNAME);
+ file_in = pdb_open(fname, MYNAME);
}
static void
rd_deinit(void)
{
- fclose(file_in);
+ pdb_close(file_in);
if ( dbname ) {
xfree(dbname);
dbname = NULL;
static void
wr_init(const char *fname)
{
- file_out = xfopen(fname, "wb", MYNAME);
+ file_out = pdb_create(fname, MYNAME);
out_fname = fname;
+ ct = 0;
}
static void
wr_deinit(void)
{
- fclose(file_out);
+ pdb_close(file_out);
if ( dbname ) {
xfree(dbname);
dbname = NULL;
data_read(void)
{
struct record *rec;
- struct pdb *pdb;
- struct pdb_record *pdb_rec;
+ pdbrec_t *pdb_rec;
- if (NULL == (pdb = pdb_Read(fileno(file_in)))) {
- fatal(MYNAME ": pdb_Read failed\n");
- }
-
- if ((pdb->creator != MYCREATOR)) {
+ if ((file_in->creator != MYCREATOR)) {
fatal(MYNAME ": Not a gpspilot file.\n");
}
- switch (pdb->type)
+ switch (file_in->type)
{
case MYTYPE_AIRPORT:
case MYTYPE_POINTS:
fatal(MYNAME ": Not a gpspilot file.\n");
}
- for(pdb_rec = pdb->rec_index.rec; pdb_rec; pdb_rec=pdb_rec->next) {
+ for(pdb_rec = file_in->rec_list; pdb_rec; pdb_rec = pdb_rec->next) {
waypoint *wpt_tmp;
char *vdata;
waypt_add(wpt_tmp);
}
- free_pdb(pdb);
}
gpspilot_writewpt(const waypoint *wpt)
{
struct record *rec;
- static int ct = 0;
char *vdata;
rec = xcalloc(sizeof(*rec)+206,1);
}
vdata += strlen( vdata ) + 1;
- opdb_rec = new_Record (0, 2, ct++, (uword) (vdata-(char *)rec), (const ubyte *)rec);
-
- if (opdb_rec == NULL) {
- fatal(MYNAME ": libpdb couldn't create record\n");
- }
+ pdb_write_rec(file_out, 0, 2, ct++, (void *)rec, (char *)vdata - (char *)rec);
- if (pdb_AppendRecord(opdb, opdb_rec)) {
- fatal(MYNAME ": libpdb couldn't append record\n");
- }
xfree(rec);
}
static void
data_write(void)
{
- if (NULL == (opdb = new_pdb())) {
- fatal (MYNAME ": new_pdb failed\n");
- }
-
if ( dbname ) {
- strncpy(opdb->name, dbname, PDB_DBNAMELEN);
+ strncpy(file_out->name, dbname, PDB_DBNAMELEN);
}
else {
- strncpy(opdb->name, out_fname, PDB_DBNAMELEN);
+ strncpy(file_out->name, out_fname, PDB_DBNAMELEN);
}
- opdb->name[PDB_DBNAMELEN-1] = 0;
- opdb->attributes = PDB_ATTR_BACKUP;
- opdb->ctime = opdb->mtime = current_time() + 2082844800U;
- opdb->type = MYTYPE_POINTS;
- opdb->creator = MYCREATOR;
- opdb->version = 0;
+ file_out->name[PDB_DBNAMELEN-1] = 0;
+ file_out->attr = PDB_FLAG_BACKUP;
+ file_out->ctime = file_out->mtime = current_time() + 2082844800U;
+ file_out->type = MYTYPE_POINTS;
+ file_out->creator = MYCREATOR;
+ file_out->version = 0;
waypt_disp_all(gpspilot_writewpt);
-
- pdb_Write(opdb, fileno(file_out));
}
gpssim_write_sentence(obuf);
}
-#define mpsec2knots(n) ((n) * 1.9438445 / 0.51444444)
-
static void
gpssim_write_pt(const waypoint *wpt)
{
char obuf[1024];
double lat, lon;
- if (wpt->speed > 0) {
- gpssim_write_spd(mpsec2knots(wpt->speed));
+ if WAYPT_HAS(wpt, speed) {
+ gpssim_write_spd(MPS_TO_KNOTS(wpt->speed));
}
lat = degrees2ddmm(wpt->latitude);
ibuf += 9;
}
- n = sscanf(ibuf, "%lf%c %lf%c %ld%c %30[^,]s %2s",
+ n = sscanf(ibuf, "%lf%c %lf%c %ld%c %30[^,] %2s",
&lat, &latdir, &lon, &londir,
&alt, &alttype, desc, icon);
/* Require at least first threee fields, otherwise ignore */
static gbfile *fd;
static gbfile *ofd;
static short_handle mkshort_handle;
+static const char *link_url;
+static char *link_text;
static const char *input_string = NULL;
static int input_string_len = 0;
#define MYNAME "GPX"
#define MY_CBUF_SZ 4096
#define DEFAULT_XSI_SCHEMA_LOC "http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd"
+#define DEFAULT_XSI_SCHEMA_LOC_11 "http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd"
#define DEFAULT_XSI_SCHEMA_LOC_FMT "\"http://www.topografix.com/GPX/%c/%c http://www.topografix.com/GPX/%c/%c/gpx.xsd\""
#ifndef CREATOR_NAME_URL
# define CREATOR_NAME_URL "GPSBabel - http://www.gpsbabel.org"
tt_cache_log_date,
tt_cache_placer,
- tt_garmin_extension, /* don't change this order */
- tt_garmin_waypt_extension,
- tt_garmin_proximity,
- tt_garmin_temperature,
- tt_garmin_depth,
- tt_garmin_display_mode,
- tt_garmin_categories,
- tt_garmin_category, /* don't change this order */
+ tt_wpt_extensions,
+
+ tt_garmin_wpt_extensions, /* don't change this order */
+ tt_garmin_wpt_proximity,
+ tt_garmin_wpt_temperature,
+ tt_garmin_wpt_depth,
+ tt_garmin_wpt_display_mode,
+ tt_garmin_wpt_categories,
+ tt_garmin_wpt_category,
+ tt_garmin_wpt_addr,
+ tt_garmin_wpt_city,
+ tt_garmin_wpt_state,
+ tt_garmin_wpt_country,
+ tt_garmin_wpt_postal_code,
+ tt_garmin_wpt_phone_nr, /* don't change this order */
tt_rte,
tt_rte_name,
{type, 1, "/gpx/wpt/groundspeak:cache/groundspeak:" name, 0UL }, \
{type, 1, "/gpx/wpt/extensions/cache/" name, 0UL }
+#define GARMIN_WPT_EXT "/gpx/wpt/extensions/gpxx:WaypointExtension"
+
GEOTAG( tt_cache, "cache"),
GEOTAG( tt_cache_name, "name"),
GEOTAG( tt_cache_container, "container"),
{ tt_cache_log_date, 1, "/gpx/wpt/groundspeak:cache/groundspeak:logs/groundspeak:log/groundspeak:date"},
{ tt_cache_log_date, 1, "/gpx/wpt/extensions/cache/logs/log/date"},
- { tt_garmin_extension, 0, "/gpx/wpt/extensions", 0UL },
- { tt_garmin_waypt_extension, 0, "/gpx/wpt/extensions/gpxx:WaypointExtension", 0UL },
- { tt_garmin_proximity, 0, "/gpx/wpt/extensions/gpxx:WaypointExtension/gpxx:Proximity", 0UL },
- { tt_garmin_temperature, 0, "/gpx/wpt/extensions/gpxx:WaypointExtension/gpxx:Temperature", 0UL },
- { tt_garmin_depth, 0, "/gpx/wpt/extensions/gpxx:WaypointExtension/gpxx:Depth", 0UL },
- { tt_garmin_display_mode, 0, "/gpx/wpt/extensions/gpxx:WaypointExtension/gpxx:DisplayMode", 0UL },
- { tt_garmin_categories, 0, "/gpx/wpt/extensions/gpxx:WaypointExtension/gpxx:Categories", 0UL },
- { tt_garmin_category, 0, "/gpx/wpt/extensions/gpxx:WaypointExtension/gpxx:Categories/gpxx:Category", 0UL },
+ { tt_wpt_extensions, 0, "/gpx/wpt/extensions", 0UL },
+
+ { tt_garmin_wpt_extensions, 0, GARMIN_WPT_EXT, 0UL },
+ { tt_garmin_wpt_proximity, 0, GARMIN_WPT_EXT "/gpxx:Proximity", 0UL },
+ { tt_garmin_wpt_temperature, 0, GARMIN_WPT_EXT "/gpxx:Temperature", 0UL },
+ { tt_garmin_wpt_depth, 0, GARMIN_WPT_EXT "/gpxx:Depth", 0UL },
+ { tt_garmin_wpt_display_mode, 0, GARMIN_WPT_EXT "/gpxx:DisplayMode", 0UL },
+ { tt_garmin_wpt_categories, 0, GARMIN_WPT_EXT "/gpxx:Categories", 0UL },
+ { tt_garmin_wpt_category, 0, GARMIN_WPT_EXT "/gpxx:Categories/gpxx:Category", 0UL },
+ { tt_garmin_wpt_addr, 0, GARMIN_WPT_EXT "/gpxx:Address/gpxx:StreetAddress", 0UL },
+ { tt_garmin_wpt_city, 0, GARMIN_WPT_EXT "/gpxx:Address/gpxx:City", 0UL },
+ { tt_garmin_wpt_state, 0, GARMIN_WPT_EXT "/gpxx:Address/gpxx:State", 0UL },
+ { tt_garmin_wpt_country, 0, GARMIN_WPT_EXT "/gpxx:Address/gpxx:Country", 0UL },
+ { tt_garmin_wpt_postal_code, 0, GARMIN_WPT_EXT "/gpxx:Address/gpxx:PostalCode", 0UL },
+ { tt_garmin_wpt_phone_nr, 0, GARMIN_WPT_EXT "/gpxx:PhoneNumber", 0UL },
{ tt_rte, 0, "/gpx/rte", 0UL },
{ tt_rte_name, 0, "/gpx/rte/name", 0UL },
static void
tag_gpx(const char **attrv)
{
- const char **avp = &attrv[0];
- while (*avp) {
+ const char **avp;
+ for (avp = &attrv[0]; *avp; avp += 2) {
if (strcmp(avp[0], "version") == 0) {
gpx_version = avp[1];
}
else if (strcmp(avp[0], "src") == 0) {
gpx_creator = avp[1];
}
+ /*
+ * Our handling of schemaLocation really is weird.
+ * If we see we have a "normal" GPX 1.1 header, on read,
+ * flip our default on write to use that and don't append
+ * it to the rest...
+ */
else if (strcmp(avp[0], "xsi:schemaLocation") == 0) {
+ if (0 == strcmp(avp[1], DEFAULT_XSI_SCHEMA_LOC_11)) {
+ if (0 == strcmp(xsi_schema_loc, DEFAULT_XSI_SCHEMA_LOC))
+ xfree(xsi_schema_loc);
+ xsi_schema_loc = xstrdup(DEFAULT_XSI_SCHEMA_LOC_11);
+ continue;
+ }
if (0 == strstr(xsi_schema_loc, avp[1])) {
xsi_schema_loc = xstrappend(xsi_schema_loc, " ");
xsi_schema_loc = xstrappend(xsi_schema_loc, avp[1]);
}
}
- avp+=2;
}
}
break;
case tt_wpt_link:
if (0 == strcmp(attr[0], "href")) {
- wpt_tmp->url = xstrdup(attr[1]);
+ link_url = attr[1];
}
break;
+ case tt_wpt_link_text:
+ link_text = cdatastr.mem;
+ break;
case tt_rte:
rte_head = route_head_alloc();
route_add_head(rte_head);
case tt_cache_desc_short:
tag_cache_desc(attr);
break;
+ case tt_cache_placer:
+ if (*attr && (0 == strcmp(attr[0], "id"))) {
+ wpt_tmp->gc_data.placer_id = atoi(attr[1]);
+ }
default:
break;
}
wpt_tmp->url = xstrdup(cdatastrp);
break;
case tt_wpt_urlname:
- case tt_wpt_link_text:
wpt_tmp->url_link_text = xstrdup(cdatastrp);
break;
+ case tt_wpt_link: {
+ char *lt = link_text;
+ if (lt) {
+ lt = xstrdup(lrtrim(link_text));
+ }
+
+ waypt_add_url(wpt_tmp, xstrdup(link_url), lt);
+ link_text = NULL;
+ }
+ break;
case tt_wpt:
waypt_add(wpt_tmp);
logpoint_ct = 0;
/*
* Garmin-waypoint-specific tags.
*/
- case tt_garmin_proximity:
- case tt_garmin_temperature:
- case tt_garmin_depth:
- case tt_garmin_display_mode:
- case tt_garmin_category:
- garmin_fs_xml_convert(tt_garmin_extension, tag, cdatastrp, wpt_tmp);
+ case tt_garmin_wpt_proximity:
+ case tt_garmin_wpt_temperature:
+ case tt_garmin_wpt_depth:
+ case tt_garmin_wpt_display_mode:
+ case tt_garmin_wpt_category:
+ case tt_garmin_wpt_addr:
+ case tt_garmin_wpt_city:
+ case tt_garmin_wpt_state:
+ case tt_garmin_wpt_country:
+ case tt_garmin_wpt_postal_code:
+ case tt_garmin_wpt_phone_nr:
+ garmin_fs_xml_convert(tt_garmin_wpt_extensions, tag, cdatastrp, wpt_tmp);
break;
/*
trk_head->rte_num = atoi(cdatastrp);
break;
case tt_trk_trkseg_trkpt_course:
- wpt_tmp->course = atof(cdatastrp);
+ WAYPT_SET(wpt_tmp, course, atof(cdatastrp));
break;
case tt_trk_trkseg_trkpt_speed:
- wpt_tmp->speed = atof(cdatastrp);
+ WAYPT_SET(wpt_tmp, speed, atof(cdatastrp));
break;
/*
{
char *tmp_ent;
- if (waypointp->url) {
- tmp_ent = xml_entitize(waypointp->url);
- if (gpx_wversion_num > 10) {
-
+ if (waypointp->url == NULL) {
+ return;
+ }
+
+ if (gpx_wversion_num > 10) {
+ url_link *tail;
+ for (tail = (url_link *)&waypointp->url_next; tail; tail = tail->url_next) {
+ tmp_ent = xml_entitize(tail->url);
gbfprintf(ofd, " <link href=\"%s%s\">\n",
urlbase ? urlbase : "", tmp_ent);
write_optional_xml_entity(ofd, " ", "text",
- waypointp->url_link_text);
+ tail->url_link_text);
gbfprintf(ofd, " </link>\n");
- } else {
- gbfprintf(ofd, " <url>%s%s</url>\n",
- urlbase ? urlbase : "", tmp_ent);
- write_optional_xml_entity(ofd, " ", "urlname",
- waypointp->url_link_text);
+ xfree(tmp_ent);
}
+ } else {
+ tmp_ent = xml_entitize(waypointp->url);
+ gbfprintf(ofd, " <url>%s%s</url>\n",
+ urlbase ? urlbase : "", tmp_ent);
+ write_optional_xml_entity(ofd, " ", "urlname",
+ waypointp->url_link_text);
xfree(tmp_ent);
}
}
const char *oname;
char *odesc;
fs_xml *fs_gpx;
+ garmin_fs_t *gmsd; /* gARmIN sPECIAL dATA */
/*
* Desparation time, try very hard to get a good shortname
gpx_write_common_acc(waypointp, " ");
fs_gpx = (fs_xml *)fs_chain_find( waypointp->fs, FS_GPX );
+ gmsd = GMSD_FIND(waypointp);
if ( fs_gpx ) {
- fprint_xml_chain( fs_gpx->tag, waypointp );
+ if (! gmsd) fprint_xml_chain( fs_gpx->tag, waypointp );
}
- if (gpx_wversion_num > 10) {
+ if (gmsd && (gpx_wversion_num > 10)) {
+ /* MapSource doesn't accepts extensions from 1.0 */
garmin_fs_xml_fprint(ofd, waypointp);
}
gbfprintf(ofd, "</wpt>\n");
/* These were accidentally removed from 1.1 */
if (gpx_wversion_num == 10) {
- if (waypointp->course >= 0) {
+ if WAYPT_HAS(waypointp, course) {
gbfprintf(ofd, " <course>%f</course>\n",
waypointp->course);
}
- if (waypointp->speed >= 0) {
+ if WAYPT_HAS(waypointp, speed) {
gbfprintf(ofd, " <speed>%f</speed>\n",
waypointp->speed);
}
#include "jeeps/gpsmath.h"
#include <ctype.h>
-static FILE *file_out;
+static gbfile *file_out;
static short_handle mkshort_handle;
static char *stylesheet = NULL;
static void
wr_init(const char *fname)
{
- file_out = xfopen(fname, "w", MYNAME);
+ file_out = gbfopen(fname, "w", MYNAME);
mkshort_handle = mkshort_new_handle();
}
static void
wr_deinit(void)
{
- fclose(file_out);
+ gbfclose(file_out);
mkshort_del_handle(&mkshort_handle);
}
strftime(tbuf, sizeof(tbuf), "%d-%b-%Y", localtime(&tm));
- fprintf(file_out, "\n<a name=\"%s\"><hr></a>\n", wpt->shortname);
- fprintf(file_out, "<table width=\"100%%\">\n");
- fprintf(file_out, "<tr><td><p class=\"gpsbabelwaypoint\">%s - ",(global_opts.synthesize_shortnames) ? mkshort_from_wpt(mkshort_handle, wpt) : wpt->shortname);
- cout = pretty_deg_format(wpt->latitude, wpt->longitude, degformat[2], 1);
- fprintf(file_out, "%s (%d%c %6.0f %7.0f)", cout, utmz, utmzc, utme, utmn);
+ gbfprintf(file_out, "\n<a name=\"%s\"><hr></a>\n", wpt->shortname);
+ gbfprintf(file_out, "<table width=\"100%%\">\n");
+ gbfprintf(file_out, "<tr><td><p class=\"gpsbabelwaypoint\">%s - ",(global_opts.synthesize_shortnames) ? mkshort_from_wpt(mkshort_handle, wpt) : wpt->shortname);
+ cout = pretty_deg_format(wpt->latitude, wpt->longitude, degformat[2], " ", 1);
+ gbfprintf(file_out, "%s (%d%c %6.0f %7.0f)", cout, utmz, utmzc, utme, utmn);
xfree (cout);
if (wpt->altitude != unknown_alt)
- fprintf (file_out, " alt:%d", (int) ( (altunits[0]=='f')?METERS_TO_FEET(wpt->altitude):wpt->altitude) );
- fprintf (file_out, "<br>\n");
+ gbfprintf (file_out, " alt:%d", (int) ( (altunits[0]=='f')?METERS_TO_FEET(wpt->altitude):wpt->altitude) );
+ gbfprintf (file_out, "<br>\n");
if (strcmp(wpt->description, wpt->shortname)) {
if (wpt->url) {
char *d = html_entitize(wpt->description);
- fprintf(file_out, "<a href=\"%s\">%s</a>", wpt->url, d);
+ gbfprintf(file_out, "<a href=\"%s\">%s</a>", wpt->url, d);
xfree(d);
}
else {
- fprintf(file_out, "%s", wpt->description);
+ gbfprintf(file_out, "%s", wpt->description);
}
if (wpt->gc_data.placer) {
- fprintf(file_out, " by %s", wpt->gc_data.placer);
+ gbfprintf(file_out, " by %s", wpt->gc_data.placer);
}
}
- fprintf(file_out, "</p></td>\n");
+ gbfprintf(file_out, "</p></td>\n");
- fprintf (file_out, "<td align=\"right\">");
+ gbfprintf (file_out, "<td align=\"right\">");
if (wpt->gc_data.terr) {
- fprintf (file_out, "<p class=\"gpsbabelcacheinfo\">%d%s / %d%s<br>\n",
+ gbfprintf (file_out, "<p class=\"gpsbabelcacheinfo\">%d%s / %d%s<br>\n",
(int)(wpt->gc_data.diff / 10), (wpt->gc_data.diff%10)?"½":"",
(int)(wpt->gc_data.terr / 10), (wpt->gc_data.terr%10)?"½":"" );
- fprintf(file_out, "%s / %s</p>",
+ gbfprintf(file_out, "%s / %s</p>",
gs_get_cachetype(wpt->gc_data.type),
gs_get_container(wpt->gc_data.container));
}
- fprintf(file_out, "</td></tr>\n");
+ gbfprintf(file_out, "</td></tr>\n");
- fprintf(file_out, "<tr><td colspan=\"2\">");
+ gbfprintf(file_out, "<tr><td colspan=\"2\">");
if (wpt->gc_data.desc_short.utfstring) {
char *tmpstr = strip_nastyhtml(wpt->gc_data.desc_short.utfstring);
- fprintf (file_out, "<p class=\"gpsbabeldescshort\">%s</p>\n", tmpstr );
+ gbfprintf (file_out, "<p class=\"gpsbabeldescshort\">%s</p>\n", tmpstr );
xfree( tmpstr );
}
if (wpt->gc_data.desc_long.utfstring) {
char *tmpstr = strip_nastyhtml(wpt->gc_data.desc_long.utfstring);
- fprintf (file_out, "<p class=\"gpsbabeldesclong\">%s</p>\n", tmpstr );
+ gbfprintf (file_out, "<p class=\"gpsbabeldesclong\">%s</p>\n", tmpstr );
xfree( tmpstr );
}
if (wpt->gc_data.hint) {
hint = rot13( wpt->gc_data.hint );
else
hint = xstrdup( wpt->gc_data.hint );
- fprintf (file_out, "<p class=\"gpsbabelhint\"><strong>Hint:</strong> %s</p>\n", hint);
+ gbfprintf (file_out, "<p class=\"gpsbabelhint\"><strong>Hint:</strong> %s</p>\n", hint);
xfree( hint );
}
else if (wpt->notes && (!wpt->description || strcmp(wpt->notes,wpt->description))) {
- fprintf (file_out, "<p class=\"gpsbabelnotes\">%s</p>\n", wpt->notes);
+ gbfprintf (file_out, "<p class=\"gpsbabelnotes\">%s</p>\n", wpt->notes);
}
fs_gpx = NULL;
while ( curlog ) {
time_t logtime = 0;
struct tm *logtm = NULL;
- fprintf( file_out, "<p class=\"gpsbabellog\">\n" );
+ gbfprintf( file_out, "<p class=\"gpsbabellog\">\n" );
logpart = xml_findfirst( curlog, "groundspeak:type" );
if ( logpart ) {
- fprintf( file_out, "<span class=\"gpsbabellogtype\">%s</span> by ", logpart->cdata );
+ gbfprintf( file_out, "<span class=\"gpsbabellogtype\">%s</span> by ", logpart->cdata );
}
logpart = xml_findfirst( curlog, "groundspeak:finder" );
if ( logpart ) {
char *f = html_entitize( logpart->cdata );
- fprintf( file_out, "<span class=\"gpsbabellogfinder\">%s</span> on ", f );
+ gbfprintf( file_out, "<span class=\"gpsbabellogfinder\">%s</span> on ", f );
xfree( f );
}
logtime = xml_parse_time( logpart->cdata, NULL);
logtm = localtime( &logtime );
if ( logtm ) {
- fprintf( file_out,
+ gbfprintf( file_out,
"<span class=\"gpsbabellogdate\">%04d-%02d-%02d</span><br>\n",
logtm->tm_year+1900,
logtm->tm_mon+1,
if ( coordstr ) {
lon = atof( coordstr );
}
- coordstr = pretty_deg_format(lat, lon, degformat[2], 1);
- fprintf( file_out,
+ coordstr = pretty_deg_format(lat, lon, degformat[2], " ", 1);
+ gbfprintf( file_out,
"<span class=\"gpsbabellogcoords\">%s</span><br>\n",
coordstr );
xfree(coordstr);
}
t = html_entitize( s );
- fprintf( file_out, "%s", t );
+ gbfprintf( file_out, "%s", t );
xfree( t );
xfree( s );
}
- fprintf( file_out, "</p>\n" );
+ gbfprintf( file_out, "</p>\n" );
curlog = xml_findnext( root, curlog, "groundspeak:log" );
}
}
- fprintf(file_out, "</td></tr></table>\n");
+ gbfprintf(file_out, "</td></tr></table>\n");
}
static void
char *sn = html_entitize(wpt->shortname);
char *d = html_entitize(wpt->description);
- fprintf(file_out, "<a href=\"#%s\">%s - %s</a><br>\n", sn, sn, d);
+ gbfprintf(file_out, "<a href=\"#%s\">%s - %s</a><br>\n", sn, sn, d);
xfree(sn);
xfree(d);
{
setshort_length(mkshort_handle, 6);
- fprintf(file_out, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\n");
- fprintf(file_out, "<html>\n");
- fprintf(file_out, "<head>\n");
- fprintf(file_out, " <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\">\n");
- fprintf(file_out, " <meta name=\"Generator\" content=\"GPSBabel %s\">\n", gpsbabel_version);
- fprintf(file_out, " <title>GPSBabel HTML Output</title>\n");
+ gbfprintf(file_out, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\n");
+ gbfprintf(file_out, "<html>\n");
+ gbfprintf(file_out, "<head>\n");
+ gbfprintf(file_out, " <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\">\n");
+ gbfprintf(file_out, " <meta name=\"Generator\" content=\"GPSBabel %s\">\n", gpsbabel_version);
+ gbfprintf(file_out, " <title>GPSBabel HTML Output</title>\n");
if (stylesheet)
- fprintf(file_out, " <link rel=\"stylesheet\" type=\"text/css\" href=\"%s\">\n", stylesheet);
+ gbfprintf(file_out, " <link rel=\"stylesheet\" type=\"text/css\" href=\"%s\">\n", stylesheet);
else {
- fprintf(file_out, " <style>\n");
- fprintf(file_out, " p.gpsbabelwaypoint { font-size: 120%%; font-weight: bold }\n");
- fprintf(file_out, " </style>\n");
+ gbfprintf(file_out, " <style>\n");
+ gbfprintf(file_out, " p.gpsbabelwaypoint { font-size: 120%%; font-weight: bold }\n");
+ gbfprintf(file_out, " </style>\n");
}
- fprintf(file_out, "</head>\n");
- fprintf(file_out, "<body>\n");
+ gbfprintf(file_out, "</head>\n");
+ gbfprintf(file_out, "<body>\n");
- fprintf(file_out, "<p class=\"index\">\n");
+ gbfprintf(file_out, "<p class=\"index\">\n");
waypt_disp_all(html_index);
- fprintf(file_out, "</p>\n");
+ gbfprintf(file_out, "</p>\n");
waypt_disp_all(html_disp);
- fprintf(file_out, "</body>");
- fprintf(file_out, "</html>");
+ gbfprintf(file_out, "</body>");
+ gbfprintf(file_out, "</html>");
}
{
size_t len;
char *c;
-
+retry:
*rec = c = gbfgetstr(file_in);
if (c == NULL) return rec_none;
len = strlen(c);
+
+ /* Trackwiev writes (bogus) blank links between each record */
+ if (len == 0) goto retry;
+
if (len < 3 || c[0] < 'A' || c[0] > 'Z') {
warning(MYNAME " bad input record: '%s'\n", c);
return rec_bad;
if (num_tps < 0) {
fatal(MYNAME ": Too few waypoints in task route\n");
}
+ else if (num_tps > 99) {
+ fatal(MYNAME ": Too much waypoints (more than 99) in task route.\n");
+ }
// Gather data to write to the task identification (first) record
rte_time = wpt->creation_time ? wpt->creation_time : current_time();
if (NULL == (tm = gmtime(&rte_time))) {
#define GPSBABEL_INIFILE "gpsbabel.ini"
+/* Remember the filename we used so we can include it in errors. */
+char *gbinipathname;
+
static char *
find_gpsbabel_inifile(const char *path) /* can be empty or NULL */
{
}
if (name != NULL) {
res = gbfopen(name, "r", "GPSBabel");
- xfree(name);
+ if (gbinipathname) {
+ xfree(gbinipathname);
+ }
+ gbinipathname = name;
}
return res;
}
cin = lrtrim(cin);
}
if ((*cin == '\0') || (cend == NULL))
- fatal("%s: invalid section header!\n", myname);
+ fatal("%s: invalid section header '%s' in '%s'.\n", myname, cin, gbinipathname);
sec = xcalloc(1, sizeof(*sec));
inifile_entry_t *entry;
if (sec == NULL)
- fatal("%s: missing section header!\n", myname);
+ fatal("%s: missing section header in '%s'.\n", myname,gbinipathname);
entry = xcalloc(1, sizeof(*entry));
ENQUEUE_TAIL(&sec->entries, &entry->Q);
}
xfree(inifile);
}
+ if (gbinipathname) {
+ xfree(gbinipathname);
+ gbinipathname = NULL;
+ }
}
int
"IFIELD GEOCACHE_HINT, \"\", \"%s\"\n"
"IFIELD GEOCACHE_LAST_FOUND, \"\", \"%d\"\n"
;
+static char tomtom_asc[] =
+"# gpsbabel XCSV style file\n"
+"#\n"
+"# Format: TomTom Navigator Places of Interest\n"
+"# Author: Olaf Klein\n"
+"# Date: 04/17/2007\n"
+"#\n"
+"DESCRIPTION TomTom POI file (.asc)\n"
+"EXTENSION asc\n"
+"DATATYPE WAYPOINT\n"
+"#\n"
+"# FILE LAYOUT DEFINITIIONS:\n"
+"#\n"
+"FIELD_DELIMITER COMMA\n"
+"RECORD_DELIMITER CRNEWLINE\n"
+"BADCHARS ,\"\n"
+"ENCODING MS-ANSI\n"
+"#\n"
+"PROLOGUE TomTom Navigator Places of Interest\n"
+"PROLOGUE GPSBabel-__VERSION__ ASCII Export\n"
+"PROLOGUE Points\n"
+"PROLOGUE Created at: __DATE_AND_TIME__\n"
+"# #\n"
+"# INDIVIDUAL DATA FIELDS, IN ORDER OF APPEARANCE:\n"
+"#\n"
+"IFIELD LON_DECIMAL, \"\", \"%.6f\"\n"
+"IFIELD LAT_DECIMAL, \"\", \"%.6f\"\n"
+"IFIELD SHORTNAME, \"\", \"\"%s\"\"\n"
+;
+static char tomtom_itn[] =
+"# gpsbabel XCSV style file\n"
+"#\n"
+"# Format: TomTom Navigator Itineraries (Routes)\n"
+"# Author: Olaf Klein\n"
+"# Date: 04/17/2007\n"
+"#\n"
+"DESCRIPTION TomTom Itineraries (.itn)\n"
+"EXTENSION itn\n"
+"DATATYPE ROUTE\n"
+"#\n"
+"# FILE LAYOUT DEFINITIIONS:\n"
+"#\n"
+"FIELD_DELIMITER PIPE\n"
+"RECORD_DELIMITER CRNEWLINE\n"
+"BADCHARS ,|\n"
+"ENCODING MS-ANSI\n"
+"#\n"
+"# INDIVIDUAL DATA FIELDS, IN ORDER OF APPEARANCE:\n"
+"#\n"
+"IFIELD LAT_10E5, \"\", \"%.f\"\n"
+"IFIELD LON_10E5, \"\", \"%.f\"\n"
+"IFIELD SHORTNAME, \"\", \"%s\"\n"
+"IFIELD CONSTANT, \"0\", \"%s\"\n"
+;
static char xmap2006[] =
"# gpsbabel XCSV style file\n"
"#\n"
"IFIELD IGNORE, \"\", \"%-.31s\"\n"
"IFIELD DESCRIPTION, \"\", \"%-.78s\"\n"
;
-style_vecs_t style_list[] = {{ "xmapwpt", xmapwpt } , { "xmap", xmap } , { "xmap2006", xmap2006 } , { "tabsep", tabsep } , { "sportsim", sportsim } , { "saplus", saplus } , { "s_and_t", s_and_t } , { "openoffice", openoffice } , { "nima", nima } , { "mxf", mxf } , { "mapconverter", mapconverter } , { "kwf2", kwf2 } , { "ktf2", ktf2 } , { "kompass_wp", kompass_wp } , { "kompass_tk", kompass_tk } , { "gpsman", gpsman } , { "gpsdrivetrack", gpsdrivetrack } , { "gpsdrive", gpsdrive } , { "geonet", geonet } , { "garmin_poi", garmin_poi } , { "garmin301", garmin301 } , { "fugawi", fugawi } , { "dna", dna } , { "custom", custom } , { "cup", cup } , { "csv", csv } , { "cambridge", cambridge } , { "arc", arc } , {0,0}};
-size_t nstyles = 28;
+style_vecs_t style_list[] = {{ "xmapwpt", xmapwpt } , { "xmap", xmap } , { "xmap2006", xmap2006 } , { "tomtom_itn", tomtom_itn } , { "tomtom_asc", tomtom_asc } , { "tabsep", tabsep } , { "sportsim", sportsim } , { "saplus", saplus } , { "s_and_t", s_and_t } , { "openoffice", openoffice } , { "nima", nima } , { "mxf", mxf } , { "mapconverter", mapconverter } , { "kwf2", kwf2 } , { "ktf2", ktf2 } , { "kompass_wp", kompass_wp } , { "kompass_tk", kompass_tk } , { "gpsman", gpsman } , { "gpsdrivetrack", gpsdrivetrack } , { "gpsdrive", gpsdrive } , { "geonet", geonet } , { "garmin_poi", garmin_poi } , { "garmin301", garmin301 } , { "fugawi", fugawi } , { "dna", dna } , { "custom", custom } , { "cup", cup } , { "csv", csv } , { "cambridge", cambridge } , { "arc", arc } , {0,0}};
+size_t nstyles = 30;
#else /* CSVFMTS_ENABLED */
style_vecs_t style_list[] = {{0,0}};
size_t nstyles = 0;
unsigned int no_latlon:1; /* True if no valid lat/lon found. */
int32 dspl; /* Display on map? */
int32 colour; /* Colour */
+ float distance; /* distance traveled in meters.*/
char trk_ident[256]; /* Track identifier */
}
GPS_OTrack, *GPS_PTrack;
} GPS_OWay, *GPS_PWay;
/*
- * Forerunner Lap data.
+ * Forerunner/Edge Lap data.
*/
-typedef struct GPS_SLap_Data {
+typedef struct GPS_SLap {
+ uint32 index; /* unique index in device or -1 */
time_t start_time;
uint32 total_time; /* Hundredths of a second */
float total_distance; /* In meters */
double end_lat;
double end_lon;
int16 calories;
- UC track_index;
-} GPS_OLap_Data, *GPS_PLap_Data;
+ uint32 track_index; /* ref to track or -1 */
+ float max_speed; /* In meters per second */
+ unsigned char avg_heart_rate; /* In beats-per-minute, 0 if invalid */
+ unsigned char max_heart_rate; /* In beats-per-minute, 0 if invalid */
+ unsigned char intensity; /* Same as D1001 */
+ unsigned char avg_cadence; /* In revolutions-per-minute, 0xFF if invalid */
+ unsigned char trigger_method;
+ /*Some D1015 unknown */
+ /* unsigned char unk1015_1;
+ int16 unk1015_2;
+ int16 unk1015_3;
+ */
+} GPS_OLap, *GPS_PLap;
typedef int (*pcb_fn) (int, struct GPS_SWay **);
static void GPS_D403_Send(UC *data, GPS_PWay way, int32 *len);
static void GPS_D450_Send(UC *data, GPS_PWay way, int32 *len);
-static int32 GPS_D500_Get(GPS_PAlmanac *alm, int32 entries, gpsdevh *fd);
-static int32 GPS_D501_Get(GPS_PAlmanac *alm, int32 entries, gpsdevh *fd);
-static int32 GPS_D550_Get(GPS_PAlmanac *alm, int32 entries, gpsdevh *fd);
-static int32 GPS_D551_Get(GPS_PAlmanac *alm, int32 entries, gpsdevh *fd);
static void GPS_D500_Send(UC *data, GPS_PAlmanac alm);
static void GPS_D501_Send(UC *data, GPS_PAlmanac alm);
static void GPS_D550_Send(UC *data, GPS_PAlmanac alm);
#endif
gps_pvt_transfer = -1;
gps_pvt_type = -1;
- gps_prx_waypt_transfer = -1;
- gps_prx_waypt_type = -1;
gps_trk_transfer = -1;
gps_trk_type = -1;
gps_trk_hdr_type = -1;
gps_rte_link_type = -1;
+ gps_prx_waypt_transfer = -1;
+ gps_prx_waypt_type = -1;
+ gps_almanac_transfer = -1;
+ gps_almanac_type = -1;
+ gps_lap_transfer = -1;
+ gps_lap_type = -1;
+
if(!GPS_Device_Wait(fd))
{
GPS_Warning("A001 protocol not supported");
gps_prx_waypt_type = -1;
gps_almanac_transfer = -1;
gps_almanac_type = -1;
+ gps_lap_transfer = -1;
+ gps_lap_type = -1;
entries = packet->n / 3;
p = packet->data;
case 600:
gps_date_time_transfer = pA600;
break;
+ case 650:
+ /* FlightBook Transfer Protocol */
+ break;
case 700:
gps_position_transfer = pA700;
break;
case 800:
gps_pvt_transfer = pA800;
break;
+ case 906:
+ gps_lap_transfer = pA906;
+ break;
case 1000:
gps_run_transfer = pA1000;
break;
+ case 1002:
+ gps_workout_transfer = pA1002;
+ break;
+ case 1004:
+ gps_user_profile_transfer = pA1004;
+ break;
+ case 1005:
+ gps_workout_limits_transfer = pA1005;
+ break;
+ case 1006:
+ gps_course_transfer = pA1006;
+ break;
+ case 1009:
+ gps_course_limits_transfer = pA1009;
+ break;
}
break;
continue;
}
-
else if(lasta<500)
{
- if(data<=110 && data>=100)
- {
- gps_prx_waypt_type = data;
- continue;
- }
- if(data<153 && data>=150)
- {
- gps_prx_waypt_type = data;
- continue;
- }
- if(data<156 && data>=154)
- {
- gps_prx_waypt_type = data;
- continue;
- }
- if(data<451)
- {
- if(data==400)
+ if((data<=110 && data>=100) ||
+ (data<153 && data>=150) ||
+ (data<156 && data>=154)) {
+ gps_prx_waypt_type = data;
+ }
+ else if(data==400)
gps_prx_waypt_type = pD400;
else if(data==403)
gps_prx_waypt_type = pD403;
GPS_Protocol_Error(tag,data);
continue;
}
- }
else if(lasta<600)
{
continue;
}
- else if(lasta<700)
+ else if(lasta<650)
{
if (data == 600) {
gps_date_time_type = pD600;
}
continue;
}
+
+ else if(lasta<651)
+ {
+ /* FlightBook Transfer Protocol, not handled */
+ continue;
+ }
+
else if(lasta<800)
{
if(data!=700)
gps_position_type = pD700;
continue;
}
+
else if(lasta<900)
{
if (data == 800)
*/
continue;
}
+
else if (lasta < 1000)
{
if (data == 906)
gps_lap_type = pD906;
+ else if (data == 1001)
+ gps_lap_type = pD1001;
+ else if (data == 1011)
+ gps_lap_type = pD1011;
+ else if (data == 1015)
+ gps_lap_type = pD1015;
+ continue;
+ }
+
+ else if (lasta < 1002)
+ {
+ if (data == 1000)
+ gps_run_type = pD1000;
+ else if (data == 1009)
+ gps_run_type = pD1009;
+ else if (data == 1010)
+ gps_run_type = pD1010;
+ continue;
+ }
+
+ else if (lasta < 1003)
+ {
+ if (data == 1002)
+ gps_workout_type = pD1002;
+ else if (data == 1008)
+ gps_workout_type = pD1008;
+ continue;
+ }
+
+ else if (lasta < 1004)
+ {
+ if (data == 1003)
+ gps_workout_occurrence_type = pD1003;
+ continue;
+ }
+
+ else if (lasta < 1005)
+ {
+ if (data == 1004)
+ gps_user_profile_type = pD1004;
+ continue;
+ }
+
+ else if (lasta < 1006)
+ {
+ if (data == 1005)
+ gps_workout_limits_type = pD1005;
+ continue;
+ }
+
+ else if (lasta < 1007)
+ {
+ if (data == 1006)
+ gps_course_type = pD1006;
+ continue;
+ }
+
+ else if (lasta < 1008)
+ {
+ if (data == 1007)
+ gps_course_lap_type = pD1007;
+ continue;
+ }
+
+ else if (lasta < 1009)
+ {
+ if (data == 1012)
+ gps_course_point_type = pD1012;
+ continue;
+ }
+
+ else if (lasta < 1010)
+ {
+ if (data == 1013)
+ gps_course_limits_type = pD1013;
+ continue;
}
}
}
/* @func GPS_D303b_Get ******************************************************
**
-** Get track data (A302 protocol) -- XXX used in Forerunner 301
+** Get track data (A302 protocol) -- used in Forerunner 301
**
** @param [w] trk [GPS_PTrack *] track
** @param [r] data [UC *] packet data
*/
switch (gps_trk_type) {
case pD304:
- p+=4; /* A float indicating number of meters travelled. */
+ (*trk)->distance = GPS_Util_Get_Float(p);
+ p+=sizeof(float); /* A float indicating number of meters travelled. */
(*trk)->heartrate = (*p++);
/* crank cadence, RPM, 0xff if invalid. */
{
static UC data[2];
gpsdevh *fd;
- GPS_PPacket tra;
- GPS_PPacket rec;
- int32 n;
- int32 i;
- int32 ret;
+ GPS_PPacket trapkt;
+ GPS_PPacket recpkt;
+ int32 i, n;
+
+ if (gps_almanac_transfer == -1)
+ return GPS_UNSUPPORTED;
if(!GPS_Device_On(port, &fd))
return gps_errno;
- if(!(tra = GPS_Packet_New()) || !(rec = GPS_Packet_New()))
+ if (!(trapkt = GPS_Packet_New() ) || !(recpkt = GPS_Packet_New()))
return MEMORY_ERROR;
-
GPS_Util_Put_Short(data,
COMMAND_ID[gps_device_command].Cmnd_Transfer_Alm);
- GPS_Make_Packet(&tra, LINK_ID[gps_link_type].Pid_Command_Data,
+ GPS_Make_Packet(&trapkt, LINK_ID[gps_link_type].Pid_Command_Data,
data,2);
- if(!GPS_Write_Packet(fd,tra))
+ if(!GPS_Write_Packet(fd,trapkt))
return gps_errno;
- if(!GPS_Get_Ack(fd, &tra, &rec))
+ if(!GPS_Get_Ack(fd, &trapkt, &recpkt))
return gps_errno;
-
- if(!GPS_Packet_Read(fd, &rec))
+ if(!GPS_Packet_Read(fd, &recpkt))
return gps_errno;
- if(!GPS_Send_Ack(fd, &tra, &rec))
+ if(!GPS_Send_Ack(fd, &trapkt, &recpkt))
return gps_errno;
- n = GPS_Util_Get_Short(rec->data);
+ n = GPS_Util_Get_Short(recpkt->data);
if(n)
if(!((*alm)=(GPS_PAlmanac *)malloc(n*sizeof(GPS_PAlmanac))))
GPS_Error("A500_Get: Insufficient memory");
return MEMORY_ERROR;
}
- for(i=0;i<n;++i)
+
+ for(i=0;i<n;++i) {
if(!((*alm)[i]=GPS_Almanac_New()))
return MEMORY_ERROR;
+ if(!GPS_Packet_Read(fd, &recpkt)) {
+ return gps_errno;
+ }
+ if(!GPS_Send_Ack(fd, &trapkt, &recpkt)) {
+ return gps_errno;
+ }
- switch(gps_almanac_type)
- {
+ switch(gps_almanac_type) {
case pD500:
- ret = GPS_D500_Get(*alm,n,fd);
+ GPS_A500_Translate(recpkt->data, &((*alm)[i]));
break;
case pD501:
- ret = GPS_D501_Get(*alm,n,fd);
+ GPS_A500_Translate(recpkt->data, &((*alm)[i]));
+ (*alm)[i]->hlth=recpkt->data[42];
break;
case pD550:
- ret = GPS_D550_Get(*alm,n,fd);
+ (*alm)[i]->svid = recpkt->data[0];
+ GPS_A500_Translate(recpkt->data+1, &((*alm)[i]));
break;
case pD551:
- ret = GPS_D551_Get(*alm,n,fd);
+ (*alm)[i]->svid = recpkt->data[0];
+ GPS_A500_Translate(recpkt->data+1, &((*alm)[i]));
+ (*alm)[i]->hlth = recpkt->data[43];
break;
default:
GPS_Error("A500_GET: Unknown almanac protocol");
return PROTOCOL_ERROR;
}
+ /* Cheat and don't _really_ pass the trkpt back */
+/* cb(n, NULL);*/
+ }
- if(ret < 0) return ret;
- if(ret != n)
- {
- GPS_Error("A500_GET: Almanac entry number mismatch");
+ if(!GPS_Packet_Read(fd, &recpkt))
+ return gps_errno;
+ if(!GPS_Send_Ack(fd, &trapkt, &recpkt))
+ return gps_errno;
+ if(recpkt->type != LINK_ID[gps_link_type].Pid_Xfer_Cmplt) {
+ GPS_Error("A500_Get: Error transferring almanac");
return FRAMING_ERROR;
}
+ if(i != n) {
+ GPS_Error("A500_GET: Almanac entry number mismatch");
+ return FRAMING_ERROR;
+ }
- GPS_Packet_Del(&tra);
- GPS_Packet_Del(&rec);
+ GPS_Packet_Del(&trapkt);
+ GPS_Packet_Del(&recpkt);
if(!GPS_Device_Off(fd))
return gps_errno;
- return ret;
+ return n;
}
-
-
-
/* @func GPS_A500_Send **************************************************
**
** Send almanac to GPS
return 1;
}
-
-
-/* @funcstatic GPS_D500_Get ********************************************
-**
-** Get almanac data
-**
-** @param [w] alm [GPS_PAlmanac *] almanac array
-** @param [r] entries [int32] number of packets to receive
-** @param [r] fd [int32] file descriptor
-**
-** @return [int32] number of entries read
-************************************************************************/
-static int32 GPS_D500_Get(GPS_PAlmanac *alm, int32 entries, gpsdevh *fd)
-{
- GPS_PPacket tra;
- GPS_PPacket rec;
- int32 i;
-
- if(!(tra = GPS_Packet_New()) || !(rec = GPS_Packet_New()))
- return MEMORY_ERROR;
-
-
- for(i=0;i<entries;++i)
- {
- if(!GPS_Packet_Read(fd, &rec))
- return gps_errno;
-
- if(!GPS_Send_Ack(fd, &tra, &rec))
- return gps_errno;
-
- GPS_A500_Translate(rec->data, &alm[i]);
- }
-
-
- if(!GPS_Packet_Read(fd, &rec))
- return gps_errno;
-
- if(!GPS_Send_Ack(fd, &tra, &rec))
- return gps_errno;
-
-
- if(rec->type != LINK_ID[gps_link_type].Pid_Xfer_Cmplt)
- {
- GPS_Error("D500_GET: Error transferring almanac");
- return FRAMING_ERROR;
- }
-
- GPS_Packet_Del(&tra);
- GPS_Packet_Del(&rec);
-
- return i;
-}
-
-
-/* @funcstatic GPS_D501_Get ********************************************
-**
-** Get almanac data
-**
-** @param [w] alm [GPS_PAlmanac *] almanac array
-** @param [r] entries [int32] number of packets to receive
-** @param [r] fd [int32] file descriptor
-**
-** @return [int32] number of entries read
-************************************************************************/
-static int32 GPS_D501_Get(GPS_PAlmanac *alm, int32 entries, gpsdevh *fd)
-{
- GPS_PPacket tra;
- GPS_PPacket rec;
- int32 i;
-
- if(!(tra = GPS_Packet_New()) || !(rec = GPS_Packet_New()))
- return MEMORY_ERROR;
-
-
- for(i=0;i<entries;++i)
- {
- if(!GPS_Packet_Read(fd, &rec))
- return gps_errno;
- if(!GPS_Send_Ack(fd, &tra, &rec))
- return gps_errno;
-
- GPS_A500_Translate(rec->data, &alm[i]);
- alm[i]->hlth=rec->data[42];
- }
-
-
- if(!GPS_Packet_Read(fd, &rec))
- return gps_errno;
- if(!GPS_Send_Ack(fd, &tra, &rec))
- return gps_errno;
-
-
- if(rec->type != LINK_ID[gps_link_type].Pid_Xfer_Cmplt)
- {
- GPS_Error("D501_GET: Error transferring almanac");
- return FRAMING_ERROR;
- }
-
- GPS_Packet_Del(&tra);
- GPS_Packet_Del(&rec);
-
- return i;
-}
-
-
-
-/* @funcstatic GPS_D550_Get *********************************************
-**
-** Get almanac data
-**
-** @param [w] alm [GPS_PAlmanac *] almanac array
-** @param [r] entries [int32] number of packets to receive
-** @param [r] fd [int32] file descriptor
-**
-** @return [int32] number of entries read
-************************************************************************/
-static int32 GPS_D550_Get(GPS_PAlmanac *alm, int32 entries, gpsdevh *fd)
-{
- GPS_PPacket tra;
- GPS_PPacket rec;
- int32 i;
-
- if(!(tra = GPS_Packet_New()) || !(rec = GPS_Packet_New()))
- return MEMORY_ERROR;
-
-
- for(i=0;i<entries;++i)
- {
- if(!GPS_Packet_Read(fd, &rec))
- return gps_errno;
- if(!GPS_Send_Ack(fd, &tra, &rec))
- return gps_errno;
-
- alm[i]->svid = rec->data[0];
- GPS_A500_Translate(rec->data+1, &alm[i]);
- }
-
-
- if(!GPS_Packet_Read(fd, &rec))
- return gps_errno;
- if(!GPS_Send_Ack(fd, &tra, &rec))
- return gps_errno;
-
- if(rec->type != LINK_ID[gps_link_type].Pid_Xfer_Cmplt)
- {
- GPS_Error("D550_GET: Error transferring almanac");
- return FRAMING_ERROR;
- }
-
- GPS_Packet_Del(&tra);
- GPS_Packet_Del(&rec);
-
- return i;
-}
-
-
-
-/* @funcstatic GPS_D551_Get *********************************************
-**
-** Get almanac data
-**
-** @param [w] alm [GPS_PAlmanac *] almanac array
-** @param [r] entries [int32] number of packets to receive
-** @param [r] fd [int32] file descriptor
-**
-** @return [int32] number of entries read
-************************************************************************/
-static int32 GPS_D551_Get(GPS_PAlmanac *alm, int32 entries, gpsdevh *fd)
-{
- GPS_PPacket tra;
- GPS_PPacket rec;
- int32 i;
-
- if(!(tra = GPS_Packet_New()) || !(rec = GPS_Packet_New()))
- return MEMORY_ERROR;
-
-
- for(i=0;i<entries;++i)
- {
- if(!GPS_Packet_Read(fd, &rec))
- return gps_errno;
- if(!GPS_Send_Ack(fd, &tra, &rec))
- return gps_errno;
-
- alm[i]->svid = rec->data[0];
- GPS_A500_Translate(rec->data+1, &alm[i]);
- alm[i]->hlth = rec->data[43];
- }
-
-
- if(!GPS_Packet_Read(fd, &rec))
- return gps_errno;
- if(!GPS_Send_Ack(fd, &tra, &rec))
- return gps_errno;
-
-
- if(rec->type != LINK_ID[gps_link_type].Pid_Xfer_Cmplt)
- {
- GPS_Error("D551_GET: Error transferring almanac\n");
- return FRAMING_ERROR;
- }
-
- GPS_Packet_Del(&tra);
- GPS_Packet_Del(&rec);
-
- return i;
-}
-
-
-
/* @funcstatic GPS_A500_Translate ***************************************
**
** Translate almanac packet to almanac structure
return;
}
-#if XXX /* FIXME/PLACEHOLDER */
/* @func GPS_A906_Get ******************************************************
**
** Get lap data from GPS
**
** @param [r] port [const char *] serial port
-** @param [w] trk [GPS_PLap_Data **] lap array
+** @param [w] trk [GPS_PLap **] lap array
**
** @return [int32] number of lap entries
************************************************************************/
-int32 GPS_A906_Get(const char *port, GPS_OLap_Data **lap)
+int32 GPS_A906_Get(const char *port, GPS_PLap **lap, pcb_fn cb)
{
static UC data[2];
gpsdevh *fd;
- GPS_PPacket lappkt;
+ GPS_PPacket trapkt;
GPS_PPacket recpkt;
int32 i, n;
if (!GPS_Device_On(port, &fd))
return gps_errno;
- if (!(lappkt = GPS_Packet_New() ) || !(recpkt = GPS_Packet_New()))
+ if (!(trapkt = GPS_Packet_New() ) || !(recpkt = GPS_Packet_New()))
return MEMORY_ERROR;
GPS_Util_Put_Short(data,
COMMAND_ID[gps_device_command].Cmnd_Transfer_Lap);
- GPS_Make_Packet(&lappkt, LINK_ID[gps_link_type].Pid_Command_Data,
+ GPS_Make_Packet(&trapkt, LINK_ID[gps_link_type].Pid_Command_Data,
data,2);
- if(!GPS_Write_Packet(fd,lappkt))
+ if(!GPS_Write_Packet(fd,trapkt))
return gps_errno;
- if(!GPS_Get_Ack(fd, &lappkt, &recpkt))
+ if(!GPS_Get_Ack(fd, &trapkt, &recpkt))
return gps_errno;
if(!GPS_Packet_Read(fd, &recpkt))
return gps_errno;
- if(!GPS_Send_Ack(fd, &lappkt, &recpkt))
+ if(!GPS_Send_Ack(fd, &trapkt, &recpkt))
return gps_errno;
n = GPS_Util_Get_Short(recpkt->data);
return MEMORY_ERROR;
}
- for(i=0;i<n;++i)
- if(!((*trk)[i]=GPS_Track_New()))
+ for(i=0;i<n;++i) {
+ if(!((*lap)[i]=GPS_Lap_New()))
return MEMORY_ERROR;
+ if(!GPS_Packet_Read(fd, &recpkt)) {
+ return gps_errno;
+ }
- switch(gps_lap_type) {
- case pD906:
- ret = GPS_D906_Get(*lap, n, fd);
- if (ret < 0) return ret;
- break;
- default:
- GPS_Error("A906_Get: Unknown Lap protocol %d\n", gps_lap_type);
- return PROTOCOL_ERROR;
+ if(!GPS_Send_Ack(fd, &trapkt, &recpkt)) {
+ return gps_errno;
+ }
+
+ switch(gps_lap_type) {
+ case pD906:
+ case pD1001:
+ case pD1011:
+ case pD1015:
+ GPS_D1011b_Get(&((*lap)[i]),recpkt->data);
+ break;
+ default:
+ GPS_Error("A906_Get: Unknown Lap protocol %d\n", gps_lap_type);
+ return PROTOCOL_ERROR;
+ }
+
+ /* Cheat and don't _really_ pass the trkpt back */
+ cb(n, NULL);
}
- if (ret != n) {
- GPS_Error("A906_Get: got %d lap entries. Expected %d\n", ret, n);
+
+ if(!GPS_Packet_Read(fd, &recpkt))
+ return gps_errno;
+ if(!GPS_Send_Ack(fd, &trapkt, &recpkt))
+ return gps_errno;
+ if(recpkt->type != LINK_ID[gps_link_type].Pid_Xfer_Cmplt) {
+ GPS_Error("A906_Get: Error transferring laps");
return FRAMING_ERROR;
}
- GPS_Packet_Del(&lap);
- GPS_Packet_Del(&rec);
+
+ if(i != n) {
+ GPS_Error("A906_GET: Lap entry number mismatch");
+ return FRAMING_ERROR;
+ }
+
+ GPS_Packet_Del(&trapkt);
+ GPS_Packet_Del(&recpkt);
if (!GPS_Device_Off(fd))
return gps_errno;
-
- return ret;
+ return n;
}
-#endif /* FIXME */
-/* @func GPS_D906_Get ******************************************************
+/* @func GPS_D1011b_Get ******************************************************
**
-** Convert packet to lap structure
+** Convert packet D906, D1001, D1011, D1015 to lap structure
**
** @param [r] packet [GPS_PPacket] packet
-** @param [w] pvt [GPS_PLap_Data *] lap structure
+** @param [w] pvt [GPS_PLap *] lap structure
**
** @return [void]
************************************************************************/
-void GPS_D906_Get(GPS_PPacket packet, GPS_PLap_Data *Lap)
+void GPS_D1011b_Get(GPS_PLap *Lap, UC *p)
{
- UC *p;
uint32 t;
- p = packet->data;
+ /* Lap index (not in D906) */
+ switch(gps_lap_type) {
+ case pD906:
+ (*Lap)->index = -1;
+ break;
+ case pD1001:
+ (*Lap)->index = GPS_Util_Get_Uint(p);
+ p+=sizeof(uint32);
+ break;
+ case pD1011:
+ case pD1015:
+ (*Lap)->index = GPS_Util_Get_Short(p);
+ p+=sizeof(uint16);
+ p+=sizeof(uint16); /*unused*/
+ break;
+ default:
+ break;
+ }
t = GPS_Util_Get_Uint(p);
(*Lap)->start_time = GPS_Math_Gtime_To_Utime((time_t)t);
(*Lap)->total_distance = GPS_Util_Get_Float(p);
p+=sizeof(float);
-
+ if(gps_lap_type != pD906){
+ (*Lap)->max_speed = GPS_Util_Get_Float(p);
+ p+=sizeof(float);
+ }
(*Lap)->begin_lat = GPS_Math_Semi_To_Deg(GPS_Util_Get_Int(p));
p+=sizeof(int32);
(*Lap)->calories = GPS_Util_Get_Short(p);
p+=sizeof(int16);
- (*Lap)->track_index = *p++;
+ /* Track index, only in D906*/
+ if(gps_lap_type == pD906){
+ (*Lap)->track_index = *p++;
+ p++; /*Unused*/
+
+ /*Last field, no more to do */
+ return;
+ } else {
+ (*Lap)->track_index = -1;
+ }
+
+ (*Lap)->avg_heart_rate = *p++;
+ (*Lap)->max_heart_rate = *p++;
+ (*Lap)->intensity = *p++;
+
+ switch(gps_lap_type) {
+ case pD1001:
+ /*No more fields */
+ return;
+ case pD1011:
+ case pD1015:
+ (*Lap)->avg_cadence = *p++;
+ (*Lap)->trigger_method = *p++;
+ break;
+ default:
+ /*pD906 already returned*/
+ break;
+ }
+
+ if (gps_lap_type==pD1015) {
+ /*some unknown fields like 04 dc 44 ff ff */
+ /* (*Lap)->unk1015_1 = *p++; normally 4?
+ (*Lap)->unk1015_2 = GPS_Util_Get_Short(p);wkt related , ffff otherwise
+ p+=sizeof(int16);
+ (*Lap)->unk1015_3 = GPS_Util_Get_Short(p);ffff ?
+ p+=sizeof(int16);
+ */
+ }
return;
}
+
/*
* It's unfortunate that these aren't constant and therefore switchable,
* but they really are runtime variable. Sigh.
*/
-
const char *
Get_Pkt_Type(unsigned char p, unsigned short d0, const char **xinfo)
{
case 452: *xinfo = "Xfer Wkt Occurrences"; break;
case 453: *xinfo = "Xfer User Profile "; break;
case 454: *xinfo = "Xfer Wkt Limits"; break;
+ case 561: *xinfo = "Xfer Courses"; break;
+ case 562: *xinfo = "Xfer Course Laps"; break;
+ case 563: *xinfo = "Xfer Course Point"; break;
+ case 564: *xinfo = "Xfer Course Tracks"; break;
+ case 565: *xinfo = "Xfer Course Limits"; break;
+
default: *xinfo = "Unknown";
}
return "CMDDAT";
}
+ if (p == LT.Pid_Protocol_Array)
+ return "PRTARR";
+ if (p == LT.Pid_Product_Rqst)
+ return "PRDREQ";
+ if (p == LT.Pid_Product_Data)
+ return "PRDDAT";
+ if (p == LT.Pid_Ext_Product_Data)
+ return "PRDEDA";
+
if (p == LT.Pid_Xfer_Cmplt)
return "XFRCMP";
if (p == LT.Pid_Date_Time_Data)
return "LNKDAT";
if (p == LT.Pid_Trk_Hdr)
return "TRKHDR";
- if (p == LT.Pid_Protocol_Array)
- return "PRTARR";
- if (p == LT.Pid_Product_Rqst)
- return "PRDREQ";
- if (p == LT.Pid_Product_Data)
- return "PRDDAT";
+
+ if (p == LT.Pid_FlightBook_Record)
+ return "FLIBOO";
+ if (p == LT.Pid_Lap)
+ return "LAPDAT";
+ if (p == LT.Pid_Wpt_Cat_Data)
+ return "WPTCAT";
+ if (p == LT.Pid_Run)
+ return "RUNDAT";
+ if (p == LT.Pid_Workout)
+ return "WKTDAT";
+ if (p == LT.Pid_Workout_Occurrence)
+ return "WKTOCC";
+ if (p == LT.Pid_Fitness_User_Profile)
+ return "UPROFI";
+ if (p == LT.Pid_Workout_Limits)
+ return "WKTLIM";
+ if (p == LT.Pid_Course)
+ return "CRSDAT";
+ if (p == LT.Pid_Course_Lap)
+ return "CRSLAP";
+ if (p == LT.Pid_Course_Point)
+ return "CRSPOI";
+ if (p == LT.Pid_Course_Trk_Hdr)
+ return "CRSTHD";
+ if (p == LT.Pid_Course_Trk_Data)
+ return "CRSTDA";
+ if (p == LT.Pid_Course_Limits)
+ return "CRSLIM";
+ if (p == LT.Pid_Trk2_Hdr)
+ return "TRKHD2";
+
if (p == GUSB_REQUEST_BULK)
return "REQBLK";
if (p == GUSB_SESSION_START)
return "SESREQ";
if (p == GUSB_SESSION_ACK)
return "SESACK";
- if (p == 152)
- return "WPTCAT";
+
return "UNKNOWN";
}
int32 GPS_A300_Get(const char *port, GPS_PTrack **trk, pcb_fn cb);
int32 GPS_A301_Get(const char *port, GPS_PTrack **trk, pcb_fn cb);
int32 GPS_A300_Send(const char *port, GPS_PTrack *trk, int32 n);
-int32 GPS_A301_Send(const char *port, GPS_PTrack *trk, int32 n);
+int32 GPS_A301_Send(const char *port, GPS_PTrack *trk, int32 n); /*A302*/
int32 GPS_D300_Get(GPS_PTrack *trk, int32 entries, gpsdevh *h);
void GPS_D300b_Get(GPS_PTrack *trk, UC *data);
void GPS_D301b_Get(GPS_PTrack *trk, UC *data);
void GPS_D302b_Get(GPS_PTrack *trk, UC *data);
-void GPS_D303b_Get(GPS_PTrack *trk, UC *data);
+void GPS_D303b_Get(GPS_PTrack *trk, UC *data); /*D304*/
void GPS_D310_Get(GPS_PTrack *trk, UC *s);
void GPS_D311_Get(GPS_PTrack *trk, UC *s);
void GPS_D300_Send(UC *data, GPS_PTrack trk);
int32 GPS_A800_Get(gpsdevh **fd, GPS_PPvt_Data *packet);
void GPS_D800_Get(GPS_PPacket packet, GPS_PPvt_Data *pvt);
+int32 GPS_A906_Get(const char *port, GPS_PLap **lap, pcb_fn cb);
+void GPS_D1011b_Get(GPS_PLap *Lap,UC *data); /*D906 D1001 D1015*/
+
+/* Unhandled documented protocols, as of:
+ Garmin Device Interface Specification, May 19, 2006, Drawing Number: 001-00063-00 Rev. C
+A650 \96 FlightBook Transfer Protocol
+A1000 \96 Run Transfer Protocol
+ Capability A1000: D1009
+ D1000 D1010
+A1002 \96 Workout Transfer Protocol
+ Capability A1002: D1008
+ D1002
+ Capability A1003: D1003
+A1004 \96 Fitness User Profile Transfer Protocol
+ Capability A1004: D1004
+A1005 \96 Workout Limits Transfer Protocol
+ Capability A1005: D1005
+A1006 \96 Course Transfer Protocol
+ Capability A1006: D1006
+ Capability A1007: D1007
+ Capability A1008: D1012
+A1009 \96 Course Limits Transfer Protocol
+ Capability A1009: D1013
+*/
+/* Unimplemted and Undocumented, as listed from the following device/sw:
+ GF305 3.70
+
+Capability A601: D601
+Capability A801: D801
+
+Capability A902:
+Capability A903:
+Capability A907: D907 D908 D909 D910
+Capability A918: D918
+Capability A1013: D1014
+*/
+
const char * Get_Pkt_Type(unsigned char p, unsigned short d0, const char **xinfo);
{
int32 ret=0;
+ if(gps_almanac_transfer == -1)
+ return GPS_UNSUPPORTED;
+
switch(gps_almanac_transfer)
{
case pA500:
{
int32 ret=0;
+ if(gps_almanac_transfer == -1)
+ return GPS_UNSUPPORTED;
+
switch(gps_almanac_transfer)
{
case pA500:
return ret;
}
+
+/* @func GPS_Command_Get_Lap ***************************************
+**
+** Get lap from GPS
+**
+** @param [r] port [const char *] serial port
+** @param [w] way [GPS_PLap **] pointer to lap array
+**
+** @return [int32] number of lap entries
+************************************************************************/
+
+int32 GPS_Command_Get_Lap(const char *port, GPS_PLap **lap, pcb_fn cb)
+{
+ int32 ret=0;
+
+ if(gps_lap_transfer == -1)
+ return GPS_UNSUPPORTED;
+
+ switch(gps_lap_transfer)
+ {
+ case pA906:
+ ret = GPS_A906_Get(port,lap, cb);
+ break;
+ default:
+ GPS_Error("Get_Lap: Unknown lap protocol");
+ return PROTOCOL_ERROR;
+ }
+
+ return ret;
+}
+ /*Stubs for unimplemented stuff*/
+int32 GPS_Command_Get_Workout(const char *port, void **lap, int (*cb)(int, struct GPS_SWay **)){
+ return 0;
+}
+int32 GPS_Command_Get_Fitness_User_Profile(const char *port, void **lap, int (*cb)(int, struct GPS_SWay **)){
+ return 0;
+}
+int32 GPS_Command_Get_Workout_Limits(const char *port, void **lap, int (*cb)(int, struct GPS_SWay **)){
+ return 0;
+}
+int32 GPS_Command_Get_Course(const char *port, void **lap, int (*cb)(int, struct GPS_SWay **)){
+ return 0;
+}
+int32 GPS_Command_Get_Course_Limits(const char *port, void **lap, int (*cb)(int, struct GPS_SWay **)){
+ return 0;
+}
+
int32 GPS_Command_Get_Route(const char *port, GPS_PWay **way);
int32 GPS_Command_Send_Route(const char *port, GPS_PWay *way, int32 n);
+int32 GPS_Command_Get_Lap(const char *port, GPS_PLap **lap, int (*cb)(int, struct GPS_SWay **));
+int32 GPS_Command_Get_Workout(const char *port, void **lap, int (*cb)(int, struct GPS_SWay **));
+int32 GPS_Command_Get_Fitness_User_Profile(const char *port, void **lap, int (*cb)(int, struct GPS_SWay **));
+int32 GPS_Command_Get_Workout_Limits(const char *port, void **lap, int (*cb)(int, struct GPS_SWay **));
+int32 GPS_Command_Get_Course(const char *port, void **lap, int (*cb)(int, struct GPS_SWay **));
+int32 GPS_Command_Get_Course_Limits(const char *port, void **lap, int (*cb)(int, struct GPS_SWay **));
#endif
#ifdef __cplusplus
if (udev) {
usb_release_interface(udev, 0);
usb_close(udev);
- xfree(dh);
+ /* In the worst case, we leak a little bit of memory
+ * when called via the atexit handler. That's not too
+ * terrible.
+ */
+ if (NULL != dh) {
+ xfree(dh);
+ }
udev = NULL;
}
return 0;
}
+static void
+gusb_atexit_teardown(void)
+{
+ gusb_teardown(NULL);
+}
+
+
/*
* This is a function of great joy to discover.
*
gusb_cmd_get(&iresp, sizeof(iresp));
- if ((le_read16(iresp.gusb_pkt.pkt_id) == GUSB_SESSION_ACK) &&
- (le_read32(iresp.gusb_pkt.datasz) == 4)) {
- }
if (le_read16(iresp.gusb_pkt.pkt_id) == 0xfd) return;
if (t-- <= 0) {
fatal("Could not start session in a reasonable number of tries.\n");
if (udev) return;
udev = usb_open(dev);
- atexit((void(*)())gusb_teardown);
+ atexit(gusb_atexit_teardown);
if (!udev) { fatal("usb_open failed: %s\n", usb_strerror()); }
/*
GPS_Math_NGENToAiry1830LatLon(E,N,&alat,&alon);
- GPS_Math_Known_Datum_To_WGS84_M(alat,alon,0,lat,lon,&ht,78);
+ GPS_Math_Known_Datum_To_WGS84_M(alat,alon,0,lat,lon,&ht,86);
return 1;
}
GPS_Math_NGENToAiry1830LatLon(E,N,&alat,&alon);
- GPS_Math_Known_Datum_To_WGS84_C(alat,alon,0,lat,lon,&ht,78);
+ GPS_Math_Known_Datum_To_WGS84_C(alat,alon,0,lat,lon,&ht,86);
return 1;
}
************************************************************************/
int32 GPS_Math_UTM_EN_To_NAD83(double *lat, double *lon, double E,
double N, int32 zone, char zc)
+{
+ return GPS_Math_UTM_EN_To_Known_Datum(lat, lon, E, N, zone, zc, 77);
+}
+
+
+
+/* @func GPS_Math_UTM_EN_To_WGS84 **************************************
+**
+** Transform UTM zone, easting and northing to WGS84 lat/lon
+**
+** @param [w] lat [double *] WGS84 latitude (deg)
+** @param [r] lon [double *] WGS84 longitude (deg)
+** @param [w] E [double] easting (metres)
+** @param [w] N [double] northing (metres)
+** @param [w] zone [int32] zone number
+** @param [w] zc [char] zone character
+**
+** @return [int32] success
+************************************************************************/
+int32 GPS_Math_UTM_EN_To_WGS84(double *lat, double *lon, double E,
+ double N, int32 zone, char zc)
+{
+ return GPS_Math_UTM_EN_To_Known_Datum(lat, lon, E, N, zone, zc, 118);
+}
+
+
+/* @func GPS_Math_Known_Datum_To_UTM_EN *********************************
+**
+** Transform known datum lat/lon to UTM zone, easting and northing
+**
+** @param [r] lat [double] WGS84 latitude (deg)
+** @param [r] lon [double] WGS84 longitude (deg)
+** @param [w] E [double *] easting (metres)
+** @param [w] N [double *] northing (metres)
+** @param [w] zone [int32 *] zone number
+** @param [w] zc [char *] zone character
+** @param [r] n [int32] datum number from GPS_Datum structure
+**
+** @return [int32] success
+************************************************************************/
+int32 GPS_Math_Known_Datum_To_UTM_EN(double lat, double lon, double *E,
+ double *N, int32 *zone, char *zc, const int n)
{
double phi0;
double lambda0;
double F0;
double a;
double b;
+ int32 idx;
- if(!GPS_Math_UTM_Param_To_Mc(zone,zc,&lambda0,&E0,&N0,&F0))
+ if(!GPS_Math_LatLon_To_UTM_Param(lat,lon,zone,zc,&lambda0,&E0,
+ &N0,&F0))
return 0;
phi0 = (double)0.0;
+
+ idx = GPS_Datum[n].ellipse;
+ a = (double) GPS_Ellipse[idx].a;
+ b = a - (a/GPS_Ellipse[idx].invf);
- a = (double) GPS_Ellipse[21].a;
- b = a - (a/GPS_Ellipse[21].invf);
-
- GPS_Math_EN_To_LatLon(E,N,lat,lon,N0,E0,phi0,lambda0,F0,a,b);
+ GPS_Math_LatLon_To_EN(E,N,lat,lon,N0,E0,phi0,lambda0,F0,a,b);
return 1;
}
-
-
-/* @func GPS_Math_UTM_EN_To_WGS84 **************************************
+/* @func GPS_Math_UTM_EN_To_Known_Datum *********************************
**
-** Transform UTM zone, easting and northing to WGS84 lat/lon
+** Transform UTM zone, easting and northing to known datum lat/lon
**
** @param [w] lat [double *] WGS84 latitude (deg)
** @param [r] lon [double *] WGS84 longitude (deg)
** @param [w] N [double] northing (metres)
** @param [w] zone [int32] zone number
** @param [w] zc [char] zone character
+** @param [r] n [int32] datum number from GPS_Datum structure
**
** @return [int32] success
************************************************************************/
-int32 GPS_Math_UTM_EN_To_WGS84(double *lat, double *lon, double E,
- double N, int32 zone, char zc)
+int32 GPS_Math_UTM_EN_To_Known_Datum(double *lat, double *lon, double E,
+ double N, int32 zone, char zc, const int n)
{
- double phi;
- double lambda;
- double H;
+ double phi0;
+ double lambda0;
+ double N0;
+ double E0;
+ double F0;
+ double a;
+ double b;
+ int32 idx;
+ char southern;
- if(!GPS_Math_UTM_EN_To_NAD83(&phi,&lambda,E,N,zone,zc))
+ if(!GPS_Math_UTM_Param_To_Mc(zone,zc,&lambda0,&E0,&N0,&F0))
return 0;
-
- GPS_Math_Known_Datum_To_WGS84_M(phi,lambda,0,lat,lon,&H,77);
+ if (N0 > N) {
+ southern = 1;
+ N = N0 - N;
+ N0 = 0;
+ }
+ else southern = 0;
+
+ phi0 = (double)0.0;
+
+ idx = GPS_Datum[n].ellipse;
+ a = (double) GPS_Ellipse[idx].a;
+ b = a - (a/GPS_Ellipse[idx].invf);
+
+ GPS_Math_EN_To_LatLon(E,N,lat,lon,N0,E0,phi0,lambda0,F0,a,b);
+
+ if (southern) *lat = -(*lat);
return 1;
}
+
int32 GPS_Lookup_Datum_Index(const char *n)
{
GPS_PDatum dp;
const char *name;
if (case_ignore_strcmp(n, "WGS84") == 0) name = "WGS 84";
+ else if (case_ignore_strcmp(n, "WGS-84") == 0) name = "WGS 84";
else if (case_ignore_strcmp(n, "WGS72") == 0) name = "WGS 72";
+ else if (case_ignore_strcmp(n, "WGS-72") == 0) name = "WGS 72";
else name = n;
for (dp = GPS_Datum; dp->name; dp++) {
return -1;
}
+
+char *
+GPS_Math_Get_Datum_Name(const int datum_index)
+{
+ return GPS_Datum[datum_index].name;
+}
int32 GPS_Math_UTM_EN_To_NAD83(double *lat, double *lon, double E,
double N, int32 zone, char zc);
+int32 GPS_Math_Known_Datum_To_UTM_EN(double lat, double lon, double *E,
+ double *N, int32 *zone, char *zc, const int n);
+int32 GPS_Math_UTM_EN_To_Known_Datum(double *lat, double *lon, double E,
+ double N, int32 zone, char zc, const int n);
+
int32 GPS_Lookup_Datum_Index(const char *n);
+char *GPS_Math_Get_Datum_Name(const int datum_index);
#endif
return;
}
+/* @func GPS_Lap_New ***********************************************
+**
+** Lap constructor
+**
+** @return [GPS_PLap] virgin track
+**********************************************************************/
+
+GPS_PLap GPS_Lap_New(void)
+{
+ GPS_PLap ret;
+
+ if(!(ret=(GPS_PLap)calloc(1,sizeof(GPS_OLap))))
+ {
+ perror("malloc");
+ fprintf(stderr,"GPS_Lap_New: Insufficient memory");
+ fflush(stderr);
+ return NULL;
+ }
+
+ return ret;
+}
+
+
+
+/* @func GPS_Lap_Del ***********************************************
+**
+** Lap destructor
+**
+** @param [w] thys [GPS_PLap *] track to delete
+**
+** @return [void]
+**********************************************************************/
+
+void GPS_Lap_Del(GPS_PLap *thys)
+{
+ free((void *)*thys);
+
+ return;
+}
void GPS_Track_Del(GPS_PTrack *thys);
GPS_PWay GPS_Way_New(void);
void GPS_Way_Del(GPS_PWay *thys);
+GPS_PLap GPS_Lap_New(void);
+void GPS_Lap_Del(GPS_PLap *thys);
#endif
struct COMMANDDATA COMMAND_ID[2]=
{
{
- 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x31,0x32,92,117,121,450
+ 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x31,0x32,92,117,121,450,451,452,453,454,561,562,563,564,564
}
,
{
struct LINKDATA LINK_ID[3]=
{
{
- 0x06,0,0,0,0,0,0x15,0,0,0,0,0,0,0,0,0,0xfd,0xfe,0xff
+ 0xfd,0xfe,0xff,248,
+ 0x06,0,0,0,0,0,0x15,0,0,0,0,
+ 0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
}
,
{
- 0x06,0x0a,0x0c,0x0e,0x11,0x13,0x15,0x1b,0x1d,0x1e,
- 0x1f,0x22,0x23,0x33,0x62,0x63,0xfd,0xfe,0xff
+ 0xfd,0xfe,0xff,248,
+ 0x06,0x0a,0x0c,0x0e,0x11,0x13,0x15,0x1b,0x1d,0x1e,0x1f,
+ 0x22,0x23,0x33,0x62,0x63,
+ 134,149,152,990,991,992,993,994,1061,1062,1063,1064,1065,1066,222
}
,
{
+ 0xfd,0xfe,0xff,248,
0x06,0x0b,0x0c,0x14,0x18,0,0x15,0x23,0x25,0x27,0x04,
- 0,0x2b,0,0,0,0xfd,0xfe,0xff
+ 0,0x2b,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
}
};
struct LINKDATA
{
- UC Pid_Ack_Byte;
- UC Pid_Command_Data;
- UC Pid_Xfer_Cmplt;
- UC Pid_Date_Time_Data;
- UC Pid_Position_Data;
- UC Pid_Prx_Wpt_Data;
- UC Pid_Nak_Byte;
- UC Pid_Records;
- UC Pid_Rte_Hdr;
- UC Pid_Rte_Wpt_Data;
- UC Pid_Almanac_Data;
- UC Pid_Trk_Data;
- UC Pid_Wpt_Data;
- UC Pid_Pvt_Data;
- UC Pid_Rte_Link_Data;
- UC Pid_Trk_Hdr;
- UC Pid_Protocol_Array;
- UC Pid_Product_Rqst;
- UC Pid_Product_Data;
- UC Pid_Wpt_Cat_Data;
-}
-;
+ US Pid_Protocol_Array;
+ US Pid_Product_Rqst;
+ US Pid_Product_Data;
+ US Pid_Ext_Product_Data;
+
+ US Pid_Ack_Byte;
+ US Pid_Command_Data;
+ US Pid_Xfer_Cmplt;
+ US Pid_Date_Time_Data;
+ US Pid_Position_Data;
+ US Pid_Prx_Wpt_Data;
+ US Pid_Nak_Byte;
+ US Pid_Records;
+ US Pid_Rte_Hdr;
+ US Pid_Rte_Wpt_Data;
+ US Pid_Almanac_Data;
+ US Pid_Trk_Data;
+ US Pid_Wpt_Data;
+ US Pid_Pvt_Data;
+ US Pid_Rte_Link_Data;
+ US Pid_Trk_Hdr;
+
+ US Pid_FlightBook_Record;
+ US Pid_Lap;
+ US Pid_Wpt_Cat_Data;
+ US Pid_Run;
+ US Pid_Workout;
+ US Pid_Workout_Occurrence;
+ US Pid_Fitness_User_Profile;
+ US Pid_Workout_Limits;
+ US Pid_Course;
+ US Pid_Course_Lap;
+ US Pid_Course_Point;
+ US Pid_Course_Trk_Hdr;
+ US Pid_Course_Trk_Data;
+ US Pid_Course_Limits;
+ US Pid_Trk2_Hdr; /*Undocumented*/
+};
US Cmnd_Transfer_Lap;
US Cmnd_Transfer_Wpt_Cats;
US Cmnd_Transfer_Runs;
+ US Cmnd_Transfer_Workouts;
+ US Cmnd_Transfer_Workout_Occurrences;
+ US Cmnd_Transfer_Fitness_User_Profile;
+ US Cmnd_Transfer_Workout_Limits;
+ US Cmnd_Transfer_Courses;
+ US Cmnd_Transfer_Course_Laps;
+ US Cmnd_Transfer_Course_Points;
+ US Cmnd_Transfer_Course_Tracks;
+ US Cmnd_Transfer_Course_Limits;
}
;
#define pA600 600
int32 gps_date_time_transfer;
+/*
+ * FlightBook Transfer Protocol
+ */
+#define pA650 650
+/*Not implemented */
/*
* Position
#define pA906 906
int32 gps_lap_transfer;
+/*
+ * Various fitness related
+ */
#define pA1000 1000
int32 gps_run_transfer;
-
-
+#define pA1002 1002
+int32 gps_workout_transfer;
+#define pA1004 1004
+int32 gps_user_profile_transfer;
+#define pA1005 1005
+int32 gps_workout_limits_transfer;
+#define pA1006 1006
+int32 gps_course_transfer;
+#define pA1009 1009
+int32 gps_course_limits_transfer;
/*
* Waypoint D Type
* Lap Data Type
*/
#define pD906 906
+#define pD1001 1001
+#define pD1011 1011
+#define pD1015 1015
int32 gps_lap_type;
+/*
+ * Various fitness related
+ */
+#define pD1000 1000
+#define pD1009 1009
+#define pD1010 1010
+int32 gps_run_type;
+#define pD1002 1002
+#define pD1008 1008
+int32 gps_workout_type;
+#define pD1003 1003
+int32 gps_workout_occurrence_type;
+#define pD1004 1004
+int32 gps_user_profile_type;
+#define pD1005 1005
+int32 gps_workout_limits_type;
+#define pD1006 1006
+int32 gps_course_type;
+#define pD1007 1007
+int32 gps_course_lap_type;
+#define pD1012 1012
+int32 gps_course_point_type;
+#define pD1013 1013
+int32 gps_course_limits_type;
+
/*
* Link protocol type
*/
* matters in this mode, turn the pretty formatting off.
*/
do_indentation = 0;
- kml_wr_init(posnfilenametmp);
max_position_points = atoi(opt_max_position_points);
}
MOVEFILE_REPLACE_EXISTING);
#endif
rename(posnfilenametmp, posnfilename);
+ }
+ ofd = NULL;
+}
+
+static void
+kml_wr_position_deinit(void)
+{
+// kml_wr_deinit();
+ if (posnfilenametmp) {
xfree(posnfilenametmp);
posnfilenametmp = NULL;
}
- ofd = NULL;
}
/*
if (td->max_cad) {
TD("<b>Max Cadence</b> %d rpm", td->max_cad);
}
+ if (td->start && td->end) {
+ char time_string[64];
+
+ xml_fill_in_time(time_string, td->start, 0, XML_LONG_TIME);
+ TD("<b>Start Time:</b> %s ", time_string);
+ xml_fill_in_time(time_string, td->end, 0, XML_LONG_TIME);
+ TD("<b>End Time:</b> %s ", time_string);
+ }
kml_write_xml(-1, "</table>]]>\n");
kml_write_xml(-1, "</description>\n");
if (pt->altitude != unknown_alt) TD2("Altitude: %.1f %s", alt, alt_units);
if (pt->heartrate) TD("Heart rate: %d", pt->heartrate);
if (pt->cadence) TD("Cadence: %d", pt->cadence);
- if (pt->temperature) TD("Temperature: %.1f", pt->temperature);
- if (pt->speed > 0) {
+ if WAYPT_HAS(pt, temperature) TD("Temperature: %.1f", pt->temperature);
+ if WAYPT_HAS(pt, speed) {
char *spd_units;
double spd = fmt_speed(pt->speed, &spd_units);
TD2("Speed: %.1f %s", spd, spd_units);
}
- TD("Heading: %.1f", pt->course);
+ if WAYPT_HAS(pt, course) TD("Heading: %.1f", pt->course);
+ /* This really shouldn't be here, but as of this writing,
+ * Earth can't edit/display the TimeStamp.
+ */
+ if (pt->creation_time) {
+ char time_string[64];
+
+ xml_fill_in_time(time_string, pt->creation_time,
+ pt->microseconds, XML_LONG_TIME);
+ if (time_string[0]) {
+ TD("Time: %s", time_string);
+ }
+ }
+
kml_write_xml(-1, "</table>\n");
kml_write_xml(-1, "]]></description>\n");
}
}
// Output trackpoints
- if (!realtime_positioning) {
+ if (!realtime_positioning && track_waypt_count()) {
kml_write_xml(1, "<Folder>\n");
kml_write_xml(0, "<name>Tracks</name>\n");
}
track_disp_all(kml_track_hdr, kml_track_tlr, kml_track_disp);
- if (!realtime_positioning) {
+ if (!realtime_positioning && track_waypt_count()) {
kml_write_xml(-1, "</Folder>\n");
}
// Output routes
- if (!realtime_positioning) {
+ if (!realtime_positioning && route_waypt_count()) {
kml_write_xml(1, "<Folder>\n");
kml_write_xml(0, "<name>Routes</name>\n");
route_disp_all(kml_route_hdr, kml_route_tlr, kml_route_disp);
{
static time_t last_valid_fix;
+ kml_wr_init(posnfilenametmp);
+
if (!posn_trk_head) {
posn_trk_head = route_head_alloc();
track_add_head(posn_trk_head);
waypoint *tonuke = (waypoint *) QUEUE_FIRST(&posn_trk_head->waypoint_list);
track_del_wpt(posn_trk_head, tonuke);
}
+
+ kml_wr_deinit();
}
ff_vecs_t kml_vecs = {
NULL,
kml_args,
CET_CHARSET_UTF8, 1, /* CET-REVIEW */
- { NULL, NULL, NULL, kml_wr_position_init, kml_wr_position, kml_wr_deinit }
+ { NULL, NULL, NULL, kml_wr_position_init, kml_wr_position, kml_wr_position_deinit }
};
static route_head *trk_head;
static route_head *rte_head;
static char *ignoreicons;
+static char *writeasicons;
static char *merge;
static char *seg_break;
static
arglist_t lowranceusr_args[] = {
- {"ignoreicons", &ignoreicons, "Ignore event marker icons",
+ {"ignoreicons", &ignoreicons, "Ignore event marker icons on read",
+ NULL, ARGTYPE_BOOL, ARG_NOMINMAX },
+ {"writeasicons", &writeasicons, "Treat waypoints as icons on write",
NULL, ARGTYPE_BOOL, ARG_NOMINMAX },
{"merge", &merge, "(USR output) Merge into one segmented track",
NULL, ARGTYPE_BOOL, ARG_NOMINMAX },
char *comment;
int alt = METERS_TO_FEET(wpt->altitude);
- if (alt == unknown_alt) {
+ if (wpt->altitude == unknown_alt) {
alt = UNKNOWN_USR_ALTITUDE;
}
lowranceusr_waypt_disp(wpt);
}
+/*
+ * In Lowrance parlance, an "Icon" is a waypoint but without any
+ * kind of a name. The header count of icons has already been written
+ * before we get here, so it's just a matter of spitting out
+ * 4 bytes lat
+ * 4 bytes long
+ * 4 bytes symbol
+ */
+static void
+lowranceusr_write_icon(const waypoint *wpt)
+{
+ int latmm = lat_deg_to_mm(wpt->latitude);
+ int lonmm = lon_deg_to_mm(wpt->longitude);
+ int icon = wpt->icon_descr ?
+ lowranceusr_find_icon_number_from_desc(wpt->icon_descr) :
+ 10003;
+
+ my_fwrite4(&latmm, file_out);
+ my_fwrite4(&lonmm, file_out);
+ my_fwrite4(&icon, file_out);
+}
+
/*
* Header format:
* short num_trails,
my_fwrite2(&MajorVersion, file_out);
my_fwrite2(&MinorVersion, file_out);
- my_fwrite2(&NumWaypoints, file_out);
if (global_opts.debug_level >= 1)
printf("LOWRANCE data_write: Num waypoints = %d\n", NumWaypoints);
- if (NumWaypoints)
- waypt_disp_all(lowranceusr_waypt_pr);
+ if (writeasicons) {
+ short zero = 0;
+ my_fwrite2(&zero, file_out);
+ } else {
+ my_fwrite2(&NumWaypoints, file_out);
+ waypt_disp_all(lowranceusr_waypt_pr);
+ }
- /* Route support added 6/21/05 */
- NumRoutes = route_count();
- my_fwrite2(&NumRoutes, file_out);
+ /* Route support added 6/21/05 */
+ NumRoutes = route_count();
+ my_fwrite2(&NumRoutes, file_out);
if (global_opts.debug_level >= 1)
printf("LOWRANCE data_write: Num routes = %d\n", NumRoutes);
route_disp_all(lowranceusr_route_hdr, NULL, lowranceusr_waypt_disp);
}
- /* no support for Icons */
- NumIcons = 0;
- my_fwrite2(&NumIcons, file_out);
+ if (NumWaypoints && writeasicons) {
+ my_fwrite2(&NumWaypoints, file_out);
+ waypt_disp_all(lowranceusr_write_icon);
+ } else {
+ NumIcons = 0;
+ my_fwrite2(&NumIcons, file_out);
+ }
/* Track support added 6/21/05 */
NumTrails = track_count();
#include "defs.h"
#if PDBFMTS_ENABLED
-#include "coldsync/palm.h"
-#include "coldsync/pdb.h"
+#include "pdbfile.h"
#include "jeeps/gpsmath.h"
#define MYNAME "mag_pdb"
#define PROUTE_MAGIC 0x766d6170 /* vmap */
#define PROUTE_ROUTE 0x49444154 /* IDAT */
-static FILE *fd_in;
-static struct pdb *pdb_in;
-static char *fname_in;
+static pdbfile *file_in;
static arglist_t magpdb_args[] =
{
static void magpdb_rd_init(const char *fname)
{
- fname_in = xstrdup(fname);
- fd_in = xfopen(fname, "rb", MYNAME);
+ file_in = pdb_open(fname, MYNAME);
}
static void magpdb_rd_deinit(void)
{
- fclose(fd_in);
- xfree(fname_in);
+ pdb_close(file_in);
}
static void magpdb_read(void)
{
- struct pdb_record *pdb_rec = NULL;
-
+ pdbrec_t *pdb_rec;
- pdb_in = pdb_Read(fileno(fd_in));
- is_fatal((pdb_in == NULL), MYNAME ": read failed.");
-
- is_fatal((pdb_in->creator != PROUTE_MAGIC), /* identify the database */
- MYNAME ": Not a Map&Guide pdb file (0x%08x).", pdb_in->creator);
+ is_fatal((file_in->creator != PROUTE_MAGIC), /* identify the database */
+ MYNAME ": Not a Map&Guide pdb file (0x%08x).", file_in->creator);
- is_fatal((pdb_in->version != 0), /* only version "0" currently seen and tested */
- MYNAME ": This file is from an unsupported version (%d) of Map&Guide and is unsupported.", pdb_in->version + 5);
+ is_fatal((file_in->version != 0), /* only version "0" currently seen and tested */
+ MYNAME ": This file is from an unsupported version (%d) of Map&Guide and is unsupported.", file_in->version + 5);
- is_fatal((pdb_in->type != PROUTE_ROUTE),
- MYNAME ": Unknown pdb data type (0x%08x).", pdb_in->type);
+ is_fatal((file_in->type != PROUTE_ROUTE),
+ MYNAME ": Unknown pdb data type (0x%08x).", file_in->type);
- for (pdb_rec = pdb_in->rec_index.rec; pdb_rec; pdb_rec=pdb_rec->next)
+ for (pdb_rec = file_in->rec_list; pdb_rec; pdb_rec = pdb_rec->next)
{
char *data = (char *)pdb_rec->data;
magpdb_read_data(data + 4, len);
}
}
- free_pdb(pdb_in);
}
/* ======================================================================================= */
}
placeddate = maggeo_fmtdate(waypointp->creation_time);
lfounddate = maggeo_fmtdate(waypointp->gc_data.last_found);
- cname = mkshort(desc_handle, waypointp->notes ? waypointp->notes : waypointp->shortname);
+ cname = mkshort(desc_handle, waypointp->notes ? waypointp->notes : waypointp->description);
placer = waypointp->gc_data.placer;
/*
#include "defs.h"
#if PDBFMTS_ENABLED
-#include "coldsync/palm.h"
-#include "coldsync/pdb.h"
+#include "pdbfile.h"
#define MYNAME "Companion Waypoints"
#define MYTYPE 0x54777074 /* Twpt */
char unknown3; /* always 'a' */
};
-static FILE *file_in;
-static FILE *file_out;
-static const char *out_fname;
+static pdbfile *file_in;
+static pdbfile *file_out;
static short_handle mkshort_handle;
-
-static struct pdb *opdb;
-static struct pdb_record *opdb_rec;
+static int ct;
static void
rd_init(const char *fname)
{
- file_in = xfopen(fname, "rb", MYNAME);
+ file_in = pdb_open(fname, MYNAME);
}
static void
rd_deinit(void)
{
- fclose(file_in);
+ pdb_close(file_in);
}
static void
wr_init(const char *fname)
{
- file_out = xfopen(fname, "wb", MYNAME);
- out_fname = fname;
+ file_out = pdb_create(fname, MYNAME);
mkshort_handle = mkshort_new_handle();
setshort_length(mkshort_handle, 20);
+ ct = 0;
}
static void
wr_deinit(void)
{
- fclose(file_out);
+ pdb_close(file_out);
mkshort_del_handle(&mkshort_handle);
}
data_read(void)
{
struct record *rec;
- struct pdb *pdb;
- struct pdb_record *pdb_rec;
-
- if (NULL == (pdb = pdb_Read(fileno(file_in)))) {
- fatal(MYNAME ": pdb_Read failed\n");
- }
+ pdbrec_t *pdb_rec;
- if ((pdb->creator != MYCREATOR) || (pdb->type != MYTYPE)) {
+ if ((file_in->creator != MYCREATOR) || (file_in->type != MYTYPE)) {
fatal(MYNAME ": Not a Magellan Navigator file.\n");
}
- for(pdb_rec = pdb->rec_index.rec; pdb_rec; pdb_rec=pdb_rec->next) {
+ for(pdb_rec = file_in->rec_list; pdb_rec; pdb_rec = pdb_rec->next) {
waypoint *wpt_tmp;
char *vdata;
struct tm tm;
waypt_add(wpt_tmp);
}
- free_pdb(pdb);
}
my_writewpt(const waypoint *wpt)
{
struct record *rec;
- static int ct;
struct tm *tm;
char *vdata;
time_t tm_t;
vdata[1] = '\0';
vdata += 2;
- opdb_rec = new_Record (0, 0, ct++, (uword) (vdata-(char *)rec), (const ubyte *)rec);
-
- if (opdb_rec == NULL) {
- fatal(MYNAME ": libpdb couldn't create record\n");
- }
+ pdb_write_rec(file_out, 0, 0, ct++, rec, (char *)vdata - (char *)rec);
- if (pdb_AppendRecord(opdb, opdb_rec)) {
- fatal(MYNAME ": libpdb couldn't append record\n");
- }
xfree(rec);
}
"\0\x01\x02\x03\x04\x05\x06\x07\x08"
"\x09\x0a\x0b\x0c\x0d\x0e\x0f\0\0";
- if (NULL == (opdb = new_pdb())) {
- fatal (MYNAME ": new_pdb failed\n");
- }
-
- strncpy(opdb->name, "Companion Waypoints", PDB_DBNAMELEN);
- opdb->name[PDB_DBNAMELEN-1] = 0;
- opdb->attributes = PDB_ATTR_BACKUP;
- opdb->ctime = opdb->mtime = current_time() + 2082844800U;
- opdb->type = MYTYPE; /* CWpt */
- opdb->creator = MYCREATOR; /* cGPS */
- opdb->version = 1;
- opdb->appinfo = (void *)appinfo;
- opdb->appinfo_len = 276;
+ strncpy(file_out->name, "Companion Waypoints", PDB_DBNAMELEN);
+ file_out->attr = PDB_FLAG_BACKUP;
+ file_out->ctime = file_out->mtime = current_time() + 2082844800U;
+ file_out->type = MYTYPE; /* CWpt */
+ file_out->creator = MYCREATOR; /* cGPS */
+ file_out->version = 1;
+ file_out->appinfo = (void *)appinfo;
+ file_out->appinfo_len = 276;
waypt_disp_all(my_writewpt);
-
- pdb_Write(opdb, fileno(file_out));
}
static void
mag_readmsg(gpsdata_type objective)
{
- char ibuf[200];
+ char ibuf[512]; /* oliskoli: corrupted data (I've seen descr with a lot
+ of escaped FFFFFFFF) may need more size */
int isz;
unsigned int isum;
char *isump;
magrxstate = mrs_handon;
return;
}
- if (strncmp(ibuf, "$PMGNWPT,", 7) == 0) {
+ if (strncmp(ibuf, "$PMGNWPL,", 7) == 0) {
waypoint *wpt = mag_wptparse(ibuf);
waypoint_read_count++;
if (global_opts.verbose_status) {
char *c2 = strchr(hex, esc[2]);
if (c1 && c2) {
int escv = (c1 - hex) * 16 + (c2 - hex);
- *esc++ = escv;
- /* buffers overlap */
- memmove(esc, esc+2, nremains - 2);
+ if (escv == 255) { /* corrupted data */
+ char *tmp = esc + 1;
+ while (*tmp == 'F') tmp++;
+ memmove(esc, tmp, strlen(tmp) + 1);
+ }
+ else {
+ *esc++ = (isprint(escv)) ? escv : '$';
+ /* buffers overlap */
+ memmove(esc, esc+2, nremains - 2);
+ }
}
}
+ else {
+ *esc = '\0'; /* trim corrupted data,
+ otherwise we get an endless loop */
+ }
}
}
int alt;
char altunits;
char shortname[100];
- char descr[100];
+ char descr[256];
char icon_token[100];
waypoint *waypt;
char *icons;
#include "csv_util.h"
#include "inifile.h"
#include <ctype.h>
+#include <signal.h>
#define MYNAME "main"
+void signal_handler(int sig);
+
typedef struct arg_stack_s {
int argn;
int argc;
" -s Synthesize shortnames\n"
" -r Process route information\n"
" -t Process track information\n"
+" -T Process realtime tracking information\n"
" -w Process waypoint information [default]\n"
" -b Process command file (batch mode)\n"
" -c Character set for next operation\n"
optarg = argv[argn][2]
? argv[argn]+2 : argv[++argn];
fname = optarg;
+ if (fname == NULL) {
+ fatal ("No file or device name specified.\n");
+ }
if (ivecs == NULL) {
fatal ("No valid input type specified\n");
}
ivecs->rd_init(fname);
ivecs->read();
ivecs->rd_deinit();
-
+
cet_convert_strings(global_opts.charset, NULL, NULL);
cet_convert_deinit();
optarg = argv[argn][2]
? argv[argn]+2 : argv[++argn];
ofname = optarg;
+ if (ofname == NULL) {
+ fatal ("No output file or device name specified.\n");
+ }
if (ovecs && (!(global_opts.masked_objective & POSNDATAMASK))) {
/* simulates the default behaviour of waypoints */
if (doing_nothing)
}
if (ovecs) {
- if (!ovecs->position_ops.wr_init ||
- !ovecs->position_ops.wr_position ||
- !ovecs->position_ops.wr_deinit) {
- fatal ("This output format does not support realtime positioning.\n");
+ if ( !ovecs->position_ops.wr_position ) {
+ fatal ("This output format does not support output of realtime positioning.\n");
}
}
- while (1) {
- posn_status status;
+ if (signal(SIGINT, signal_handler) == SIG_ERR) {
+ fatal ("Couldn't install the exit signal handler.\n");
+ }
+
+ if (ovecs && ovecs->position_ops.wr_init) {
+ ovecs->position_ops.wr_init(ofname);
+ }
+
+ tracking_status.request_terminate = 0;
+ while (!tracking_status.request_terminate) {
waypoint *wpt;
- status.request_terminate = 0;
- wpt = ivecs->position_ops.rd_position(&status);
+ wpt = ivecs->position_ops.rd_position(&tracking_status);
- if (status.request_terminate) {
+ if (tracking_status.request_terminate) {
if (wpt) {
waypt_free(wpt);
}
}
if (wpt) {
if (ovecs) {
- ovecs->position_ops.wr_init(ofname);
+// ovecs->position_ops.wr_init(ofname);
ovecs->position_ops.wr_position(wpt);
- ovecs->position_ops.wr_deinit();
+// ovecs->position_ops.wr_deinit();
} else {
/* Just print to screen */
waypt_disp(wpt);
if (ivecs->position_ops.rd_deinit) {
ivecs->position_ops.rd_deinit();
}
- if (ivecs->position_ops.wr_deinit) {
- ivecs->position_ops.wr_deinit();
+ if (ovecs->position_ops.wr_deinit) {
+ ovecs->position_ops.wr_deinit();
}
}
#endif
exit(0);
}
+
+void signal_handler(int sig)
+{
+ tracking_status.request_terminate = 1;
+}
+
#include "defs.h"
#if PDBFMTS_ENABLED
-#include "coldsync/palm.h"
-#include "coldsync/pdb.h"
+#include "pdbfile.h"
#define MYNAME "Companion Waypoints"
#define MYTYPE 0x64617461 /* Platdata */
pdb_16 lat2d;
};
-static FILE *file_in;
-static FILE *file_out;
-static const char *out_fname;
+static pdbfile *file_in, *file_out;
static short_handle mkshort_handle;
-struct pdb *opdb;
-struct pdb_record *opdb_rec;
-
static void
rd_init(const char *fname)
{
- file_in = xfopen(fname, "rb", MYNAME);
+ file_in = pdb_open(fname, MYNAME);
}
static void
rd_deinit(void)
{
- fclose(file_in);
+ pdb_close(file_in);
}
static void
wr_init(const char *fname)
{
- file_out = xfopen(fname, "wb", MYNAME);
- out_fname = fname;
+ file_out = pdb_create(fname, MYNAME);
mkshort_handle = mkshort_new_handle();
setshort_length(mkshort_handle, 20);
}
static void
wr_deinit(void)
{
- fclose(file_out);
+ pdb_close(file_out);
mkshort_del_handle(&mkshort_handle);
}
}
}
- static void
- data_read(void)
+static void
+data_read(void)
{
struct record *rec;
- struct pdb *pdb;
- struct pdb_record *pdb_rec;
+ pdbrec_t *pdb_rec;
- if (NULL == (pdb = pdb_Read(fileno(file_in)))) {
- fatal(MYNAME ": pdb_Read failed\n");
- }
-
- if ((pdb->creator != MYCREATOR) || (pdb->type != MYTYPE)) {
+ if ((file_in->creator != MYCREATOR) || (file_in->type != MYTYPE)) {
fatal(MYNAME ": Not a Magellan Navigator file.\n");
}
- pdb_rec = pdb->rec_index.rec;
+ pdb_rec = file_in->rec_list;
convert_rec0((struct record0*) pdb_rec->data);
// for(pdb_rec = pdb->rec_index.rec; pdb_rec; pdb_rec=pdb_rec->next) {
- for(pdb_rec=pdb_rec->next; pdb_rec; pdb_rec=pdb_rec->next) {
+ for(pdb_rec = pdb_rec->next; pdb_rec; pdb_rec=pdb_rec->next) {
waypoint *wpt_tmp;
char *vdata = 0;
char *edata;
struct tm tm = {0};
rec = (struct record *) pdb_rec->data;
- edata = (char *) rec + pdb_rec->data_len;
+ edata = (char *) rec + pdb_rec->size;
for (; vdata < edata; rec = (struct record *) vdata) {
wpt_tmp = waypt_new();
waypt_add(wpt_tmp);
}
}
- free_pdb(pdb);
}
vdata[1] = '\0';
vdata += 2;
- opdb_rec = new_Record (0, 0, ct++, vdata-(char *)rec, (const ubyte *)rec);
-
- if (opdb_rec == NULL) {
- fatal(MYNAME ": libpdb couldn't create record\n");
- }
+ pdb_write(file_out, 0, rec, (char *)vdata - (char *)rec);
- if (pdb_AppendRecord(opdb, opdb_rec)) {
- fatal(MYNAME ": libpdb couldn't append record\n");
- }
xfree(rec);
#endif
}
"\0\x01\x02\x03\x04\x05\x06\x07\x08"
"\x09\x0a\x0b\x0c\x0d\x0e\x0f\0\0";
- if (NULL == (opdb = new_pdb())) {
- fatal (MYNAME ": new_pdb failed\n");
- }
-
- strncpy(opdb->name, "Companion Waypoints", PDB_DBNAMELEN);
- opdb->name[PDB_DBNAMELEN-1] = 0;
- opdb->attributes = PDB_ATTR_BACKUP;
- opdb->ctime = opdb->mtime = current_time() + 2082844800U;
- opdb->type = MYTYPE; /* CWpt */
- opdb->creator = MYCREATOR; /* cGPS */
- opdb->version = 1;
- opdb->appinfo = (void *)appinfo;
- opdb->appinfo_len = 276;
+ strncpy(file_out->name, "Companion Waypoints", PDB_DBNAMELEN);
+ file_out->name[PDB_DBNAMELEN-1] = 0;
+ file_out->attr = PDB_FLAG_BACKUP;
+ file_out->ctime = file_out->mtime = current_time() + 2082844800U;
+ file_out->type = MYTYPE; /* CWpt */
+ file_out->creator = MYCREATOR; /* cGPS */
+ file_out->version = 1;
+ file_out->appinfo = (void *)appinfo;
+ file_out->appinfo_len = 276;
waypt_disp_all(my_writewpt);
-
- pdb_Write(opdb, fileno(file_out));
}
} else {
wpt_tmp->altitude = gbfgetflt(mapsend_file_in);
}
+ if (wpt_tmp->altitude < unknown_alt + 1)
+ wpt_tmp->altitude = unknown_alt;
wpt_tmp->creation_time = gbfgetint32(mapsend_file_in);
valid = gbfgetint32(mapsend_file_in);
thisWaypoint->latitude = GPS_Math_Semi_To_Deg(lat);
thisWaypoint->longitude = GPS_Math_Semi_To_Deg(lon);
thisWaypoint->altitude = mps_altitude;
- thisWaypoint->proximity = mps_proximity;
- thisWaypoint->depth = mps_depth;
+ if (mps_proximity != unknown_alt) WAYPT_SET(thisWaypoint, proximity, mps_proximity);
+ if (mps_depth != unknown_alt) WAYPT_SET(thisWaypoint, depth, mps_depth);
/* might need to change this to handle version dependent icon handling */
thisWaypoint->icon_descr = gt_find_desc_from_icon_number(icon, MAPSOURCE, &dynamic);
int colour = 0; /* (unknown colour) black is 1, white is 16 */
double mps_altitude = wpt->altitude;
- double mps_proximity = (mpsuseprox ? wpt->proximity : unknown_alt);
- double mps_depth = (mpsusedepth ? wpt->depth : unknown_alt);
+ double mps_proximity = (mpsuseprox ? WAYPT_GET(wpt, proximity, unknown_alt) : unknown_alt);
+ double mps_depth = unknown_alt;
lat = GPS_Math_Deg_To_Semi(wpt->latitude);
lon = GPS_Math_Deg_To_Semi(wpt->longitude);
+ if (WAYPT_HAS(wpt, depth) && mpsusedepth) mps_depth = wpt->depth;
if(wpt->description) src = wpt->description;
if(wpt->notes) src = wpt->notes;
thisWaypoint->latitude = GPS_Math_Semi_To_Deg(lat);
thisWaypoint->longitude = GPS_Math_Semi_To_Deg(lon);
thisWaypoint->altitude = mps_altitude;
- thisWaypoint->depth = mps_depth;
+ if (mps_depth != unknown_alt) WAYPT_SET(thisWaypoint, depth, mps_depth);
}
}
thisWaypoint->creation_time = le_read32(&dateTime);
thisWaypoint->microseconds = 0;
thisWaypoint->altitude = mps_altitude;
- thisWaypoint->depth = mps_depth;
+ if (mps_depth != unknown_alt) WAYPT_SET(thisWaypoint, depth, mps_depth);
track_add_wpt(track_head, thisWaypoint);
} /* while (trk_count--) */
char zbuf[10];
double mps_altitude = wpt->altitude;
- double mps_depth = (mpsusedepth ? wpt->depth : unknown_alt);
+ double mps_depth = unknown_alt;
lat = GPS_Math_Deg_To_Semi(wpt->latitude);
lon = GPS_Math_Deg_To_Semi(wpt->longitude);
+ if (WAYPT_HAS(wpt, depth) && mpsusedepth) mps_depth = wpt->depth;
memset(zbuf, 0, sizeof(zbuf));
}
static
-int
+uniq_shortname *
is_unique(mkshort_handle *h, char *name)
{
queue *e, *t;
QUEUE_FOR_EACH(&h->namelist[hash], e, t) {
uniq_shortname *z = (uniq_shortname *) e;
if (0 == case_ignore_strcmp(z->orig_shortname, name)) {
- return 0;
+ return z;
}
}
- return 1;
+ return (uniq_shortname *) NULL;
}
static
char *
mkshort_add_to_list(mkshort_handle *h, char *name)
{
- while (!is_unique(h, name)) {
+ uniq_shortname *s;
+
+ while ((s = is_unique(h, name))) {
int dl;
char tbuf[10];
size_t l = strlen(name);
- int hash = hash_string(name);
- uniq_shortname *s = (uniq_shortname *) h->namelist[hash].next;
s->conflictctr++;
Support for Microsoft AutoRoute 2002 ".axe" files,
- Copyright (C) 2005 Olaf Klein, o.b.klein@gpsbabel.org
+ Copyright (C) 2005,2007 Olaf Klein, o.b.klein@gpsbabel.org
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
#undef OLE_DEBUG
-static FILE *fin;
-static char *fin_name;
+static gbfile *fin;
static arglist_t msroute_args[] =
{
Remarks:
- * in the moment ole_size1 and sector_size represents the same value
+ * in the moment ole_size1 and sector_sz represents the same value
* in OLE_DEBUG mode: successfully tested with 64MB++ standard MS doc's (PowerPoint, Word)
*/
typedef struct ole_prop_s
{
gbuint16 name[32];
- gbuint16 name_size; /* offset 0x40 */
+ gbuint16 name_sz; /* offset 0x40 */
char ole_typ; /* offset 0x42 */
char U1; /* offset 0x43 */
gbuint32 previous; /* offset 0x44 */
gbuint32 U12; /* offset 0x6c */
gbuint32 U13; /* offset 0x70 */
gbint32 first_sector; /* offset 0x74 */
- gbint32 length; /* offset 0x78 */
+ gbint32 data_sz; /* offset 0x78 */
gbuint32 U16; /* offset 0x7c */
} ole_prop_t;
#define DIR_ITEM_SIZE sizeof(ole_prop_t)
-static int sector_size = 512;
+static int sector_sz = 512;
#ifndef min
#define min(a,b) ((a) < (b)) ? (a) : (b)
/* simple OLE file reader */
static void
-ole_read_sector(const int sector, void *target)
+ole_read_sector(const int sector, void *target, const char full)
{
int res;
- res = fseek(fin, (sector + 1) * sector_size, SEEK_SET);
+ res = gbfseek(fin, (sector + 1) * sector_sz, SEEK_SET);
is_fatal((res != 0), MYNAME ": Could not seek file to sector %d!", sector + 1);
- res = fread(target, 1, sector_size, fin);
- is_fatal((res < sector_size), MYNAME ": Read error (%d, sector %d) on file \"%s\"!", res, sector, fin_name);
+ res = gbfread(target, 1, sector_sz, fin);
+ is_fatal(
+ ((res < 0) || (full && (res < sector_sz))),
+ MYNAME ": Read error (%d, sector %d) on file \"%s\"!", res, sector, fin->name);
}
static ole_prop_t *
for (i = 0; i < ole_dir_ct; i++)
{
- int j, len;
- char buff[OLE_MAX_NAME_LENGTH + 1];
+ int len, test;
+ char *str;
ole_prop_t *item;
item = &ole_dir[i];
- len = min(OLE_MAX_NAME_LENGTH, item->name_size / 2);
+ if ((item->ole_typ != 1) && (item->ole_typ != 2) && (item->ole_typ != 5)) continue;
+ if ((item->data_sz <= 0) || (item->name_sz <= 0)) continue;
- for (j = 0; j < len; j++)
- buff[j] = le_read16(&item->name[j]);
- buff[j] = '\0';
-
- if (case_ignore_strcmp(buff, property) == 0)
- return item;
+ len = min(OLE_MAX_NAME_LENGTH, item->name_sz / 2);
+ str = cet_str_uni_to_utf8((short *)&item->name, len);
+ test = case_ignore_strcmp(str, property);
+ xfree(str);
+
+ if (test == 0) return item;
}
is_fatal((1), MYNAME ": \"%s\" not in property catalog!", property);
return 0;
int *fat;
char *buff;
- len = property->length;
+ len = property->data_sz;
if (len >= ole_size1_min)
{
while (left > 0)
{
int bytes = (left <= blocksize) ? left : blocksize;
- ole_read_sector(sector, buff + offs);
+ ole_read_sector(sector, buff + offs, (bytes >= sector_sz));
left -= bytes;
offs += bytes;
if (left > 0)
{
int chain = sector;
int blocks = (len + blocksize - 1) / blocksize;
- int blocks_per_sector = sector_size / blocksize;
+ int blocks_per_sector = sector_sz / blocksize;
offs = 0;
static char *
-ole_read_property_stream(const char *property_name, int *length)
+ole_read_property_stream(const char *property_name, int *data_sz)
{
ole_prop_t *property;
char *result;
if ((property = ole_find_property(property_name)) == NULL) return NULL;
result = ole_read_stream(property);
- if ((result != NULL) && (length != NULL))
- *length = property->length;
+ if ((result != NULL) && (data_sz != NULL))
+ *data_sz = property->data_sz;
return result;
}
ole_prop_t *p = &ole_dir[i];
if ((p->ole_typ != 1) && (p->ole_typ != 2) && (p->ole_typ != 5)) continue;
- if ((p->length <= 0) || (p->name_size <= 0)) continue;
+ if ((p->data_sz <= 0) || (p->name_sz <= 0)) continue;
- temp = cet_str_uni_to_utf8(&p->name, min(p->name_size / 2, OLE_MAX_NAME_LENGTH));
+ temp = cet_str_uni_to_utf8(&p->name, min(p->name_sz / 2, OLE_MAX_NAME_LENGTH));
strncpy(name, temp, sizeof(name));
xfree(temp);
- printf(MYNAME ": ole_test_properties for \"%s\" (%d bytes):", name, p->length);
+ printf(MYNAME ": ole_test_properties for \"%s\" (%d bytes):", name, p->data_sz);
if ((case_ignore_strcmp(name, "Root Entry") == 0) ||
- (p->length < ole_size1_min))
+ (p->data_sz < ole_size1_min))
{
printf(" skipped...\n");
continue;
else
{
int sector = p->first_sector;
- int length = p->length;
- int block_size = ole_size1; /* sector_size */
+ int data_sz = p->data_sz;
+ int block_size = ole_size1; /* sector_sz */
printf("\n");
- while ((length > 0) && (sector >= 0))
+ while ((data_sz > 0) && (sector >= 0))
{
- int bytes = (length > block_size) ? block_size : length;
+ int bytes = (data_sz > block_size) ? block_size : data_sz;
int prev = sector;
- length -= bytes;
+ data_sz -= bytes;
sector = ole_fat1[sector];
if (sector == -3)
{
printf(MYNAME "-new sector: %d\n", sector);
}
}
- is_fatal((length != 0), MYNAME ": Error in fat1 chain, sector = %d, %d bytes (=%d blocks) left!",
- sector, length, BLOCKS(length, block_size));
+ is_fatal((data_sz != 0), MYNAME ": Error in fat1 chain, sector = %d, %d bytes (=%d blocks) left!",
+ sector, data_sz, BLOCKS(data_sz, block_size));
}
}
}
ole_fat1 = NULL;
ole_fat2 = NULL;
- sector_size = 512; /* fixed for the moment */
+ sector_sz = 512; /* fixed for the moment */
- is_fatal((sizeof(head) != sector_size),
+ is_fatal((sizeof(head) != sector_sz),
MYNAME ": (!) internal error - invalid header size (%lu)!",
(unsigned long) sizeof(head));
memset(&head, 0, sizeof(head));
- fread(&head, sizeof(head), 1, fin);
+ gbfread(&head, sizeof(head), 1, fin);
is_fatal((strncmp(head.magic, (char *) ole_magic, sizeof(ole_magic)) != 0), MYNAME ": No MS document.");
is_fatal((head.byte_order != -2), MYNAME ": Unsupported byte-order %d", head.byte_order);
#if 0
- sector_size = ole_size1; /* i'll implement this, if i get an MS-doc (ole) */
- /* with "sector_size" other than 512 */
+ sector_sz = ole_size1; /* i'll implement this, if i get an MS-doc (ole) */
+ /* with "sector_sz" other than 512 */
#else
is_fatal((ole_size1 != 512), MYNAME ": Unsupported sector size %d", ole_size1);
#endif
- ole_fat1 = xmalloc(head.fat1_blocks * sector_size);
- ole_fat1_ct = (head.fat1_blocks * sector_size) / sizeof(gbint32);
+ ole_fat1 = xmalloc(head.fat1_blocks * sector_sz);
+ ole_fat1_ct = (head.fat1_blocks * sector_sz) / sizeof(gbint32);
#ifdef OLE_DEBUG
printf(MYNAME "-big fat: %d maximum sectors, size in memory %d, max. datasize %d bytes\n",
- ole_fat1_ct, head.fat1_blocks * sector_size, head.fat1_blocks * sector_size * sector_size / sizeof(gbint32));
+ ole_fat1_ct, head.fat1_blocks * sector_sz, head.fat1_blocks * sector_sz * sector_sz / sizeof(gbint32));
#endif
i_offs = 0; /* load "big fat" into memory */
for (i = 0; i < count; i++)
{
sector = head.fat1[i];
- ole_read_sector(sector, &ole_fat1[i_offs]);
+ ole_read_sector(sector, &ole_fat1[i_offs], 1);
i_offs += ole_size1 / 4;
}
while ((left > 0) && (sector >= 0))
{
- ole_read_sector(sector, &fat1_extra);
+ ole_read_sector(sector, &fat1_extra, 1);
le_read32_buff(&fat1_extra[0], 128);
count = (left < 127) ? left : 127;
for (i = 0; i < count; i++)
{
- ole_read_sector(fat1_extra[i], &ole_fat1[i_offs]);
+ ole_read_sector(fat1_extra[i], &ole_fat1[i_offs], 1);
i_offs += ole_size1 / 4;
}
left -= count;
do
{
if (ole_fat2 == NULL)
- ole_fat2 = (int *)xmalloc((count + 1) * sector_size);
+ ole_fat2 = (int *)xmalloc((count + 1) * sector_sz);
else
- ole_fat2 = (int *)xrealloc(ole_fat2, (count + 1) * sector_size);
+ ole_fat2 = (int *)xrealloc(ole_fat2, (count + 1) * sector_sz);
- ole_read_sector(sector, (char *)ole_fat2 + (count * sector_size));
+ ole_read_sector(sector, (char *)ole_fat2 + (count * sector_sz), 1);
sector = ole_fat1[sector];
count++;
}
while (sector >= 0);
- ole_fat2_ct = (count * sector_size) / sizeof(gbint32);
+ ole_fat2_ct = (count * sector_sz) / sizeof(gbint32);
if (ole_fat2_ct > 0)
le_read32_buff(&ole_fat2[0], ole_fat2_ct);
}
while (sector >= 0)
{
if (ole_dir == NULL)
- ole_dir = (void *)xmalloc((count + 1) * sector_size);
+ ole_dir = (void *)xmalloc((count + 1) * sector_sz);
else
- ole_dir = (void *)xrealloc(ole_dir, (count + 1) * sector_size);
+ ole_dir = (void *)xrealloc(ole_dir, (count + 1) * sector_sz);
- ole_read_sector(sector, (char *)ole_dir + (count * sector_size));
+ ole_read_sector(sector, (char *)ole_dir + (count * sector_sz), 1);
sector = ole_fat1[sector];
count++;
}
- ole_dir_ct = (count * sector_size) / sizeof(ole_prop_t);
+ ole_dir_ct = (count * sector_sz) / sizeof(ole_prop_t);
/* fix endianess of property catalog */
ole_prop_t *item = &ole_dir[i];
item->first_sector = le_read32(&item->first_sector);
- item->length = le_read32(&item->length);
+ item->data_sz = le_read32(&item->data_sz);
}
ole_root = ole_find_property("Root Entry");
/* read fat2 data sectors given by "Root Entry" */
- ole_root_sec_ct = (ole_root->length + (sector_size - 1)) / sector_size;
+ ole_root_sec_ct = (ole_root->data_sz + (sector_sz - 1)) / sector_sz;
ole_root_sec = xcalloc(ole_root_sec_ct + 1, sizeof(char *));
i = 0;
{
char *temp;
- temp = ole_root_sec[i++] = xmalloc(sector_size);
+ temp = ole_root_sec[i++] = xmalloc(sector_sz);
- ole_read_sector(sector, temp);
+ ole_read_sector(sector, temp, 1);
sector = ole_fat1[sector];
}
#ifdef OLE_DEBUG
static void msroute_rd_init(const char *fname)
{
- fin_name = xstrdup(fname);
- fin = xfopen(fname, "rb", MYNAME);
+ fin = gbfopen(fname, "rb", MYNAME);
ole_init();
}
{
ole_deinit();
- xfree(fin_name);
- fclose(fin);
+ gbfclose(fin);
}
static void msroute_read(void)
Name="VCCLCompilerTool"
Optimization="2"
InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="expatw,..\coldsync,."
+ AdditionalIncludeDirectories="expatw,."
PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_CONSOLE;__WIN32__;XML_UNICODE"
StringPooling="TRUE"
RuntimeLibrary="4"
<Tool
Name="VCCLCompilerTool"
Optimization="0"
- AdditionalIncludeDirectories="expatw,..\coldsync,."
+ AdditionalIncludeDirectories="expatw,."
PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;__WIN32__;_DEBUG;_CONSOLE;XML_UNICODE"
BasicRuntimeChecks="3"
RuntimeLibrary="5"
BrowseInformation="1"/>
</FileConfiguration>
</File>
+ <File
+ RelativePath="..\pdbfile.c">
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ BrowseInformation="1"/>
+ </FileConfiguration>
+ </File>
<File
RelativePath="..\polygon.c">
<FileConfiguration
</FileConfiguration>
</File>
</Filter>
- <Filter
- Name="Coldsync"
- Filter="">
- <File
- RelativePath="..\coldsync\pdb.c">
- <FileConfiguration
- Name="Release|Win32">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- ObjectFile=".\Release\Coldsync/"
- ProgramDataBaseFileName="Release\Coldsync/"/>
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- ObjectFile=".\Debug\Coldsync/"
- ProgramDataBaseFileName="Debug\Coldsync/"
- BrowseInformation="1"/>
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\coldsync\util.c">
- <FileConfiguration
- Name="Release|Win32">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- ObjectFile=".\Release\Coldsync/"
- ProgramDataBaseFileName="Release\Coldsync/"/>
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|Win32">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- BasicRuntimeChecks="3"
- ObjectFile=".\Debug\Coldsync/"
- ProgramDataBaseFileName="Debug\Coldsync/"
- BrowseInformation="1"/>
- </FileConfiguration>
- </File>
- </Filter>
<Filter
Name="ShapeLib"
Filter="">
<File
RelativePath="..\mapsend.h">
</File>
+ <File
+ RelativePath="..\pdbfile.h">
+ </File>
<File
RelativePath="..\queue.h">
</File>
<File
RelativePath="..\uuid.h">
</File>
- <Filter
- Name="Coldsync-Headers"
- Filter="">
- <File
- RelativePath="..\coldsync\config.h">
- </File>
- <File
- RelativePath="..\coldsync\palm.h">
- </File>
- <File
- RelativePath="..\coldsync\pdb.h">
- </File>
- <File
- RelativePath="..\coldsync\pconn\util.h">
- </File>
- </Filter>
<Filter
Name="Jeeps-Headers"
Filter="">
# PROP Ignore_Export_Lib 0\r
# PROP Target_Dir ""\r
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c\r
-# ADD CPP /nologo /W3 /WX /GX /O2 /I "expat" /I "..\coldsync" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "__WIN32__" /D VERSION=\"1.2.6_beta06232005_msvc\" /YX /FD /c\r
+# ADD CPP /nologo /W3 /WX /GX /O2 /I "expat" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "__WIN32__" /D VERSION=\"1.2.6_beta06232005_msvc\" /YX /FD /c\r
# ADD BASE RSC /l 0x409 /d "NDEBUG"\r
# ADD RSC /l 0x409 /d "NDEBUG"\r
BSC32=bscmake.exe\r
# PROP Ignore_Export_Lib 0\r
# PROP Target_Dir ""\r
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c\r
-# ADD CPP /nologo /W3 /WX /Gm /GX /ZI /Od /I "expat" /I "..\coldsync" /D "WIN32" /D "__WIN32__" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D VERSION=\"1.2.6_beta06232005_msvc\" /FR /YX /FD /GZ /c\r
+# ADD CPP /nologo /W3 /WX /Gm /GX /ZI /Od /I "expat" /D "WIN32" /D "__WIN32__" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D VERSION=\"1.2.6_beta06232005_msvc\" /FR /YX /FD /GZ /c\r
# ADD BASE RSC /l 0x409 /d "_DEBUG"\r
# ADD RSC /l 0x409 /d "_DEBUG"\r
BSC32=bscmake.exe\r
\r
!ENDIF \r
\r
-# End Source File\r
-# End Group\r
-# Begin Group "Coldsync"\r
-\r
-# PROP Default_Filter ""\r
-# Begin Source File\r
-\r
-SOURCE=..\coldsync\pdb.c\r
-\r
-!IF "$(CFG)" == "GPSBabel - Win32 Release"\r
-\r
-# PROP Intermediate_Dir "Release\Coldsync"\r
-\r
-!ELSEIF "$(CFG)" == "GPSBabel - Win32 Debug"\r
-\r
-# PROP Intermediate_Dir "Debug\Coldsync"\r
-\r
-!ENDIF \r
-\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\coldsync\util.c\r
-\r
-!IF "$(CFG)" == "GPSBabel - Win32 Release"\r
-\r
-# PROP Intermediate_Dir "Release\Coldsync"\r
-\r
-!ELSEIF "$(CFG)" == "GPSBabel - Win32 Debug"\r
-\r
-# PROP Intermediate_Dir "Debug\Coldsync"\r
-\r
-!ENDIF \r
-\r
# End Source File\r
# End Group\r
# Begin Group "ShapeLib"\r
# Begin Group "Header Files"\r
\r
# PROP Default_Filter "h;hpp;hxx;hm;inl"\r
-# Begin Group "Coldsync-Headers"\r
-\r
-# PROP Default_Filter ""\r
-# Begin Source File\r
-\r
-SOURCE=..\coldsync\config.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\coldsync\palm.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\coldsync\pdb.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\coldsync\pconn\util.h\r
-# End Source File\r
-# End Group\r
# Begin Group "Jeeps-Headers"\r
\r
# PROP Default_Filter ""\r
EnableIntrinsicFunctions="false"\r
FavorSizeOrSpeed="2"\r
WholeProgramOptimization="true"\r
- AdditionalIncludeDirectories="expat,..\coldsync,."\r
+ AdditionalIncludeDirectories="expat,."\r
PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_CONSOLE;__WIN32__;"\r
StringPooling="true"\r
ExceptionHandling="0"\r
<Tool\r
Name="VCCLCompilerTool"\r
Optimization="0"\r
- AdditionalIncludeDirectories="expat;..\coldsync;."\r
+ AdditionalIncludeDirectories="expat;."\r
PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;__WIN32__;_DEBUG;_CONSOLE;"\r
BasicRuntimeChecks="3"\r
RuntimeLibrary="1"\r
EnableIntrinsicFunctions="false"\r
FavorSizeOrSpeed="2"\r
WholeProgramOptimization="true"\r
- AdditionalIncludeDirectories="expatw;..\coldsync;."\r
+ AdditionalIncludeDirectories="expatw;."\r
PreprocessorDefinitions="XML_UNICODE=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_CONSOLE;__WIN32__;"\r
StringPooling="true"\r
ExceptionHandling="0"\r
RelativePath="..\formspec.c"\r
>\r
</File>\r
+ <File\r
+ RelativePath="..\g7towin.c"\r
+ >\r
+ </File>\r
<File\r
RelativePath="..\garmin.c"\r
>\r
RelativePath="..\garmin_fs.c"\r
>\r
</File>\r
+ <File\r
+ RelativePath="..\garmin_gpi.c"\r
+ >\r
+ </File>\r
<File\r
RelativePath="..\garmin_tables.c"\r
>\r
/>\r
</FileConfiguration>\r
</File>\r
+ <File\r
+ RelativePath="..\ggv_log.c"\r
+ >\r
+ </File>\r
<File\r
RelativePath="..\globals.c"\r
>\r
/>\r
</FileConfiguration>\r
</File>\r
+ <File\r
+ RelativePath="..\pdbfile.c"\r
+ >\r
+ </File>\r
<File\r
RelativePath="..\polygon.c"\r
>\r
RelativePath="..\vitosmt.c"\r
>\r
</File>\r
+ <File\r
+ RelativePath="..\vitovtt.c"\r
+ >\r
+ </File>\r
<File\r
RelativePath="..\vmem.c"\r
>\r
/>\r
</FileConfiguration>\r
</File>\r
+ <File\r
+ RelativePath="..\xhtmlent.c"\r
+ >\r
+ </File>\r
<File\r
RelativePath="..\xmlgeneric.c"\r
>\r
</FileConfiguration>\r
</File>\r
</Filter>\r
- <Filter\r
- Name="Coldsync"\r
- >\r
- <File\r
- RelativePath="..\coldsync\pdb.c"\r
- >\r
- <FileConfiguration\r
- Name="Release|Win32"\r
- >\r
- <Tool\r
- Name="VCCLCompilerTool"\r
- Optimization="2"\r
- AdditionalIncludeDirectories=""\r
- PreprocessorDefinitions=""\r
- ObjectFile=".\Release\Coldsync/"\r
- ProgramDataBaseFileName="Release\Coldsync/"\r
- />\r
- </FileConfiguration>\r
- <FileConfiguration\r
- Name="Debug|Win32"\r
- >\r
- <Tool\r
- Name="VCCLCompilerTool"\r
- Optimization="0"\r
- AdditionalIncludeDirectories=""\r
- PreprocessorDefinitions=""\r
- BasicRuntimeChecks="3"\r
- ObjectFile=".\Debug\Coldsync/"\r
- ProgramDataBaseFileName="Debug\Coldsync/"\r
- BrowseInformation="1"\r
- />\r
- </FileConfiguration>\r
- <FileConfiguration\r
- Name="Unicode|Win32"\r
- >\r
- <Tool\r
- Name="VCCLCompilerTool"\r
- Optimization="2"\r
- AdditionalIncludeDirectories=""\r
- PreprocessorDefinitions=""\r
- ObjectFile=".\Release\Coldsync/"\r
- ProgramDataBaseFileName="Release\Coldsync/"\r
- />\r
- </FileConfiguration>\r
- </File>\r
- <File\r
- RelativePath="..\coldsync\util.c"\r
- >\r
- <FileConfiguration\r
- Name="Release|Win32"\r
- >\r
- <Tool\r
- Name="VCCLCompilerTool"\r
- Optimization="2"\r
- AdditionalIncludeDirectories=""\r
- PreprocessorDefinitions=""\r
- ObjectFile=".\Release\Coldsync/"\r
- ProgramDataBaseFileName="Release\Coldsync/"\r
- />\r
- </FileConfiguration>\r
- <FileConfiguration\r
- Name="Debug|Win32"\r
- >\r
- <Tool\r
- Name="VCCLCompilerTool"\r
- Optimization="0"\r
- AdditionalIncludeDirectories=""\r
- PreprocessorDefinitions=""\r
- BasicRuntimeChecks="3"\r
- ObjectFile=".\Debug\Coldsync/"\r
- ProgramDataBaseFileName="Debug\Coldsync/"\r
- BrowseInformation="1"\r
- />\r
- </FileConfiguration>\r
- <FileConfiguration\r
- Name="Unicode|Win32"\r
- >\r
- <Tool\r
- Name="VCCLCompilerTool"\r
- Optimization="2"\r
- AdditionalIncludeDirectories=""\r
- PreprocessorDefinitions=""\r
- ObjectFile=".\Release\Coldsync/"\r
- ProgramDataBaseFileName="Release\Coldsync/"\r
- />\r
- </FileConfiguration>\r
- </File>\r
- </Filter>\r
<Filter\r
Name="shapelib"\r
>\r
RelativePath="..\defs.h"\r
>\r
</File>\r
+ <File\r
+ RelativePath="..\garmin_gpi.h"\r
+ >\r
+ </File>\r
<File\r
RelativePath="..\garmin_tables.h"\r
>\r
RelativePath="..\mapsend.h"\r
>\r
</File>\r
+ <File\r
+ RelativePath="..\pdbfile.h"\r
+ >\r
+ </File>\r
<File\r
RelativePath="..\queue.h"\r
>\r
RelativePath="..\quovadis.h"\r
>\r
</File>\r
- <Filter\r
- Name="Coldsync-Headers"\r
- >\r
- <File\r
- RelativePath="..\coldsync\config.h"\r
- >\r
- </File>\r
- <File\r
- RelativePath="..\coldsync\palm.h"\r
- >\r
- </File>\r
- <File\r
- RelativePath="..\coldsync\pdb.h"\r
- >\r
- </File>\r
- <File\r
- RelativePath="..\coldsync\pconn\util.h"\r
- >\r
- </File>\r
- </Filter>\r
<Filter\r
Name="Jeeps-Headers"\r
>\r
setlocal
-set include=%include%;expat;..\coldsync;c:\tools\c
+set include=%include%;expat;c:\tools\c
set SOURCEJEEPS=..\jeeps\gpsapp.c ..\jeeps\gpscom.c ..\jeeps\gpsmath.c ..\jeeps\gpsmem.c ..\jeeps\gpsprot.c ..\jeeps\gpsread.c ..\jeeps\gpsrqst.c ..\jeeps\gpssend.c ..\jeeps\gpsserial.c ..\jeeps\gpsusbread.c ..\jeeps\gpsusbsend.c ..\jeeps\gpsusbstub.c ..\jeeps\gpsusbwin.c ..\jeeps\gpsutil.c
set SOURCEMAG=..\maggeo.c ..\magnav.c ..\magproto.c
-set SOURCE=..\xmltag.c ..\strptime.c ..\trackfilter.c ..\gdb.c ..\bcr.c ..\discard.c ..\formspec.c ..\an1.c ..\arcdist.c ..\brauniger_iq.c ..\wbt-200.c ..\cetus.c ..\coastexp.c ..\coldsync\pdb.c ..\copilot.c ..\csv_util.c ..\delgpl.c ..\duplicate.c ..\easygps.c ..\filter_vecs.c ..\garmin.c ..\garmin_tables.c ..\gcdb.c ..\geo.c ..\geoniche.c ..\glogbook.c ..\google.c ..\gpilots.c ..\gpspilot.c ..\gpx.c ..\grtcirc.c ..\hiketech.c ..\holux.c ..\hsa_ndv.c ..\html.c ..\igc.c ..\internal_styles.c ..\kml.c ..\lowranceusr.c ..\main.c ..\mapopolis.c ..\mapsend.c ..\mapsource.c ..\mkshort.c ..\navicache.c ..\netstumbler.c ..\nmea.c ..\overlay.c ..\ozi.c ..\palmdoc.c ..\pathaway.c ..\pcx.c ..\polygon.c ..\position.c ..\psitrex.c ..\psp.c ..\queue.c ..\quovadis.c ..\reverse_route.c ..\route.c ..\saroute.c ..\shape.c ..\shapelib\dbfopen.c ..\shapelib\shpopen.c ..\smplrout.c ..\sort.c ..\stackfilter.c ..\tef_xml.c ..\text.c ..\tiger.c ..\tmpro.c ..\tomtom.c ..\tpg.c ..\util.c ..\util_crc.c ..\uuid.c ..\vcf.c ..\vecs.c ..\vitosmt.c ..\vmem.c ..\waypt.c ..\xcsv.c ..\xmlgeneric.c ..\fatal.c ..\globals.c ..\cet_util.c ..\cet.c ..\nmn5.c ..\nmn4.c ..\cst.c ..\msroute.c ..\stmwpp.c ..\ignrando.c ..\tpo.c
-cl /c ..\coldsync\util.c -Focoldsyncutil.obj
+set SOURCE=..\xmltag.c ..\strptime.c ..\trackfilter.c ..\gdb.c ..\bcr.c ..\discard.c ..\formspec.c ..\an1.c ..\arcdist.c ..\brauniger_iq.c ..\wbt-200.c ..\cetus.c ..\coastexp.c ..\copilot.c ..\csv_util.c ..\delgpl.c ..\duplicate.c ..\easygps.c ..\filter_vecs.c ..\garmin.c ..\garmin_tables.c ..\gcdb.c ..\geo.c ..\geoniche.c ..\glogbook.c ..\google.c ..\gpilots.c ..\gpspilot.c ..\gpx.c ..\grtcirc.c ..\hiketech.c ..\holux.c ..\hsa_ndv.c ..\html.c ..\igc.c ..\internal_styles.c ..\kml.c ..\lowranceusr.c ..\main.c ..\mapopolis.c ..\mapsend.c ..\mapsource.c ..\mkshort.c ..\navicache.c ..\netstumbler.c ..\nmea.c ..\overlay.c ..\ozi.c ..\palmdoc.c ..\pathaway.c ..\pcx.c ..\polygon.c ..\position.c ..\psitrex.c ..\psp.c ..\queue.c ..\quovadis.c ..\reverse_route.c ..\route.c ..\saroute.c ..\shape.c ..\shapelib\dbfopen.c ..\shapelib\shpopen.c ..\smplrout.c ..\sort.c ..\stackfilter.c ..\tef_xml.c ..\text.c ..\tiger.c ..\tmpro.c ..\tomtom.c ..\tpg.c ..\util.c ..\util_crc.c ..\uuid.c ..\vcf.c ..\vecs.c ..\vitosmt.c ..\vmem.c ..\waypt.c ..\xcsv.c ..\xmlgeneric.c ..\fatal.c ..\globals.c ..\cet_util.c ..\cet.c ..\nmn5.c ..\nmn4.c ..\cst.c ..\msroute.c ..\stmwpp.c ..\ignrando.c ..\tpo.c
cl /c ..\gpsutil.c -Fogpsutil2.obj
-cl /Fegpsbabel.exe %source% %sourcejeeps% %sourcemag% coldsyncutil.obj gpsutil2.obj -DVERSION=\"1\" -D__WIN32__ -DWIN32_LEAN_AND_MEAN -DNO_USB Expat\libexpat.lib
+cl /Fegpsbabel.exe %source% %sourcejeeps% %sourcemag% gpsutil2.obj -DVERSION=\"1\" -D__WIN32__ -DWIN32_LEAN_AND_MEAN -DNO_USB Expat\libexpat.lib
endlocal
static waypoint *wpt_tmp;
-static FILE *fd;
-static FILE *ofd;
+static gbfile *fin, *fout;
static char *noretired = NULL;
static void
nav_rd_init(const char *fname)
{
- fd = xfopen(fname, "r", MYNAME);
+ fin = gbfopen(fname, "r", MYNAME);
psr = XML_ParserCreate(NULL);
if (!psr) {
int len;
char buf[MY_CBUF];
- while ((len = fread(buf, 1, sizeof(buf), fd))) {
- if (!XML_Parse(psr, buf, len, feof(fd))) {
+ while ((len = gbfread(buf, 1, sizeof(buf), fin))) {
+ if (!XML_Parse(psr, buf, len, gbfeof(fin))) {
fatal(MYNAME ":Parse error at %d: %s\n",
(int) XML_GetCurrentLineNumber(psr),
XML_ErrorString(XML_GetErrorCode(psr)));
static void
nav_rd_deinit(void)
{
- fclose(fd);
+ gbfclose(fin);
}
static void
nav_wr_init(const char *fname)
{
fatal(MYNAME ": Does not support writing Navicache files.\n");
- ofd = xfopen(fname, "w", MYNAME);
+ fout = gbfopen(fname, "w", MYNAME);
}
static void
nav_wr_deinit(void)
{
- fclose(ofd);
+ gbfclose(fout);
}
static void
#include "defs.h"
#include "gbser.h"
#include "strptime.h"
+#include "jeeps/gpsmath.h"
/**********************************************************
static short_handle mkshort_handle;
static preferred_posn_type posn_type;
static struct tm tm;
-static waypoint * curr_waypt = NULL;
-static waypoint * last_waypt = NULL;
+static waypoint *curr_waypt;
+static waypoint *last_waypt;
static void * gbser_handle;
static const char *posn_fname;
static queue pcmpt_head;
#define MYNAME "nmea"
-static const double kts2mps =0.51444444444444444; /* knots to m/s */
-static const double kmh2mps =0.27777777777777778; /* km/h to m/s */
-
-static char *dogprmc = NULL;
-static char *dogpgga = NULL;
-static char *dogpvtg = NULL;
-static char *dogpgsa = NULL;
-static char *snlenopt = NULL;
-static char *optdate = NULL;
-static char *getposnarg = NULL;
-static char *opt_sleep = NULL;
-static char *opt_baud = NULL;
-static long sleepus = 0;
+static char *opt_gprmc;
+static char *opt_gpgga;
+static char *opt_gpvtg;
+static char *opt_gpgsa;
+static char *snlenopt;
+static char *optdate;
+static char *getposnarg;
+static char *opt_sleep;
+static char *opt_baud;
+static char *opt_append;
+
+static long sleepus;
static int getposn;
+static int append_output;
-static time_t last_time = -1;
+static time_t last_time;
static double last_read_time; /* Last timestamp of GGA or PRMC */
+static int datum;
static waypoint * nmea_rd_posn(posn_status *);
static void nmea_rd_posn_init(const char *fname);
arglist_t nmea_args[] = {
{"snlen", &snlenopt, "Max length of waypoint name to write", "6", ARGTYPE_INT, "1", "64" },
- {"gprmc", &dogprmc, "Read/write GPRMC sentences", "1", ARGTYPE_BOOL, ARG_NOMINMAX },
- {"gpgga", &dogpgga, "Read/write GPGGA sentences", "1", ARGTYPE_BOOL, ARG_NOMINMAX },
- {"gpvtg", &dogpvtg, "Read/write GPVTG sentences", "1", ARGTYPE_BOOL, ARG_NOMINMAX },
- {"gpgsa", &dogpgsa, "Read/write GPGSA sentences", "1", ARGTYPE_BOOL, ARG_NOMINMAX },
+ {"gprmc", &opt_gprmc, "Read/write GPRMC sentences", "1", ARGTYPE_BOOL, ARG_NOMINMAX },
+ {"gpgga", &opt_gpgga, "Read/write GPGGA sentences", "1", ARGTYPE_BOOL, ARG_NOMINMAX },
+ {"gpvtg", &opt_gpvtg, "Read/write GPVTG sentences", "1", ARGTYPE_BOOL, ARG_NOMINMAX },
+ {"gpgsa", &opt_gpgsa, "Read/write GPGSA sentences", "1", ARGTYPE_BOOL, ARG_NOMINMAX },
{"date", &optdate, "Complete date-free tracks with given date (YYYYMMDD).", NULL, ARGTYPE_INT, ARG_NOMINMAX },
{ "get_posn", &getposnarg, "Return current position as a waypoint",
NULL, ARGTYPE_BOOL, ARG_NOMINMAX},
{"pause", &opt_sleep, "Decimal seconds to pause between groups of strings", NULL, ARGTYPE_INT, ARG_NOMINMAX },
+ {"append_positioning", &opt_append, "Append realtime positioning data to the output file instead of truncating", "0", ARGTYPE_BOOL, ARG_NOMINMAX },
{"baud", &opt_baud, "Speed in bits per second of serial port (baud=4800)", NULL, ARGTYPE_INT, ARG_NOMINMAX },
ARG_TERMINATOR
};
+#define CHECK_BOOL(a) if (a && (*a == '0')) a = NULL
+
/*
* Slightly different than the Magellan checksum fn.
*/
return x;
}
+static void
+nmea_add_wpt(waypoint *wpt, route_head *trk)
+{
+ if (datum != DATUM_WGS84) {
+ double lat, lon, alt;
+ GPS_Math_Known_Datum_To_WGS84_M(
+ wpt->latitude, wpt->longitude, 0,
+ &lat, &lon, &alt, datum);
+ wpt->latitude = lat;
+ wpt->longitude = lon;
+ }
+ if (trk != NULL) track_add_wpt(trk, wpt);
+ else waypt_add(wpt);
+}
+
static void
nmea_rd_init(const char *fname)
{
curr_waypt = NULL;
last_waypt = NULL;
+ last_time = -1;
+ datum = DATUM_WGS84;
+
+ CHECK_BOOL(opt_gprmc);
+ CHECK_BOOL(opt_gpgga);
+ CHECK_BOOL(opt_gpvtg);
+ CHECK_BOOL(opt_gpgsa);
+
QUEUE_INIT(&pcmpt_head);
if (getposnarg) {
xfree(wpt->shortname);
}
wpt->shortname = xstrdup("Position");
- waypt_add(wpt);
+ nmea_add_wpt(wpt, NULL);
return;
}
static void
nmea_wr_init(const char *portname)
{
- file_out = gbfopen(portname, "w+", MYNAME);
+ CHECK_BOOL(opt_gprmc);
+ CHECK_BOOL(opt_gpgga);
+ CHECK_BOOL(opt_gpvtg);
+ CHECK_BOOL(opt_gpgsa);
+ append_output = atoi(opt_append);
+
+ file_out = gbfopen(portname, append_output ? "a+" : "w+", MYNAME);
+
+ sleepus = -1;
if ( opt_sleep ) {
if ( *opt_sleep ) {
sleepus = 1e6 * atof(opt_sleep);
sleepus = -1;
}
}
-
+
mkshort_handle = mkshort_new_handle();
setshort_length(mkshort_handle, atoi(snlenopt));
}
if (posn_type == gpgga) {
/* capture useful data update and exit */
if (curr_waypt) {
- if (curr_waypt->speed<=0)
- curr_waypt->speed = speed*kts2mps;
- if (curr_waypt->course<=0)
- curr_waypt->course = course;
+ if (! WAYPT_HAS(curr_waypt, speed))
+ WAYPT_SET(curr_waypt, speed, KNOTS_TO_MPS(speed));
+ if (! WAYPT_HAS(curr_waypt, course))
+ WAYPT_SET(curr_waypt, course, course);
/* The change of date wasn't recorded when
* going from 235959 to 000000. */
nmea_set_waypoint_time(curr_waypt, &tm);
waypt = waypt_new();
- waypt->speed = speed*kts2mps;
+ WAYPT_SET(waypt, speed, KNOTS_TO_MPS(speed));
- waypt->course = course;
+ WAYPT_SET(waypt, course, course);
nmea_set_waypoint_time(waypt, &tm);
waypt->shortname = xstrdup(sname);
curr_waypt = NULL; /* waypoints won't be updated with GPS fixes */
- waypt_add(waypt);
-
+ nmea_add_wpt(waypt, NULL);
}
static void
&course,&ct,&magcourse,&cm,&speed_n,&cn,&speed_k,&ck);
if (curr_waypt) {
- curr_waypt->course = course;
+ WAYPT_SET(curr_waypt, course, course);
if (speed_k>0)
- curr_waypt->speed = speed_k*kmh2mps;
+ WAYPT_SET(curr_waypt, speed, KPH_TO_MPS(speed_k))
else
- curr_waypt->speed = speed_n*kts2mps;
+ WAYPT_SET(curr_waypt, speed, KNOTS_TO_MPS(speed_n));
}
track_add_head(trk_head);
QUEUE_FOR_EACH(&pcmpt_head, elem, tmp) {
waypoint *wpt = (waypoint *) dequeue(elem);
- track_add_wpt(trk_head, wpt);
+ nmea_add_wpt(wpt, trk_head);
}
}
}
int ckval, ckcmp;
char *tbuf = lrtrim(ibuf);
+ /*
+ * GISTEQ PhotoTracker (stupidly) puts a bogus field in front
+ * of the line. Look for it and toss it.
+ */
+ if (0 == strncmp(tbuf, "---,", 4)) tbuf += 4;
+
if (*tbuf != '$') return;
ck = strrchr(tbuf, '*');
if (0 == strncmp(tbuf, "$GPWPL,", 7)) {
gpwpl_parse(tbuf);
} else
- if (dogpgga && (0 == strncmp(tbuf, "$GPGGA,", 7))) {
+ if (opt_gpgga && (0 == strncmp(tbuf, "$GPGGA,", 7))) {
posn_type = gpgga;
gpgga_parse(tbuf);
} else
- if (dogprmc && (0 == strncmp(tbuf, "$GPRMC,", 7))) {
+ if (opt_gprmc && (0 == strncmp(tbuf, "$GPRMC,", 7))) {
if (posn_type != gpgga) {
posn_type = gprmc;
}
if (0 == strncmp(tbuf, "$PCMPT,", 7)) {
pcmpt_parse(tbuf);
} else
- if (dogpvtg && (0 == strncmp(tbuf, "$GPVTG,",7))) {
+ if (opt_gpvtg && (0 == strncmp(tbuf, "$GPVTG,",7))) {
gpvtg_parse(tbuf); /* speed and course */
} else
- if (dogpgsa && (0 == strncmp(tbuf, "$GPGSA,",7))) {
+ if (opt_gpgsa && (0 == strncmp(tbuf, "$GPGSA,",7))) {
gpgsa_parse(tbuf); /* GPS fix */
}
char *ibuf;
char *ck;
double lt = -1;
+ int line = -1;
posn_type = gp_unknown;
trk_head = NULL;
curr_waypt = NULL;
while ((ibuf = gbfgetstr(file_in))) {
+ char *sdatum, *cx;
+
+ line++;
+
+ if ((line == 0) && (case_ignore_strncmp(ibuf, "@SonyGPS/ver", 12) == 0)) {
+ /* special hack for Sony GPS-CS1 files:
+ they are fully (?) nmea compatible, but come with a header line like
+ "@Sonygps/ver1.0/wgs-84". */
+
+ /* Check the GPS datum */
+ cx = strchr(&ibuf[12], '/');
+ if (cx != NULL) {
+ sdatum = cx + 1;
+ datum = GPS_Lookup_Datum_Index(sdatum);
+ if (datum < 0)
+ fatal(MYNAME "/SonyGPS: Unsupported datum \"%s\" in source data!\n", sdatum);
+ }
+ continue;
+ }
+
nmea_parse_one_line(ibuf);
if (lt != last_read_time && curr_waypt && trk_head) {
if (curr_waypt != last_waypt) {
- track_add_wpt(trk_head, curr_waypt);
+ nmea_add_wpt(curr_waypt, trk_head);
last_waypt = curr_waypt;
}
lt = last_read_time;
fix='0';
}
- if (dogprmc) {
+ if (opt_gprmc) {
snprintf(obuf, sizeof(obuf), "GPRMC,%06d,%c,%08.3f,%c,%09.3f,%c,%.2f,%.2f,%06d,,",
(int) hms,
fix=='0' ? 'V' : 'A',
fabs(lat), lat < 0 ? 'S' : 'N',
fabs(lon), lon < 0 ? 'W' : 'E',
- (wpt->speed>0)?(wpt->speed / kts2mps):(0),
- (wpt->course>=0)?(wpt->course):(0),
+ WAYPT_HAS(wpt, speed) ? MPS_TO_KNOTS(wpt->speed):(0),
+ WAYPT_HAS(wpt, course) ? (wpt->course):(0),
(int) ymd);
cksum = nmea_cksum(obuf);
gbfprintf(file_out, "$%s*%02X\n", obuf, cksum);
}
- if (dogpgga) {
+ if (opt_gpgga) {
snprintf(obuf, sizeof(obuf), "GPGGA,%06d,%08.3f,%c,%09.3f,%c,%c,%02d,%.1f,%.3f,M,0.0,M,,",
(int) hms,
fabs(lat), lat < 0 ? 'S' : 'N',
cksum = nmea_cksum(obuf);
gbfprintf(file_out, "$%s*%02X\n", obuf, cksum);
}
- if ((dogpvtg) && ((wpt->course>=0) || (wpt->speed>0))) {
+ if ((opt_gpvtg) && (WAYPT_HAS(wpt, course) || WAYPT_HAS(wpt, speed))) {
snprintf(obuf,sizeof(obuf),"GPVTG,%.3f,T,0,M,%.3f,N,%.3f,K",
- (wpt->course>=0)?(wpt->course):(0),
- (wpt->speed>0)?(wpt->speed / kts2mps):(0),
- (wpt->speed>0)?(wpt->speed / kmh2mps):(0) );
+ WAYPT_HAS(wpt, course) ? (wpt->course):(0),
+ WAYPT_HAS(wpt, speed) ? MPS_TO_KNOTS(wpt->speed):(0),
+ WAYPT_HAS(wpt, speed) ? MPS_TO_KPH(wpt->speed):(0) );
cksum = nmea_cksum(obuf);
gbfprintf(file_out, "$%s*%02X\n", obuf, cksum);
}
- if ((dogpgsa) && (wpt->fix!=fix_unknown)) {
+ if ((opt_gpgsa) && (wpt->fix!=fix_unknown)) {
switch (wpt->fix)
{
track_disp_all(nmea_track_init, NULL, nmea_trackpt_pr);
}
+static void
+nmea_wr_posn_init(const char *fname)
+{
+ nmea_wr_init(fname);
+}
+
+static void
+nmea_wr_posn(waypoint *wpt)
+{
+ nmea_trackpt_pr(wpt);
+}
+
+static void
+nmea_wr_posn_deinit(void)
+{
+// nmea_wr_deinit();
+}
+
+
ff_vecs_t nmea_vecs = {
ff_type_file,
{ ff_cap_read | ff_cap_write, ff_cap_read | ff_cap_write, ff_cap_none},
NULL,
nmea_args,
CET_CHARSET_ASCII, 0, /* CET-REVIEW */
- { nmea_rd_posn_init, nmea_rd_posn, nmea_rd_deinit, NULL, NULL, NULL }
+ { nmea_rd_posn_init, nmea_rd_posn, nmea_rd_deinit,
+ nmea_wr_posn_init, nmea_wr_posn, nmea_wr_posn_deinit }
};
/*
static int track_out_count;
static int route_out_count;
static int route_wpt_count;
+static int new_track;
static char *snlenopt = NULL;
static char *snwhiteopt = NULL;
static char *snuniqueopt = NULL;
static char *wptfgcolor = NULL;
static char *wptbgcolor = NULL;
+static char *pack_opt = NULL;
static
arglist_t ozi_args[] = {
+ {"pack", &pack_opt, "Write all tracks into one file",
+ NULL, ARGTYPE_BOOL, ARG_NOMINMAX},
{"snlen", &snlenopt, "Max synthesized shortname length",
"32", ARGTYPE_INT, "1", NULL},
{"snwhite", &snwhiteopt, "Allow whitespace synth. shortnames",
static void
ozi_openfile(char *fname) {
- char *c, *tmpname;
+ char *c, *cx, *tmpname;
char *ozi_extensions[] = {0, "plt", "wpt", "rte"};
char buff[32];
*/
if (0 == strcmp(fname, "-")) {
- file_out = gbfopen(fname, "wb", MYNAME);
+ if (! file_out) {
+ file_out = gbfopen(fname, "wb", MYNAME);
+ }
return;
}
buff[0] = '\0';
}
- /* allocate more than enough room for new filename */
- tmpname = (char *) xcalloc(1, strlen(fname) +
- strlen(buff) +
- strlen(ozi_extensions[ozi_objective]) +
- 2); /* . (dot) plus null term */
-
- strcpy(tmpname, fname);
-
- /* locate and remove file extension */
- c = strrchr(tmpname, '.');
-
- if (c)
- *c = '\0';
-
- /* append the -xx sequence number for tracks if needed */
- strcat(tmpname + strlen(tmpname), buff);
-
- strcat(tmpname, ".");
-
- /* append the extension after the "." */
- strcat(tmpname, ozi_extensions[ozi_objective]);
+ /* remove extension and add buff + ozi's extension */
+ c = strrchr(fname, '.');
+ if (c && (cx = strrchr(fname, '/')) && (cx > c)) c = NULL;
+ if (c && (cx = strrchr(fname, '\\')) && (cx > c)) c = NULL;
+ if (c == NULL) c = fname + strlen(fname);
+ xasprintf(&tmpname, "%*.*s%s.%s", c - fname, c - fname, fname, buff, ozi_extensions[ozi_objective]);
/* re-open file_out with the new filename */
if (file_out) {
"0,2,255,%s,0,0,2,8421376\r\n"
"0\r\n";
- ozi_openfile(ozi_ofname);
- gbfprintf(file_out, ozi_trk_header,
- rte->rte_name ? rte->rte_name : "ComplimentsOfGPSBabel");
+ if ((! pack_opt) || (track_out_count == 0)) {
+ ozi_openfile(ozi_ofname);
+ gbfprintf(file_out, ozi_trk_header,
+ rte->rte_name ? rte->rte_name : "ComplimentsOfGPSBabel");
+ }
track_out_count++;
+ new_track = 1;
}
static void
alt_feet = METERS_TO_FEET(waypointp->altitude);
}
- gbfprintf(file_out, "%.6f,%.6f,0,%.0f,%.5f,,\r\n",
- waypointp->latitude, waypointp->longitude, alt_feet, ozi_time);
+ gbfprintf(file_out, "%.6f,%.6f,%d,%.0f,%.5f,,\r\n",
+ waypointp->latitude, waypointp->longitude, new_track,
+ alt_feet, ozi_time);
+
+ new_track = 0;
}
static void
setshort_badchars(mkshort_handle, "\",");
}
-
+ file_out = NULL;
}
static void
break;
case 13:
/* proximity distance - meters */
- wpt_tmp->proximity = atof(str);
+ WAYPT_SET(wpt_tmp, proximity, atof(str));
break;
case 14:
/* altitude in feet */
"%d,%s,%.6f,%.6f,%.5f,%d,%d,%d,%d,%d,%s,%d,%d,",
index, shortname, wpt->latitude, wpt->longitude, ozi_time, 0,
1, 3, fs->fgcolor, fs->bgcolor, description, 0, 0);
- if (wpt->proximity > 0)
+ if (WAYPT_HAS(wpt, proximity) && (wpt->proximity > 0))
gbfprintf(file_out, "%.1f,", wpt->proximity);
else
gbfprintf(file_out,"0,");
#if PDBFMTS_ENABLED
#include "jeeps/gpsmath.h"
#include <ctype.h>
-#include "coldsync/palm.h"
-#include "coldsync/pdb.h"
+#include "pdbfile.h"
-static FILE *file_out;
+static pdbfile *file_out;
static short_handle mkshort_handle;
static short_handle mkshort_bookmark_handle;
static const char *out_fname;
-static struct pdb *opdb;
-static struct pdb_record *opdb_rec;
static char *suppresssep = NULL;
static char *dbname = NULL;
static char *bmid = NULL;
static char *includelogs = NULL;
-static int ct = 1;
-static int offset = 0;
+static int ct;
+static int offset;
static char *palm_encrypt;
--recs;
}
- opdb_rec = new_Record (0, 0, 0,
- (uword) (sizeof(struct doc_record0)+sizeof(short)*(ct-1)), (const ubyte *)rec0);
+ pdb_write_rec(file_out, 0, 0, 0, (void *)rec0, sizeof(struct doc_record0) + sizeof(short)*(ct-1));
- if (opdb_rec == NULL) {
- fatal(MYNAME ": libpdb couldn't create summary record\n");
- }
-
- if (pdb_InsertRecord(opdb, NULL, opdb_rec)) {
- fatal(MYNAME ": libpdb couldn't insert summary record\n");
- }
xfree(rec0);
}
memset( rec.text, 0, 16 );
strncpy( rec.text, oldmark->text, 16 );
- opdb_rec = new_Record( 0, 0, ct++,
- sizeof(struct bookmark_record),
- (const ubyte *)&rec );
- if (opdb_rec == NULL) {
- fatal(MYNAME ": libpdb couldn't create bookmark record\n");
- }
-
- if (pdb_AppendRecord(opdb, opdb_rec)) {
- fatal(MYNAME ": libpdb couldn't append bookmark record\n");
- }
+ pdb_write_rec(file_out, 0, 0, ct++, (void *)&rec, sizeof(struct bookmark_record));
xfree( oldmark );
}
pd_compress( &buf );
- opdb_rec = new_Record (0, 0, ct++, (uword) buf.len, (const ubyte *)buf.data);
-
- if (opdb_rec == NULL) {
- fatal(MYNAME ": libpdb couldn't create record\n");
- }
-
- if (pdb_AppendRecord(opdb, opdb_rec)) {
- fatal(MYNAME ": libpdb couldn't append record\n");
- }
-
+ pdb_write_rec(file_out, 0, 0, ct++, (void *)buf.data, buf.len);
}
static void create_bookmark( char *bmtext ) {
static void
wr_init(const char *fname)
{
- file_out = xfopen(fname, "wb", MYNAME);
+ file_out = pdb_create(fname, MYNAME);
out_fname = fname;
mkshort_handle = mkshort_new_handle();
static void
wr_deinit(void)
{
- fclose(file_out);
+ pdb_close(file_out);
mkshort_del_handle(&mkshort_handle);
mkshort_del_handle(&mkshort_bookmark_handle);
docprintf(50, "---------------------------\n");
else
docprintf(10, "\n");
-
-
}
static void
data_write(void)
{
-
- if (NULL == (opdb = new_pdb())) {
- fatal (MYNAME ": new_pdb failed\n");
- }
-
if ( dbname ) {
- strncpy( opdb->name, dbname, PDB_DBNAMELEN );
+ strncpy( file_out->name, dbname, PDB_DBNAMELEN );
}
else {
- strncpy(opdb->name, out_fname, PDB_DBNAMELEN);
+ strncpy(file_out->name, out_fname, PDB_DBNAMELEN);
}
- opdb->name[PDB_DBNAMELEN-1] = 0;
- opdb->attributes = PDB_ATTR_BACKUP;
- opdb->ctime = opdb->mtime = current_time() + 2082844800U;
- opdb->type = DOC_TYPE;
- opdb->creator = DOC_CREATOR;
- opdb->version = 1;
+ file_out->name[PDB_DBNAMELEN-1] = 0;
+ file_out->attr = PDB_FLAG_BACKUP;
+ file_out->ctime = file_out->mtime = current_time() + 2082844800U;
+ file_out->type = DOC_TYPE;
+ file_out->creator = DOC_CREATOR;
+ file_out->version = 1;
if (! suppresssep)
docprintf(50, "---------------------------\n");
waypt_disp_all(palmdoc_disp);
docfinish();
- pdb_Write(opdb, fileno(file_out));
}
#include <ctype.h>
#include "defs.h"
#if PDBFMTS_ENABLED
-#include "coldsync/palm.h"
-#include "coldsync/pdb.h"
#include "csv_util.h"
+#include "pdbfile.h"
#include "strptime.h"
#define MYNAME "pathaway"
#define PPDB_MAGIC_WPT 0x506f4c69 /* PoLi */
#define PPDB_MAGIC 0x4b6e5772 /* KwNr */
-static FILE *fd_in, *fd_out;
-static struct pdb *pdb_in, *pdb_out;
-static char *fname_in, *fname_out;
+static pdbfile *file_in, *file_out;
+static char *fname_out;
static short_handle mkshort_handle;
static gpsdata_type ppdb_type;
static unsigned char german_release = 0;
static char *datefmt;
+static int ct;
typedef struct ppdb_appdata
{
} ppdb_appdata_t;
#define PPDB_APPINFO_SIZE sizeof(struct ppdb_appdata)
+static ppdb_appdata_t *appinfo;
static char *opt_dbname = NULL;
static char *opt_deficon = NULL;
}
static
-int ppdb_read_wpt(const struct pdb *pdb_in, const struct pdb_record *pdb_rec, route_head *head, int isRoute)
+int ppdb_read_wpt(route_head *head, int isRoute)
{
char *data, *str;
double altfeet;
struct tm tm;
- for (pdb_rec = pdb_in->rec_index.rec; pdb_rec; pdb_rec=pdb_rec->next)
- {
+ while (pdb_read_rec(file_in, NULL, NULL, NULL, (void *)&data) >= 0) {
waypoint *wpt_tmp = waypt_new();
int line = 0;
+ char *tmp = data;
- data = (char *) pdb_rec->data;
- str = csv_lineparse(data, ",", """", line++);
-
- while (str != NULL)
- {
+ while ((str = csv_lineparse(tmp, ",", """", line++))) {
+ tmp = NULL;
switch(line)
{
case 1:
break;
}
- str = csv_lineparse(NULL, ",", """", line++);
}
if (head && isRoute )
static void ppdb_rd_init(const char *fname)
{
- fname_in = xstrdup(fname);
str_pool_init();
- fd_in = xfopen(fname, "rb", MYNAME);
+ file_in = pdb_open(fname, MYNAME);
+ ct = 0;
if (opt_date)
datefmt = convert_human_date_format(opt_date);
static void ppdb_rd_deinit(void)
{
- fclose(fd_in);
+ pdb_close(file_in);
str_pool_deinit();
- xfree(fname_in);
if (datefmt) xfree(datefmt);
}
static void ppdb_read(void)
{
- struct pdb_record *pdb_rec = NULL;
ppdb_appdata_t *info = NULL;
route_head *track_head, *route_head;
const char *descr = NULL;
- if (NULL == (pdb_in = pdb_Read(fileno(fd_in))))
- fatal(MYNAME ": pdb_Read failed.\n");
-
- if (pdb_in->creator != PPDB_MAGIC) /* identify the database */
+ if (file_in->creator != PPDB_MAGIC) /* identify the database */
fatal(MYNAME ": Not a PathAway pdb file.\n");
- if (pdb_in->version != 3) /* Currently we support only version 3 */
- fatal(MYNAME ": This file is from an untested version (%d) of PathAway and is unsupported.\n", pdb_in->version);
+ if (file_in->version != 3) /* Currently we support only version 3 */
+ fatal(MYNAME ": This file is from an untested version (%d) of PathAway and is unsupported.\n", file_in->version);
- if ((pdb_in->appinfo_len > 0) && (pdb_in->appinfo != NULL))
+ if ((file_in->appinfo_len > 0) && (file_in->appinfo != NULL))
{
- info = (ppdb_appdata_t *) pdb_in->appinfo;
+ info = (ppdb_appdata_t *) file_in->appinfo;
descr = info->vehicleStr;
}
- switch(pdb_in->type)
+ switch(file_in->type)
{
case PPDB_MAGIC_TRK:
ppdb_type = trkdata; /* as default */
case trkdata:
track_head = route_head_alloc();
track_add_head(track_head);
- track_head->rte_name = xstrdup(pdb_in->name);
- ppdb_read_wpt(pdb_in, pdb_rec, track_head, 0);
+ track_head->rte_name = xstrdup(file_in->name);
+ ppdb_read_wpt(track_head, 0);
break;
case rtedata:
route_head = route_head_alloc();
route_add_head(route_head);
- route_head->rte_name = xstrdup(pdb_in->name);
- ppdb_read_wpt(pdb_in, pdb_rec, route_head, 1);
+ route_head->rte_name = xstrdup(file_in->name);
+ ppdb_read_wpt(route_head, 1);
break;
case wptdata:
- ppdb_read_wpt(pdb_in, pdb_rec, NULL, 0);
+ ppdb_read_wpt(NULL, 0);
break;
case posndata:
fatal(MYNAME ": Realtime positioning not supported.\n");
break;
}
-
- free_pdb(pdb_in);
}
/* ============================================================================================
fname_out = xstrdup(fname);
str_pool_init();
- fd_out = xfopen(fname, "wb", MYNAME);
+ file_out = pdb_create(fname, MYNAME);
mkshort_handle = mkshort_new_handle();
+ ct = 0;
+ appinfo = NULL;
if (global_opts.synthesize_shortnames != 0)
{
static void ppdb_wr_deinit(void)
{
mkshort_del_handle(&mkshort_handle);
- fclose(fd_out);
+ pdb_close(file_out);
str_pool_deinit();
xfree(fname_out);
if (datefmt) xfree(datefmt);
+ if (appinfo) xfree(appinfo);
}
/*
char *buff, *tmp;
char latdir, longdir;
int len;
- struct pdb_record *rec;
- static int ct;
struct tm tm;
buff = xcalloc(REC_SIZE, 1);
buff = ppdb_strcat(buff, tmp, "", &len);
len = strlen(buff) + 1;
- rec = new_Record(0, 0, (udword)ct++, (uword)len, (const ubyte *) buff);
-
- if (rec == NULL)
- fatal(MYNAME ": libpdb couldn't create record\n");
-
- if (pdb_AppendRecord(pdb_out, rec))
- fatal(MYNAME ": libpdb couldn't append record\n");
+ pdb_write_rec(file_out, 0, 0, ct++, buff, len);
xfree(buff);
}
* track and route write callbacks
*/
-static void ppdb_track_header(const route_head *rte)
-{
-}
-
-static void ppdb_track_trailer(const route_head *rte)
-{
-}
-
-
static void ppdb_write(void)
{
- ppdb_appdata_t *appinfo = NULL;
- if (NULL == (pdb_out = new_pdb()))
- fatal(MYNAME ": new_pdb failed\n");
if (opt_dbname)
- strncpy(pdb_out->name, opt_dbname, PDB_DBNAMELEN);
+ strncpy(file_out->name, opt_dbname, PDB_DBNAMELEN);
- pdb_out->name[PDB_DBNAMELEN-1] = 0;
- pdb_out->attributes = PDB_ATTR_BACKUP;
- pdb_out->ctime = pdb_out->mtime = current_time() + 2082844800U;
- pdb_out->creator = PPDB_MAGIC;
- pdb_out->version = 3;
+ file_out->attr = PDB_FLAG_BACKUP;
+ file_out->ctime = file_out->mtime = current_time() + 2082844800U;
+ file_out->creator = PPDB_MAGIC;
+ file_out->version = 3;
if (global_opts.objective != wptdata) /* Waypoint target do not need appinfo block */
{
- appinfo = xcalloc(PPDB_APPINFO_SIZE, 1);
-
- pdb_out->appinfo = (void *)appinfo;
- pdb_out->appinfo_len = PPDB_APPINFO_SIZE;
+ appinfo = xcalloc(1, sizeof(*appinfo));
+ file_out->appinfo = (void *)appinfo;
+ file_out->appinfo_len = PPDB_APPINFO_SIZE;
}
switch(global_opts.objective) /* Only one target is possible */
{
case wptdata:
- if (opt_dbname == NULL) strncpy(pdb_out->name, "PathAway Waypoints", PDB_DBNAMELEN);
- pdb_out->type = PPDB_MAGIC_WPT;
+ if (opt_dbname == NULL) strncpy(file_out->name, "PathAway Waypoints", PDB_DBNAMELEN);
+ file_out->type = PPDB_MAGIC_WPT;
waypt_disp_all(ppdb_write_wpt);
break;
case trkdata:
- if (opt_dbname == NULL) strncpy(pdb_out->name, "PathAway Track", PDB_DBNAMELEN);
- pdb_out->type = PPDB_MAGIC_TRK;
+ if (opt_dbname == NULL) strncpy(file_out->name, "PathAway Track", PDB_DBNAMELEN);
+ file_out->type = PPDB_MAGIC_TRK;
appinfo->dataBaseSubType = 0;
- track_disp_all(ppdb_track_header, ppdb_track_trailer, ppdb_write_wpt);
+ track_disp_all(NULL, NULL, ppdb_write_wpt);
break;
case rtedata:
- if (opt_dbname == NULL) strncpy(pdb_out->name, "PathAway Route", PDB_DBNAMELEN);
- pdb_out->type = PPDB_MAGIC_TRK;
+ if (opt_dbname == NULL) strncpy(file_out->name, "PathAway Route", PDB_DBNAMELEN);
+ file_out->type = PPDB_MAGIC_TRK;
appinfo->dataBaseSubType = 1;
- route_disp_all(ppdb_track_header, ppdb_track_trailer, ppdb_write_wpt);
+ route_disp_all(NULL, NULL, ppdb_write_wpt);
break;
case posndata:
fatal(MYNAME ": Realtime positioning not supported.\n");
break;
}
-
- pdb_Write(pdb_out, fileno(fd_out));
-
- if (appinfo != NULL) xfree(appinfo);
}
{"deficon", &deficon, "Default icon name", "Waypoint",
ARGTYPE_STRING, ARG_NOMINMAX },
{"cartoexploreur", &cartoexploreur,
- "Write tracks compatible with Carto Exploreur", "",
+ "Write tracks compatible with Carto Exploreur", NULL,
ARGTYPE_BOOL, ARG_NOMINMAX },
ARG_TERMINATOR
};
if (lathemi == 'S') lat = -lat;
if (lonhemi == 'W') lon = -lon;
} else if (n == 0) {
- fatal(MYNAME ":Unrecognized track line '%s'",
+ fatal(MYNAME ":Unrecognized track line '%s'\n",
ibuf);
}
--- /dev/null
+/*
+
+ Minimum support for Palm/OS database files
+ Copyright (C) 2007 Olaf Klein, o.b.klein@gpsbabel.org
+
+ Written after study the Coldsync project
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
+
+ */
+
+#include "defs.h"
+
+#if PDBFMTS_ENABLED
+
+#include "gbfile.h"
+#include "pdbfile.h"
+#include <stdio.h>
+#include <string.h>
+
+
+#define MYNAME "pdbfile"
+
+static void
+pdb_invalid_file(const pdbfile *pdb_in, const char *fmt, ...)
+{
+ char buff[128];
+ va_list args;
+
+ va_start(args, fmt);
+ vsnprintf(buff, sizeof(buff), fmt, args);
+ buff[sizeof(buff)-1] = '0';
+
+ warning(MYNAME ": %s\n", buff);
+ fatal(MYNAME ": Invalid or unsupported file (%s).\n", pdb_in->file->name);
+}
+
+/* try to read to EOF (avoid determining file-size) */
+
+static void *
+pdb_read_tail(gbfile *fin, gbint32 *size)
+{
+ int count;
+ char buff[256];
+ char *res = NULL;
+ int bytes = 0;
+
+ while ((count = gbfread(buff, 1, sizeof(buff), fin))) {
+
+ if (!res) {
+ res = xmalloc(count);
+ memcpy(res, buff, count);
+ }
+ else {
+ res = xrealloc(res, bytes + count);
+ memcpy(&res[bytes], buff, count);
+ }
+ bytes += count;
+ }
+ if (res) res = xrealloc(res, bytes + 1);
+ else res = xmalloc(1);
+ res[bytes] = '\0';
+
+ if (size) *size = bytes;
+ return (void *)res;
+}
+
+static void
+pdb_load_data(pdbfile *fin)
+{
+ gbuint16 i, ct;
+ pdbrec_t *last_rec;
+ gbint32 offs;
+ pdbrec_t *rec;
+
+ /* load the header */
+ gbfread(fin->name, 1, PDB_DBNAMELEN, fin->file);
+ fin->name[PDB_DBNAMELEN] = '\0';
+
+ fin->attr = gbfgetuint16(fin->file);
+ fin->version = gbfgetuint16(fin->file);
+ fin->ctime = gbfgetuint32(fin->file);
+ fin->mtime = gbfgetuint32(fin->file);
+ fin->btime = gbfgetuint32(fin->file);
+ fin->revision = gbfgetuint32(fin->file);
+ fin->appinfo_offs = gbfgetint32(fin->file);
+ fin->index_offs = gbfgetuint32(fin->file);
+ fin->type = gbfgetuint32(fin->file);
+ fin->creator = gbfgetuint32(fin->file);
+ fin->uid = gbfgetuint32(fin->file);
+
+ if (fin->appinfo_offs < 0)
+ pdb_invalid_file(fin, "Invalid application data offset (%0xh)", fin->appinfo_offs);
+ if (fin->index_offs < 0)
+ pdb_invalid_file(fin, "Invalid index offset (%0xh)", fin->index_offs);
+
+#if 0
+ fprintf(stderr, "%s: dbname \"%s\"\n", MYNAME, fin->name);
+ fprintf(stderr, "%s: attr %-8x\n", MYNAME, fin->attr);
+ fprintf(stderr, "%s: creator %-8x\n", MYNAME, fin->creator);
+ fprintf(stderr, "%s: type %-8x\n", MYNAME, fin->type);
+ fprintf(stderr, "%s: ver %-8u\n", MYNAME, fin->version);
+ fprintf(stderr, "%s: app-ofs %-8u\n", MYNAME, fin->appinfo_offs);
+ fprintf(stderr, "%s: index-ofs %-8u\n", MYNAME, fin->index_offs);
+#endif
+ /* ID = */ (void) gbfgetuint32(fin->file);
+ ct = fin->rec_ct = gbfgetint16(fin->file);
+ if (ct >= 0x7FFF)
+ warning(MYNAME ": Probably invalid number of records (%0d)\n", fin->rec_ct);
+
+ offs = 78;
+
+ last_rec = NULL;
+ for (i = 0; i < ct; i++) {
+ pdbrec_t *rec;
+
+ rec = xcalloc(1, sizeof(*rec));
+ if (fin->attr & PDB_FLAG_RESOURCE) {
+ (void) gbfgetuint32(fin->file); /* type */
+ rec->id = gbfgetint16(fin->file);
+ rec->offs = gbfgetuint32(fin->file);
+ if ((gbint32)rec->offs < 0)
+ pdb_invalid_file(fin, "Invalid offset to record (%0d, id = %d)", rec->offs, rec->id);
+ }
+ else {
+ gbuint32 x;
+
+ rec->offs = gbfgetint32(fin->file);
+ x = gbfgetuint32(fin->file);
+ rec->id = x & 0x0ffff;
+ rec->category = (x >> 24) & 0x0f;
+ rec->flags = (x >> 24) & 0xf0;
+ if ((gbint32)rec->offs < 0)
+ pdb_invalid_file(fin, "Invalid offset to resource record (%0d, id = %d)", rec->offs, rec->id);
+ }
+
+ if (last_rec == NULL)
+ fin->rec_list = rec;
+ else
+ last_rec->next = rec;
+ last_rec = rec;
+ }
+
+ offs += (ct * 8);
+ last_rec = fin->rec_list;
+
+ if (fin->appinfo_offs != 0) {
+ gbint32 top;
+
+ /* seek to application info offset */
+ while (offs < fin->appinfo_offs) {
+ (void)gbfgetc(fin->file);
+ offs++;
+ }
+
+ /* determine the length of application info */
+ if (fin->index_offs != 0) top = fin->index_offs;
+ else top = 0x7FFFFFFU;
+ if (last_rec && (last_rec->offs < top)) top = last_rec->offs;
+
+ if (top != 0x7FFFFFFU) {
+ fin->appinfo = xmalloc(top - offs);
+ fin->appinfo_len = gbfread(fin->appinfo, 1, top - offs, fin->file);
+ offs += fin->appinfo_len;
+ }
+ else {
+ gbint32 size;
+ fin->appinfo = pdb_read_tail(fin->file, &size);
+ fin->appinfo_len = size;
+ offs += size;
+ }
+ }
+
+ for (rec = fin->rec_list; rec; rec = rec->next) {
+ /* seek to current record */
+ while (offs < rec->offs) {
+ (void) gbfgetc(fin->file);
+ offs++;
+ }
+ if (rec->next) {
+ rec->size = (gbint32)rec->next->offs - (gbint32)offs;
+ if (rec->size > 0) {
+ rec->data = xmalloc(rec->size);
+ rec->size = gbfread(rec->data, 1, rec->size, fin->file);
+ offs += rec->size;
+ }
+ else if (rec->size < 0)
+ pdb_invalid_file(fin, "Wrong data size in record with id %d.\n", rec->id);
+ }
+ else {
+ rec->data = pdb_read_tail(fin->file, &rec->size);
+ offs += rec->size;
+ }
+ }
+}
+
+pdbfile *
+pdb_open(const char *filename, const char *module)
+{
+ pdbfile *res;
+
+ res = xcalloc(1, sizeof(*res));
+ res->file = gbfopen_be(filename, "rb", module);
+ res->mode = 1;
+
+ pdb_load_data(res);
+ pdb_rewind(res);
+
+ return res;
+}
+
+int
+pdb_read_rec_by_id(pdbfile *fin, const gbuint32 rec_id, gbuint8 *flags, gbuint8 *category, void **data)
+{
+ pdbrec_t *rec;
+
+ for (rec = fin->rec_list; rec; rec = rec->next) {
+ if (rec->id == rec_id) {
+ if (data) *data = rec->data;
+ if (flags) *flags = rec->flags;
+ if (category) *category = rec->category;
+ return rec->size;
+ }
+ }
+ return -1;
+}
+
+pdbfile *
+pdb_create(const char *filename, const char *module)
+{
+ pdbfile *res;
+
+ res = xcalloc(1, sizeof(*res));
+ strncpy(res->name, "Palm/OS Database", PDB_DBNAMELEN);
+ res->file = gbfopen_be(filename, "wb", module);;
+ res->mode = 2;
+
+ return res;
+}
+
+void
+pdb_write_rec(pdbfile *fout, const gbuint8 flags, const gbuint8 category, const gbuint32 rec_id, const void *data, const gbuint32 size)
+{
+ pdbrec_t *rec, *cur;
+
+ rec = xcalloc(1, sizeof(*rec));
+ rec->category = category;
+ rec->flags = category;
+ rec->id = rec_id;
+ rec->size = size;
+ if (size > 0) {
+ rec->data = xmalloc(size);
+ memcpy(rec->data, data, size);
+ }
+
+ /* insert rec into rec_list sorted by id */
+ cur = fout->rec_list;
+ if (cur == NULL) fout->rec_list = rec;
+ else {
+ pdbrec_t *prev = NULL;
+
+ while (cur) {
+ if (rec_id < cur->id) {
+ rec->next = cur;
+ if (prev == NULL) fout->rec_list = rec;
+ else prev->next = rec;
+ break;
+ }
+ else if (rec_id == cur->id) { /* Overwrite record with id ... */
+ rec->next = cur->next;
+ if (prev == NULL) fout->rec_list = rec;
+ else prev->next = rec;
+ if (cur->data) xfree(cur->data);
+ xfree(cur);
+ cur = rec;
+ break;
+ }
+ prev = cur;
+ cur = cur->next;
+ }
+ if (! cur) {
+ if (prev == NULL) fout->rec_list = rec;
+ else prev->next = rec;
+ }
+ }
+ fout->rec_ct++;
+}
+
+/* all data was buffered, write now to file */
+
+static void
+pdb_flush(pdbfile *file)
+{
+ pdbrec_t *rec;
+ gbfile *fout = file->file;
+ int len, offs;
+
+ offs = 78;
+ file->index_offs = 0;
+ offs += (file->rec_ct * 8);
+
+ offs += 2;
+
+ if (file->appinfo && (file->appinfo_len > 0)) {
+ file->appinfo_offs = offs;
+ offs += file->appinfo_len;
+ }
+ else
+ file->appinfo_offs = 0;
+
+ rec = file->rec_list;
+ while (rec) { /* prepare data records */
+ rec->offs = offs;
+ offs += rec->size;
+ rec = rec->next;
+ }
+
+ len = strlen(file->name);
+ gbfwrite(file->name, 1, len, fout);
+ while (len++ < PDB_DBNAMELEN) gbfputc(0, fout);
+
+ gbfputuint16(file->attr, fout);
+ gbfputuint16(file->version, fout);
+ gbfputuint32(file->ctime, fout);
+ gbfputuint32(file->mtime, fout);
+ gbfputuint32(file->btime, fout);
+ gbfputuint32(file->revision, fout);
+ gbfputuint32(file->appinfo_offs, fout);
+ gbfputuint32(file->index_offs, fout);
+ gbfputuint32(file->type, fout);
+ gbfputuint32(file->creator, fout);
+ gbfputuint32(file->uid, fout);
+
+ gbfputuint32(0, fout); /* ? ID ? */
+ gbfputuint16(file->rec_ct, fout);
+
+ for (rec = file->rec_list; rec; rec = rec->next) {
+ gbuint32 attr;
+
+ gbfputint32(rec->offs, fout);
+ attr = (rec->category & 0x0f) | (rec->flags & 0xf0);
+ gbfputint32((rec->id & 0x0ffffff) | (attr << 24), fout);
+ }
+ gbfputint16(0, fout);
+
+ if (file->appinfo && (file->appinfo_len > 0)) {
+ gbfwrite(file->appinfo, 1, file->appinfo_len, fout);
+ }
+
+ for (rec = file->rec_list; rec; rec = rec->next) {
+ if (rec->size > 0)
+ gbfwrite(rec->data, 1, rec->size, fout);
+ }
+}
+
+void
+pdb_close(pdbfile *file)
+{
+ pdbrec_t *rec;
+
+ if (! file) return;
+
+ if (file->mode & 2) {
+#if 0
+ /* this can be done later */
+ if (gpsbabel_time == 0) { /* !!! We are in testo !!! */
+ file->ctime = 0; /* (now we also can do a bincompare) */
+ file->mtime = 0;
+ file->btime = 0;
+ }
+#endif
+ pdb_flush(file);
+ }
+
+ gbfclose(file->file);
+
+ if ((file->mode & 1) && file->appinfo) xfree(file->appinfo);
+
+ rec = file->rec_list;
+ while (rec) {
+ pdbrec_t *tmp = rec;
+ rec = rec->next;
+
+ if (tmp->data) xfree(tmp->data);
+ xfree(tmp);
+ }
+ xfree(file);
+}
+
+int
+pdb_eof(pdbfile *fin)
+{
+ return (fin->rec_curr) ? 0 : 1;
+}
+
+int
+pdb_read_rec(pdbfile *fin, gbuint8 *flags, gbuint8 *category, gbuint32 *rec_id, void **data)
+{
+ if (pdb_eof(fin)) return -1;
+ else {
+ pdbrec_t *rec = fin->rec_curr;
+ fin->rec_curr = rec->next;
+
+ if (data) *data = rec->data;
+ if (flags) *flags = rec->flags;
+ if (category) *category = rec->category;
+ if (rec_id) *rec_id = rec->id;
+
+ return rec->size;
+ }
+}
+
+void
+pdb_rewind(pdbfile *fin)
+{
+ fin->rec_curr = fin->rec_list;
+}
+
+#endif
--- /dev/null
+/*
+
+ Minimum support for Palm/OS database files
+ Copyright (C) 2007 Olaf Klein, o.b.klein@gpsbabel.org
+
+ Written after study the Coldsync project
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
+
+ */
+
+#ifndef PDBFILE_H
+#define PDBFILE_H
+
+#include "defs.h"
+
+#if PDBFMTS_ENABLED
+
+#include "gbfile.h"
+#include "gbtypes.h"
+
+#include <time.h>
+
+#define PDB_DBNAMELEN 32
+#define PDB_FLAG_RESOURCE 0x0001
+#define PDB_FLAG_BACKUP 0x0008
+#define EPOCH_1904 2082844800L
+
+typedef struct pdbrec_s {
+ gbint32 offs;
+ gbint32 size;
+ gbuint32 id;
+ gbuint8 category;
+ gbuint8 flags;
+ char *data;
+ struct pdbrec_s *next;
+} pdbrec_t;
+
+typedef struct {
+ gbfile *file;
+ char mode; /* file-mode: 1 = read / 2 = write */
+ char name[PDB_DBNAMELEN + 1]; /* database name */
+ gbuint16 attr; /* attributes */
+ gbuint16 version; /* version */
+ time_t ctime; /* creation time */
+ time_t mtime; /* modification time */
+ time_t btime; /* backup time */
+ gbuint32 revision;
+ gbint32 appinfo_offs; /* offset to application info */
+ gbint32 index_offs; /* offset to sort-index info */
+ gbuint32 creator;
+ gbuint32 type;
+ gbuint32 uid;
+ gbuint16 rec_ct;
+ struct pdbrec_s *rec_list;
+ struct pdbrec_s *rec_curr;
+ void *appinfo;
+ int appinfo_len;
+} pdbfile;
+
+
+pdbfile *pdb_open(const char *filename, const char *module);
+pdbfile *pdb_create(const char *filename, const char *module);
+void pdb_close(pdbfile *file);
+int pdb_eof(pdbfile *fin);
+void pdb_rewind(pdbfile *fin);
+int pdb_read_rec(pdbfile *fin, gbuint8 *flags, gbuint8 *category, gbuint32 *rec_id, void **data);
+int pdb_read_rec_by_id(pdbfile *fin, const gbuint32 rec_id, gbuint8 *flags, gbuint8 *category, void **data);
+void pdb_write_rec(pdbfile *fout, const gbuint8 flags, const gbuint8 category, const gbuint32 rec_id, const void *data, const gbuint32 size);
+
+#endif
+#endif
#include "quovadis.h"
#if PDBFMTS_ENABLED
-static FILE *file_in;
-static FILE *file_out;
-static const char *out_fname;
-static struct pdb *opdb;
+static pdbfile *file_in, *file_out;
-static int ct;
-static ubyte* rec_ptr = NULL;
-static ubyte* current_rec = NULL;
+static gbuint8* rec_ptr = NULL;
+static gbuint8* current_rec = NULL;
static int rec_index = 0;
-
+static int ct;
static char *dbname = NULL;
static
static void
rd_init(const char *fname)
{
- file_in = xfopen(fname, "rb", MYNAME);
+ file_in = pdb_open(fname, MYNAME);
}
static void
rd_deinit(void)
{
- fclose(file_in);
+ pdb_close(file_in);
if ( dbname ) {
xfree(dbname);
dbname = NULL;
static void
wr_init(const char *fname)
{
- file_out = xfopen(fname, "wb", MYNAME);
- out_fname = fname;
+ file_out = pdb_create(fname, MYNAME);
+ ct = 0;
}
static void
wr_deinit(void)
{
- fclose(file_out);
+ pdb_close(file_out);
if ( dbname ) {
xfree(dbname);
dbname = NULL;
data_read(void)
{
struct record *rec;
- struct pdb *pdb;
- struct pdb_record *pdb_rec;
+ pdbrec_t *pdb_rec;
int i;
- if (NULL == (pdb = pdb_Read(fileno(file_in)))) {
- fatal(MYNAME ": pdb_Read failed\n");
- }
-
- if ((pdb->creator != MYCREATOR) || (pdb->type != MYTYPE)) {
+ if ((file_in->creator != MYCREATOR) || (file_in->type != MYTYPE)) {
fatal(MYNAME ": Not a QuoVadis file.\n");
}
/* Ignore the first record, it contains one zero byte */
- for(pdb_rec = pdb->rec_index.rec->next; pdb_rec; pdb_rec=pdb_rec->next) {
- int num_recs = pdb_rec->data_len / sizeof(struct record);
+ for(pdb_rec = file_in->rec_list->next; pdb_rec; pdb_rec = pdb_rec->next) {
+ int num_recs = pdb_rec->size / sizeof(struct record);
for (i = 0; i < num_recs; i++) {
waypoint *wpt_tmp;
waypt_add(wpt_tmp);
}
}
- free_pdb(pdb);
}
int i;
if (current_rec == NULL) {
- ubyte dummy = 0;
- struct pdb_record *pdb_rec;
- pdb_rec = new_Record(0, 0, ct++, 1, &dummy);
- if (pdb_rec == NULL) {
- fatal(MYNAME ": libpdb couldn't create record\n");
- }
- if (pdb_AppendRecord(opdb, pdb_rec)) {
- fatal(MYNAME ": libpdb couldn't append record\n");
- }
+ gbuint8 dummy = 0;
+
+ pdb_write_rec(file_out, 0, 0, ct++, &dummy, 1);
- current_rec = (ubyte *) xcalloc(MAXCHUNKSIZE, 1);
+ current_rec = (gbuint8 *) xcalloc(MAXCHUNKSIZE, 1);
rec_index = 0;
rec_ptr = current_rec;
}
extern queue waypt_head;
waypoint *waypointp;
- if (NULL == (opdb = new_pdb())) {
- fatal (MYNAME ": new_pdb failed\n");
- }
-
if ( dbname ) {
- strncpy( opdb->name, dbname, PDB_DBNAMELEN );
+ strncpy( file_out->name, dbname, PDB_DBNAMELEN );
}
else {
- strncpy(opdb->name, "QuoVadisMarkerDB", PDB_DBNAMELEN);
+ strncpy(file_out->name, "QuoVadisMarkerDB", PDB_DBNAMELEN);
}
- opdb->name[PDB_DBNAMELEN-1] = 0;
- opdb->attributes = PDB_ATTR_BACKUP;
- opdb->ctime = opdb->mtime = current_time() + 2082844800U;
- opdb->type = MYTYPE; /* CWpt */
- opdb->creator = MYCREATOR; /* cGPS */
- opdb->version = 1;
+ file_out->name[PDB_DBNAMELEN-1] = 0;
+ file_out->attr = PDB_FLAG_BACKUP;
+ file_out->ctime = file_out->mtime = current_time() + 2082844800U;
+ file_out->type = MYTYPE; /* CWpt */
+ file_out->creator = MYCREATOR; /* cGPS */
+ file_out->version = 1;
/*
* All this is to sort by waypoint names before going to QuoVadis.
}
if (rec_index != 0) {
- struct pdb_record* pdb_rec;
- pdb_rec = new_Record(0, 0, ct++, (uword) (rec_index *
- sizeof(struct record)), current_rec);
-
- if (pdb_rec == NULL) {
- fatal(MYNAME ": libpdb couldn't create record\n");
- }
-
- if (pdb_AppendRecord(opdb, pdb_rec)) {
- fatal(MYNAME ": libpdb couldn't append record\n");
- }
+ pdb_write_rec(file_out, 0, 0, ct++, current_rec, rec_index * sizeof(struct record));
}
xfree(current_rec);
- pdb_Write(opdb, fileno(file_out));
xfree(htable);
}
#define __quovadis_h__
#include "defs.h"
-#include "coldsync/palm.h"
-#include "coldsync/pdb.h"
+#include "pdbfile.h"
#define MYNAME "QuoVadis"
#define MYTYPE 0x51564D52 /* QVMR */
Support for Raymarine Waypoint File (.rwf).
- Copyright (C) 2006 Olaf Klein, o.b.klein@gpsbabel.org
+ Copyright (C) 2006,2007 Olaf Klein, o.b.klein@gpsbabel.org
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
Known format limits:
Waypoint name: max. 16 characters
+ Route name: max. 16 characters
Routes: max. 50 waypoints per route
+ ???: the character set may be only a subset of std. ASCII
History:
2006/10/30: Initial release (not yet in GPSBabel source tree)
2006/11/08:
+ 2007/03/17: Remove GUIDs from writer (not really valid)
+ Fix "PredictedTwa" output
+ Initialize location with "My Waypoints"
+ Change default value for RcCount and RelSet (now 0)
+ 2007/04/18: Limit route names also to 16 characters
+ Bug-fix - add missing comma (write_route_wpt_cb/items)
+ Change line feeds to fixed CRLF
+ Sort waypoints by name (not really needed, but nice)
+ Add some MapSource icon names to icon mappings
+ Remove unused id from icon table
*/
#include "defs.h"
static inifile_t *fin;
static gbfile *fout;
-static waypoint **depot;
-static short_handle hshort;
-static int size_of_depot, items_in_depot;
+static waypoint **waypt_table;
+static short_handle hshort_wpt, hshort_rte;
+static int waypt_table_sz, waypt_table_ct;
static int rte_index, rte_wpt_index;
-static char *sguid;
static char *opt_location;
#define MYNAME "raymarine"
static
arglist_t raymarine_args[] =
{
- { "location", &opt_location, "Default location", "New location", ARGTYPE_STRING, ARG_NOMINMAX },
+ { "location", &opt_location, "Default location", "My Waypoints", ARGTYPE_STRING, ARG_NOMINMAX },
ARG_TERMINATOR
};
#define EXCEL_TO_TIMET(a) ((a - 25569.0) * 86400.0)
#define TIMET_TO_EXCEL(a) ((a / 86400.0) + 25569.0)
+#define LINE_FEED "\r\n"
+
/* Bitmaps */
typedef struct {
- int id;
char *name;
+ char *mps_name;
} raymarine_symbol_mapping_t;
static raymarine_symbol_mapping_t raymarine_symbols[] = {
- { 0, "Unknown Symbol 0" },
- { 1, "Unknown Symbol 1" },
- { 2, "Unknown Symbol 2" },
- { 3, "Red Square" },
- { 4, "Big Fish" },
- { 5, "Anchor" },
- { 6, "Smiley" },
- { 7, "Sad" },
- { 8, "Red Button" },
- { 9, "Sailfish" },
- { 10, "Danger" },
- { 11, "Attention" },
- { 12, "Black Square" },
- { 13, "Intl. Dive Flag" },
- { 14, "Vessel" },
- { 15, "Lobster" },
- { 16, "Buoy" },
- { 17, "Exclamation" },
- { 18, "Red X" },
- { 19, "Check Mark" },
- { 20, "Black Plus" },
- { 21, "Black Cross" },
- { 22, "MOB" },
- { 23, "Billfish" },
- { 24, "Bottom Mark" },
- { 25, "Circle" },
- { 26, "Diamond" },
- { 27, "Diamond Quarters" },
- { 28, "U.S.Dive Flag" },
- { 29, "Dolphin" },
- { 30, "Few Fish" },
- { 31, "Multiple Fish" },
- { 32, "Many Fish" },
- { 33, "Single Fish" },
- { 34, "Small Fish" },
- { 35, "Marker" },
- { 36, "Cocktails" },
- { 37, "Red Box Marker" },
- { 38, "Reef" },
- { 39, "Rocks" },
- { 40, "FishSchool" },
- { 41, "Seaweed" },
- { 42, "Shark" },
- { 43, "Sportfisher" },
- { 44, "Swimmer" },
- { 45, "Top Mark" },
- { 46, "Trawler" },
- { 47, "Tree" },
- { 48, "Triangle" },
- { 49, "Wreck" }
+ { /* 0 */ "Unknown Symbol 0" },
+ { /* 1 */ "Unknown Symbol 1" },
+ { /* 2 */ "Unknown Symbol 2" },
+ { /* 3 */ "Red Square" },
+ { /* 4 */ "Big Fish" },
+ { /* 5 */ "Anchor" },
+ { /* 6 */ "Smiley", "Contact, Smiley" },
+ { /* 7 */ "Sad" },
+ { /* 8 */ "Red Button", "Navaid, Red" },
+ { /* 9 */ "Sailfish" },
+ { /* 10 */ "Danger", "Skull and Crossbones" },
+ { /* 11 */ "Attention" },
+ { /* 12 */ "Black Square" },
+ { /* 13 */ "Intl. Dive Flag", "Diver Down Flag 2" },
+ { /* 14 */ "Vessel", "Marina" },
+ { /* 15 */ "Lobster" },
+ { /* 16 */ "Buoy", "Buoy, White" },
+ { /* 17 */ "Exclamation" },
+ { /* 18 */ "Red X" },
+ { /* 19 */ "Check Mark" },
+ { /* 20 */ "Black Plus" },
+ { /* 21 */ "Black Cross" },
+ { /* 22 */ "MOB" },
+ { /* 23 */ "Billfish" },
+ { /* 24 */ "Bottom Mark" },
+ { /* 25 */ "Circle", "Circle, Red" },
+ { /* 26 */ "Diamond", "Block, Red" },
+ { /* 27 */ "Diamond Quarters", "Diamond, Red" },
+ { /* 28 */ "U.S. Dive Flag", "Diver Down Flag 1" },
+ { /* 29 */ "Dolphin" },
+ { /* 30 */ "Few Fish" },
+ { /* 31 */ "Multiple Fish" },
+ { /* 32 */ "Many Fish" },
+ { /* 33 */ "Single Fish" },
+ { /* 34 */ "Small Fish" },
+ { /* 35 */ "Marker" },
+ { /* 36 */ "Cocktails", "Bar" },
+ { /* 37 */ "Red Box Marker" },
+ { /* 38 */ "Reef" },
+ { /* 39 */ "Rocks" },
+ { /* 40 */ "Fish School" },
+ { /* 41 */ "Seaweed", "Weed Bed" },
+ { /* 42 */ "Shark" },
+ { /* 43 */ "Sportfisher" },
+ { /* 44 */ "Swimmer", "Swimming Area" },
+ { /* 45 */ "Top Mark" },
+ { /* 46 */ "Trawler" },
+ { /* 47 */ "Tree" },
+ { /* 48 */ "Triangle", "Triangle, Red" },
+ { /* 49 */ "Wreck", "Shipwreck" }
};
#define RAYMARINE_SYMBOL_CT sizeof(raymarine_symbols) / sizeof(raymarine_symbol_mapping_t)
for (i = 0; i < RAYMARINE_SYMBOL_CT; i++, a++) {
if (case_ignore_strcmp(descr, a->name) == 0) return i;
+ if (a->mps_name && (case_ignore_strcmp(descr, a->mps_name) == 0)) return i;
}
}
/* %%% R A Y M A R I N E W R I T E R %%% */
/* ============================================= */
+/* make waypoint shortnames unique */
-static guid_t
-mkGUID(void)
-{
- guid_t res;
-
- if (gpsbabel_time != 0) {
- srand(gpsbabel_time + rand());
- res = ((guid_t) (gpsbabel_time) << 48) |
- ((guid_t)(rand() & 0xFFFF) << 32) |
- ((guid_t)(rand() & 0xFFFF) << 16) |
- (rand() & 0xFFFF);
- }
- else res = 0;
-
- return res;
-}
-
-static char *
-GUID2str(guid_t GUID)
+static char
+same_points(const waypoint *A, const waypoint *B)
{
- gbuint16 w0, w1, w2, w3;
- char *res;
-
- w0 = GUID & 0xFFFF; GUID = GUID >> 16;
- w1 = GUID & 0xFFFF; GUID = GUID >> 16;
- w2 = GUID & 0xFFFF; GUID = GUID >> 16;
- w3 = GUID & 0xFFFF;
-
- xasprintf(&res, "%d-%d-%d-%d", w0, w1, w2, w3);
- return res;
+ return ( /* !!! We are case-sensitive !!! */
+ (strcmp(A->shortname, B->shortname) == 0) &&
+ (A->latitude == B->latitude) &&
+ (A->longitude == B->longitude));
}
-
static void
-register_waypoint(const waypoint *wpt)
+register_waypt(const waypoint *ref, const char is_rtept)
{
int i;
+ waypoint *wpt = (waypoint *) ref;
- for (i = 0; i < items_in_depot; i++) {
- waypoint *cmp = depot[i];
- if ((strcmp(wpt->shortname, cmp->shortname) == 0) &&
- (wpt->latitude == cmp->latitude) &&
- (wpt->longitude == cmp->longitude))
+ for (i = 0; i < waypt_table_ct; i++) {
+ waypoint *cmp = waypt_table[i];
+
+ if (same_points(wpt, cmp)) {
+ wpt->extra_data = cmp->extra_data;
return;
+ }
}
- if (items_in_depot >= size_of_depot) {
- size_of_depot+=16;
- if (depot)
- depot = (void *) xrealloc(depot, size_of_depot * sizeof(wpt));
+ if (waypt_table_ct >= waypt_table_sz) {
+ waypt_table_sz += 32;
+ if (waypt_table)
+ waypt_table = (void *) xrealloc(waypt_table, waypt_table_sz * sizeof(wpt));
else
- depot = (void *) xmalloc(size_of_depot * sizeof(wpt));
+ waypt_table = (void *) xmalloc(waypt_table_sz * sizeof(wpt));
}
- depot[items_in_depot] = (waypoint *)wpt;
- items_in_depot++;
+ wpt->extra_data = (void *)mkshort(hshort_wpt, wpt->shortname);
+
+ waypt_table[waypt_table_ct] = (waypoint *)wpt;
+ waypt_table_ct++;
+}
+
+static void
+enum_waypt_cb(const waypoint *wpt)
+{
+ register_waypt((waypoint *) wpt, 0);
+}
+
+static void
+enum_rtept_cb(const waypoint *wpt)
+{
+ register_waypt((waypoint *) wpt, 1);
+}
+
+static int
+qsort_cb(const void *a, const void *b)
+{
+ const waypoint *wa = *(waypoint **)a;
+ const waypoint *wb = *(waypoint **)b;
+
+ return strcmp(wa->shortname, wb->shortname);
}
static void
-write_waypoint(gbfile *fout, const waypoint *wpt, const int waypt_no, const char *location, const char *GUID)
+write_waypoint(gbfile *fout, const waypoint *wpt, const int waypt_no, const char *location)
{
char *notes;
char *name;
double time;
- /* ToDo: remove possible line-breaks from notes */
-
- notes = (wpt->notes != NULL) ? wpt->notes : "";
+ notes = wpt->notes;
+ if (notes == NULL) {
+ notes = wpt->description;
+ if (notes == NULL) notes = "";
+ }
+ notes = csv_stringclean(notes, LINE_FEED);
time = (wpt->creation_time > 0) ? TIMET_TO_EXCEL(wpt->creation_time) : TIMET_TO_EXCEL(gpsbabel_time);
-
- name = mkshort(hshort, wpt->shortname);
- gbfprintf(fout, "[Wp%d]\n"
- "Loc=%s\n"
- "Name=%s\n"
- "Lat=%.15f\n"
- "Long=%.15f\n",
+ name = (char *)wpt->extra_data;
+
+ gbfprintf(fout, "[Wp%d]" LINE_FEED
+ "Loc=%s" LINE_FEED
+ "Name=%s" LINE_FEED
+ "Lat=%.15f" LINE_FEED
+ "Long=%.15f" LINE_FEED,
waypt_no, location, name, wpt->latitude, wpt->longitude
);
- xfree(name);
- gbfprintf(fout, "Rng=%.15f\n"
- "Bear=%.15f\n"
- "Bmp=%d\n"
- "Fixed=1\n"
- "Locked=0\n"
- "Notes=%s\n",
+ gbfprintf(fout, "Rng=%.15f" LINE_FEED
+ "Bear=%.15f" LINE_FEED
+ "Bmp=%d" LINE_FEED
+ "Fixed=1" LINE_FEED
+ "Locked=0" LINE_FEED
+ "Notes=%s" LINE_FEED,
0.0, 0.0,
find_symbol_num(wpt->icon_descr),
notes
);
- gbfprintf(fout, "Rel=\n"
- "RelSet=1\n"
- "RcCount=1\n"
- "RcRadius=%.15f\n"
- "Show=1\n"
- "RcShow=0\n"
- "SeaTemp=%.15f\n"
- "Depth=%.15f\n"
- "Time=%.10f00000\n"
- "GUID=%s\n",
- 0.0, -32678.0, 65535.0, time, GUID
+ gbfprintf(fout, "Rel=" LINE_FEED
+ "RelSet=0" LINE_FEED
+ "RcCount=0" LINE_FEED
+ "RcRadius=%.15f" LINE_FEED
+ "Show=1" LINE_FEED
+ "RcShow=0" LINE_FEED
+ "SeaTemp=%.15f" LINE_FEED
+ "Depth=%.15f" LINE_FEED
+ "Time=%.10f00000" LINE_FEED,
+ 0.0, -32678.0, 65535.0, time
);
+ xfree(notes);
}
static void
write_route_head_cb(const route_head *rte)
{
- gbfprintf(fout, "[Rt%d]\n"
- "Name=%s\n"
- "Visible=1\n"
- "Guid=%s\n",
+ char buff[32];
+ char *name;
+
+ name = rte->rte_name;
+ if ((name == NULL) || (*name == '\0')) {
+ snprintf(buff, sizeof(buff), "Route%d", rte_index);
+ name = buff;
+ }
+ name = mkshort(hshort_rte, name);
+ gbfprintf(fout, "[Rt%d]" LINE_FEED
+ "Name=%s" LINE_FEED
+ "Visible=1" LINE_FEED,
rte_index,
- rte->rte_name,
- sguid
+ name
);
+ xfree(name);
+
rte_index++;
rte_wpt_index = 0;
}
write_route_wpt_cb(const waypoint *wpt)
{
int i;
- char *name;
static char *items[] = {
"Cog",
"Eta",
- "Length"
+ "Length",
"PredictedDrift",
"PredictedSet",
"PredictedSog",
"PredictedTime",
- "PredictedTwa2",
+ "PredictedTwa",
"PredictedTwd",
"PredictedTws" };
- name = mkshort(hshort, wpt->shortname);
- gbfprintf(fout, "Mk%d=%s\n", rte_wpt_index, name);
- xfree(name);
-
- for (i = 0; i < sizeof(items) / sizeof(char *); i++) {
- gbfprintf(fout, "%s%d=%.15f\n", items[i], rte_wpt_index, 0.0);
- }
+ gbfprintf(fout, "Mk%d=%s" LINE_FEED, rte_wpt_index, (char *)wpt->extra_data);
+ for (i = 0; i < sizeof(items) / sizeof(char *); i++)
+ gbfprintf(fout, "%s%d=%.15f" LINE_FEED, items[i], rte_wpt_index, 0.0);
+
rte_wpt_index++;
+ return;
}
static void
MYNAME ": Routes with more than 50 points are not supported by Waymarine!");
}
-static void
-enum_route_wpt_cb(const waypoint *wpt)
+static short_handle
+raymarine_new_short_handle(void)
{
- register_waypoint(wpt);
+ short_handle res;
+
+ res = mkshort_new_handle();
+
+ setshort_length(res, 16);
+ setshort_badchars(res, ",");
+ setshort_mustupper(res, 0);
+ setshort_mustuniq(res, 1);
+ setshort_whitespace_ok(res, 1);
+ setshort_repeating_whitespace_ok(res, 1);
+
+ return res;
}
static void
raymarine_wr_init(const char *fname)
{
- fout = gbfopen(fname, "w", MYNAME);
-
- hshort = mkshort_new_handle();
- setshort_length(hshort, 16);
+ fout = gbfopen(fname, "wb", MYNAME);
- setshort_badchars(hshort, ",");
- setshort_mustupper(hshort, 0);
- setshort_mustuniq(hshort, 0);
- setshort_whitespace_ok(hshort, 1);
- setshort_repeating_whitespace_ok(hshort, 1);
+ hshort_wpt = raymarine_new_short_handle();
+ hshort_rte = raymarine_new_short_handle();
}
static void
raymarine_wr_done(void)
{
- mkshort_del_handle(&hshort);
+ mkshort_del_handle(&hshort_wpt);
+ mkshort_del_handle(&hshort_rte);
+
gbfclose(fout);
}
raymarine_write(void)
{
int i;
- queue *elem, *tmp;
- extern queue waypt_head;
- guid_t guid;
+ waypoint *wpt;
- size_of_depot = 0;
- items_in_depot = 0;
- depot = NULL;
- guid = mkGUID();
- sguid = GUID2str(guid);
+ waypt_table_sz = 0;
+ waypt_table_ct = 0;
+ waypt_table = NULL;
/* enumerate all possible waypoints */
- QUEUE_FOR_EACH(&waypt_head, elem, tmp) {
- waypoint *wpt = (waypoint *) elem;
- register_waypoint(wpt);
- }
- route_disp_all(enum_route_hdr_cb, NULL, enum_route_wpt_cb);
+ waypt_disp_all(enum_waypt_cb);
+ route_disp_all(enum_route_hdr_cb, NULL, enum_rtept_cb);
+ if (waypt_table_ct == 0) return;
+
+ qsort(waypt_table, waypt_table_ct, sizeof(*waypt_table), qsort_cb);
+
/* write out waypoint summary */
- for (i = 0; i < items_in_depot; i++) {
- waypoint *wpt = depot[i];
- write_waypoint(fout, wpt, i, opt_location, sguid);
+ for (i = 0; i < waypt_table_ct; i++) {
+ waypoint *wpt = waypt_table[i];
+ write_waypoint(fout, wpt, i, opt_location);
}
/* write out all routes with their waypoints */
rte_index = 0;
route_disp_all(write_route_head_cb, NULL, write_route_wpt_cb);
- if (depot != NULL) xfree(depot);
- xfree(sguid);
+ /* release local used data */
+ for (i = 0; i < waypt_table_ct; i++) {
+ wpt = waypt_table[i];
+ xfree(wpt->extra_data);
+ wpt->extra_data = NULL;
+ }
+ xfree(waypt_table);
}
/* ================================================== */
raymarine_write,
NULL,
raymarine_args,
- CET_CHARSET_ASCII, 0
+ CET_CHARSET_ASCII, 0 /* should we force this to 1 ? */
};
Group sID sDescription fLat fLong fEasting fNorthing fAlt iColour iSymbol sHyperLink
new 01 Hohndorf 50.738297 12.683029 -99999999.00 255 1
-new 0x9E $ - latin small letter z with caron 50.497971 13.027725 -99999999.00 255 1
+new 0x9E z - latin small letter z with caron 50.497971 13.027725 -99999999.00 255 1
new 0xC9 É - latin capital letter e with circumflex 50.497971 13.027725 -99999999.00 255 1
new 0xF0 ð - latin small letter eth (icelandic) 50.497971 13.027725 -99999999.00 255 1
-new CS Ovládací Prohlí$ení lokální síte 50.514406 13.638634 -99999999.00 255 1
+new CS Ovládací Prohlízení lokální síte 50.514406 13.638634 -99999999.00 255 1
new DA Tåning netværkssøgning áâãäåæéë 56.011734 9.847870 -99999999.00 255 1
new DE Himmelmühle äöüÄÖÜß 50.625865 13.060611 -99999999.00 255 1
new EO Trasercado de la loka ret 50.495281 13.027645 -99999999.00 255 1
new ES Matalascañas Navegación Táliga 37.007446 -6.558838 -99999999.00 255 1
new FR Boissière-École Contrôle réseau Mâle 48.679047 1.652069 -99999999.00 255 1
-new HR Pregledavanje lokalne mre$e 50.477937 12.510391 -99999999.00 255 1
+new HR Pregledavanje lokalne mreze 50.477937 12.510391 -99999999.00 255 1
new HU Hõgyész Vezérlõközpont Hálózat 46.491394 18.424072 -99999999.00 255 1
new IS Borgarfjörður 65.522461 -13.823547 -99999999.00 255 1
new SK Ovládacie centrum 50.724214 13.524871 -99999999.00 255 1
-new X1 $ðÉéÀàÈèÙùÂâÊêÎîÄäËëÖöÜüÆæÅ娸ÇçÑñ²³½É× 50.497971 13.027725 -99999999.00 255 1
-new X2 $ðÉéÀàÈèÙùÂâÊêÎîÄäËëÖöÜüÆæÅ娸ÇçÑñ²³½É× 50.497971 13.027725 -99999999.00 255 1
+new X1 zðÉéÀàÈèÙùÂâÊêÎîÄäËëÖöÜüÆæÅ娸ÇçÑñ²³½É× 50.497971 13.027725 -99999999.00 255 1
+new X2 zðÉéÀàÈèÙùÂâÊêÎîÄäËëÖöÜüÆæÅ娸ÇçÑñ²³½É× 50.497971 13.027725 -99999999.00 255 1
<tr><td><b>Min Alt</b> 3.3 ft </td></tr>
<tr><td><b>Max Alt</b> 23.0 ft </td></tr>
<tr><td><b>Max Speed</b> 25.5 mph </td></tr>
+ <tr><td><b>Start Time:</b> 2002-05-25T17:06:21Z </td></tr>
+ <tr><td><b>End Time:</b> 2002-05-25T19:05:57Z </td></tr>
</table>]]>
</description>
<TimeSpan>
<tr><td>Altitude: 3.3 ft </td></tr>
<tr><td>Speed: 0.0 mph </td></tr>
<tr><td>Heading: 300.1 </td></tr>
+ <tr><td>Time: 2002-05-25T17:06:21Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.062783 </td></tr>
<tr><td>Speed: 0.7 mph </td></tr>
<tr><td>Heading: 342.6 </td></tr>
+ <tr><td>Time: 2002-05-25T17:09:55Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.062700 </td></tr>
<tr><td>Speed: 4.0 mph </td></tr>
<tr><td>Heading: 92.4 </td></tr>
+ <tr><td>Time: 2002-05-25T17:12:00Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.062333 </td></tr>
<tr><td>Speed: 4.4 mph </td></tr>
<tr><td>Heading: 115.6 </td></tr>
+ <tr><td>Time: 2002-05-25T17:12:48Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.061533 </td></tr>
<tr><td>Speed: 4.4 mph </td></tr>
<tr><td>Heading: 113.8 </td></tr>
+ <tr><td>Time: 2002-05-25T17:14:41Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.059783 </td></tr>
<tr><td>Speed: 8.6 mph </td></tr>
<tr><td>Heading: 109.0 </td></tr>
+ <tr><td>Time: 2002-05-25T17:17:16Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.057800 </td></tr>
<tr><td>Speed: 25.5 mph </td></tr>
<tr><td>Heading: 130.1 </td></tr>
+ <tr><td>Time: 2002-05-25T17:17:46Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.055383 </td></tr>
<tr><td>Speed: 21.0 mph </td></tr>
<tr><td>Heading: 147.4 </td></tr>
+ <tr><td>Time: 2002-05-25T17:18:20Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.053883 </td></tr>
<tr><td>Speed: 15.1 mph </td></tr>
<tr><td>Heading: 127.2 </td></tr>
+ <tr><td>Time: 2002-05-25T17:19:01Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.049733 </td></tr>
<tr><td>Speed: 11.5 mph </td></tr>
<tr><td>Heading: 149.1 </td></tr>
+ <tr><td>Time: 2002-05-25T17:20:46Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.049017 </td></tr>
<tr><td>Speed: 7.5 mph </td></tr>
<tr><td>Heading: 189.1 </td></tr>
+ <tr><td>Time: 2002-05-25T17:21:10Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.048800 </td></tr>
<tr><td>Speed: 16.1 mph </td></tr>
<tr><td>Heading: 265.3 </td></tr>
+ <tr><td>Time: 2002-05-25T17:21:51Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.046233 </td></tr>
<tr><td>Speed: 22.5 mph </td></tr>
<tr><td>Heading: 229.9 </td></tr>
+ <tr><td>Time: 2002-05-25T17:22:35Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.045517 </td></tr>
<tr><td>Speed: 15.8 mph </td></tr>
<tr><td>Heading: 250.0 </td></tr>
+ <tr><td>Time: 2002-05-25T17:23:08Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.047300 </td></tr>
<tr><td>Speed: 0.2 mph </td></tr>
<tr><td>Heading: 323.0 </td></tr>
+ <tr><td>Time: 2002-05-25T18:04:23Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Altitude: 6.6 ft </td></tr>
<tr><td>Speed: 1.5 mph </td></tr>
<tr><td>Heading: 118.7 </td></tr>
+ <tr><td>Time: 2002-05-25T18:06:04Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.046433 </td></tr>
<tr><td>Speed: 2.3 mph </td></tr>
<tr><td>Heading: 165.8 </td></tr>
+ <tr><td>Time: 2002-05-25T18:07:06Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Altitude: 3.3 ft </td></tr>
<tr><td>Speed: 1.7 mph </td></tr>
<tr><td>Heading: 117.5 </td></tr>
+ <tr><td>Time: 2002-05-25T18:08:18Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.046367 </td></tr>
<tr><td>Speed: 2.2 mph </td></tr>
<tr><td>Heading: 81.0 </td></tr>
+ <tr><td>Time: 2002-05-25T18:10:20Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.046350 </td></tr>
<tr><td>Speed: 2.5 mph </td></tr>
<tr><td>Heading: 92.0 </td></tr>
+ <tr><td>Time: 2002-05-25T18:11:09Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.046783 </td></tr>
<tr><td>Speed: 3.0 mph </td></tr>
<tr><td>Heading: 59.0 </td></tr>
+ <tr><td>Time: 2002-05-25T18:12:18Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.047450 </td></tr>
<tr><td>Speed: 2.4 mph </td></tr>
<tr><td>Heading: 55.8 </td></tr>
+ <tr><td>Time: 2002-05-25T18:14:22Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Altitude: 6.6 ft </td></tr>
<tr><td>Speed: 3.0 mph </td></tr>
<tr><td>Heading: 47.0 </td></tr>
+ <tr><td>Time: 2002-05-25T18:15:04Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Altitude: 3.3 ft </td></tr>
<tr><td>Speed: 2.6 mph </td></tr>
<tr><td>Heading: 52.8 </td></tr>
+ <tr><td>Time: 2002-05-25T18:16:14Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Altitude: 3.3 ft </td></tr>
<tr><td>Speed: 2.6 mph </td></tr>
<tr><td>Heading: 29.5 </td></tr>
+ <tr><td>Time: 2002-05-25T18:17:01Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.049350 </td></tr>
<tr><td>Speed: 2.5 mph </td></tr>
<tr><td>Heading: 356.3 </td></tr>
+ <tr><td>Time: 2002-05-25T18:18:07Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Altitude: 6.6 ft </td></tr>
<tr><td>Speed: 2.3 mph </td></tr>
<tr><td>Heading: 353.2 </td></tr>
+ <tr><td>Time: 2002-05-25T18:19:51Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.050783 </td></tr>
<tr><td>Speed: 2.5 mph </td></tr>
<tr><td>Heading: 346.0 </td></tr>
+ <tr><td>Time: 2002-05-25T18:20:39Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.051233 </td></tr>
<tr><td>Speed: 2.8 mph </td></tr>
<tr><td>Heading: 334.3 </td></tr>
+ <tr><td>Time: 2002-05-25T18:21:24Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.051800 </td></tr>
<tr><td>Speed: 2.7 mph </td></tr>
<tr><td>Heading: 0.0 </td></tr>
+ <tr><td>Time: 2002-05-25T18:22:17Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.052217 </td></tr>
<tr><td>Speed: 2.0 mph </td></tr>
<tr><td>Heading: 328.1 </td></tr>
+ <tr><td>Time: 2002-05-25T18:23:18Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.053017 </td></tr>
<tr><td>Speed: 2.5 mph </td></tr>
<tr><td>Heading: 359.0 </td></tr>
+ <tr><td>Time: 2002-05-25T18:24:37Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Altitude: 19.7 ft </td></tr>
<tr><td>Speed: 2.2 mph </td></tr>
<tr><td>Heading: 346.4 </td></tr>
+ <tr><td>Time: 2002-05-25T18:28:13Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Altitude: 6.6 ft </td></tr>
<tr><td>Speed: 1.4 mph </td></tr>
<tr><td>Heading: 168.5 </td></tr>
+ <tr><td>Time: 2002-05-25T18:31:36Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.053183 </td></tr>
<tr><td>Speed: 1.8 mph </td></tr>
<tr><td>Heading: 166.7 </td></tr>
+ <tr><td>Time: 2002-05-25T18:32:56Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.052633 </td></tr>
<tr><td>Speed: 2.1 mph </td></tr>
<tr><td>Heading: 184.5 </td></tr>
+ <tr><td>Time: 2002-05-25T18:34:02Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.052450 </td></tr>
<tr><td>Speed: 1.1 mph </td></tr>
<tr><td>Heading: 250.6 </td></tr>
+ <tr><td>Time: 2002-05-25T18:36:03Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.052483 </td></tr>
<tr><td>Speed: 2.6 mph </td></tr>
<tr><td>Heading: 274.1 </td></tr>
+ <tr><td>Time: 2002-05-25T18:36:48Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Altitude: 3.3 ft </td></tr>
<tr><td>Speed: 2.8 mph </td></tr>
<tr><td>Heading: 283.3 </td></tr>
+ <tr><td>Time: 2002-05-25T18:37:52Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.053133 </td></tr>
<tr><td>Speed: 3.0 mph </td></tr>
<tr><td>Heading: 297.6 </td></tr>
+ <tr><td>Time: 2002-05-25T18:39:18Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.053617 </td></tr>
<tr><td>Speed: 2.2 mph </td></tr>
<tr><td>Heading: 348.2 </td></tr>
+ <tr><td>Time: 2002-05-25T18:40:15Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Altitude: 19.7 ft </td></tr>
<tr><td>Speed: 1.4 mph </td></tr>
<tr><td>Heading: 26.3 </td></tr>
+ <tr><td>Time: 2002-05-25T18:41:25Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.053617 </td></tr>
<tr><td>Speed: 1.5 mph </td></tr>
<tr><td>Heading: 218.0 </td></tr>
+ <tr><td>Time: 2002-05-25T18:42:37Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.053200 </td></tr>
<tr><td>Speed: 1.3 mph </td></tr>
<tr><td>Heading: 161.0 </td></tr>
+ <tr><td>Time: 2002-05-25T18:44:01Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.052817 </td></tr>
<tr><td>Speed: 1.1 mph </td></tr>
<tr><td>Heading: 137.9 </td></tr>
+ <tr><td>Time: 2002-05-25T18:45:53Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.052567 </td></tr>
<tr><td>Speed: 2.3 mph </td></tr>
<tr><td>Heading: 116.3 </td></tr>
+ <tr><td>Time: 2002-05-25T18:46:54Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.052333 </td></tr>
<tr><td>Speed: 2.6 mph </td></tr>
<tr><td>Heading: 118.4 </td></tr>
+ <tr><td>Time: 2002-05-25T18:47:42Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.052250 </td></tr>
<tr><td>Speed: 2.8 mph </td></tr>
<tr><td>Heading: 97.3 </td></tr>
+ <tr><td>Time: 2002-05-25T18:48:41Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.052217 </td></tr>
<tr><td>Speed: 2.0 mph </td></tr>
<tr><td>Heading: 93.3 </td></tr>
+ <tr><td>Time: 2002-05-25T18:49:52Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.051883 </td></tr>
<tr><td>Speed: 1.9 mph </td></tr>
<tr><td>Heading: 140.6 </td></tr>
+ <tr><td>Time: 2002-05-25T18:50:49Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.051050 </td></tr>
<tr><td>Speed: 2.6 mph </td></tr>
<tr><td>Heading: 162.7 </td></tr>
+ <tr><td>Time: 2002-05-25T18:52:14Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.050567 </td></tr>
<tr><td>Speed: 3.0 mph </td></tr>
<tr><td>Heading: 163.3 </td></tr>
+ <tr><td>Time: 2002-05-25T18:52:56Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.050183 </td></tr>
<tr><td>Speed: 2.4 mph </td></tr>
<tr><td>Heading: 163.3 </td></tr>
+ <tr><td>Time: 2002-05-25T18:53:38Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.049100 </td></tr>
<tr><td>Speed: 3.0 mph </td></tr>
<tr><td>Heading: 163.0 </td></tr>
+ <tr><td>Time: 2002-05-25T18:55:11Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.048450 </td></tr>
<tr><td>Speed: 2.5 mph </td></tr>
<tr><td>Heading: 215.4 </td></tr>
+ <tr><td>Time: 2002-05-25T18:56:32Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.048083 </td></tr>
<tr><td>Speed: 2.7 mph </td></tr>
<tr><td>Heading: 229.7 </td></tr>
+ <tr><td>Time: 2002-05-25T18:57:24Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Altitude: 23.0 ft </td></tr>
<tr><td>Speed: 2.8 mph </td></tr>
<tr><td>Heading: 226.1 </td></tr>
+ <tr><td>Time: 2002-05-25T18:58:40Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.047067 </td></tr>
<tr><td>Speed: 3.3 mph </td></tr>
<tr><td>Heading: 227.7 </td></tr>
+ <tr><td>Time: 2002-05-25T18:59:28Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.046633 </td></tr>
<tr><td>Speed: 3.1 mph </td></tr>
<tr><td>Heading: 230.1 </td></tr>
+ <tr><td>Time: 2002-05-25T19:00:22Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.046400 </td></tr>
<tr><td>Speed: 3.0 mph </td></tr>
<tr><td>Heading: 255.6 </td></tr>
+ <tr><td>Time: 2002-05-25T19:01:41Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.046233 </td></tr>
<tr><td>Speed: 2.7 mph </td></tr>
<tr><td>Heading: 256.7 </td></tr>
+ <tr><td>Time: 2002-05-25T19:02:48Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.046317 </td></tr>
<tr><td>Speed: 2.0 mph </td></tr>
<tr><td>Heading: 281.0 </td></tr>
+ <tr><td>Time: 2002-05-25T19:03:43Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.046783 </td></tr>
<tr><td>Speed: 2.0 mph </td></tr>
<tr><td>Heading: 329.6 </td></tr>
+ <tr><td>Time: 2002-05-25T19:04:49Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Latitude: 30.047133 </td></tr>
<tr><td>Speed: 1.8 mph </td></tr>
<tr><td>Heading: 316.5 </td></tr>
+ <tr><td>Time: 2002-05-25T19:05:57Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Longitude: -71.107628 </td></tr>
<tr><td>Latitude: 42.430950 </td></tr>
<tr><td>Altitude: 77.0 ft </td></tr>
- <tr><td>Heading: -999.0 </td></tr>
+ <tr><td>Time: 2001-06-02T00:18:15Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Longitude: -71.109236 </td></tr>
<tr><td>Latitude: 42.431240 </td></tr>
<tr><td>Altitude: 87.1 ft </td></tr>
- <tr><td>Heading: -999.0 </td></tr>
+ <tr><td>Time: 2001-11-07T23:53:41Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Longitude: -71.109942 </td></tr>
<tr><td>Latitude: 42.434980 </td></tr>
<tr><td>Altitude: 148.6 ft </td></tr>
- <tr><td>Heading: -999.0 </td></tr>
+ <tr><td>Time: 2001-11-07T23:53:41Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Longitude: -71.113223 </td></tr>
<tr><td>Latitude: 42.436757 </td></tr>
<tr><td>Altitude: 123.4 ft </td></tr>
- <tr><td>Heading: -999.0 </td></tr>
+ <tr><td>Time: 2001-11-28T21:05:28Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Longitude: -71.114456 </td></tr>
<tr><td>Latitude: 42.439018 </td></tr>
<tr><td>Altitude: 185.0 ft </td></tr>
- <tr><td>Heading: -999.0 </td></tr>
+ <tr><td>Time: 2001-06-02T03:26:55Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Longitude: -71.114803 </td></tr>
<tr><td>Latitude: 42.438594 </td></tr>
<tr><td>Altitude: 151.0 ft </td></tr>
- <tr><td>Heading: -999.0 </td></tr>
+ <tr><td>Time: 2001-11-28T21:05:28Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Longitude: -71.116146 </td></tr>
<tr><td>Latitude: 42.438917 </td></tr>
<tr><td>Altitude: 147.1 ft </td></tr>
- <tr><td>Heading: -999.0 </td></tr>
+ <tr><td>Time: 2001-11-16T23:03:38Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Longitude: -71.119277 </td></tr>
<tr><td>Latitude: 42.438878 </td></tr>
<tr><td>Altitude: 146.3 ft </td></tr>
- <tr><td>Heading: -999.0 </td></tr>
+ <tr><td>Time: 2001-11-28T21:05:28Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Longitude: -71.119689 </td></tr>
<tr><td>Latitude: 42.439227 </td></tr>
<tr><td>Altitude: 189.0 ft </td></tr>
- <tr><td>Heading: -999.0 </td></tr>
+ <tr><td>Time: 2001-06-02T03:26:55Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Longitude: -71.120925 </td></tr>
<tr><td>Latitude: 42.439993 </td></tr>
<tr><td>Altitude: 177.0 ft </td></tr>
- <tr><td>Heading: -999.0 </td></tr>
+ <tr><td>Time: 2001-06-02T00:18:14Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Longitude: -71.121676 </td></tr>
<tr><td>Latitude: 42.441727 </td></tr>
<tr><td>Altitude: 221.0 ft </td></tr>
- <tr><td>Heading: -999.0 </td></tr>
+ <tr><td>Time: 2001-06-02T00:18:16Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Longitude: -71.122044 </td></tr>
<tr><td>Latitude: 42.443904 </td></tr>
<tr><td>Altitude: 166.0 ft </td></tr>
- <tr><td>Heading: -999.0 </td></tr>
+ <tr><td>Time: 2001-11-28T21:05:28Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Longitude: -71.122845 </td></tr>
<tr><td>Latitude: 42.445359 </td></tr>
<tr><td>Altitude: 202.3 ft </td></tr>
- <tr><td>Heading: -999.0 </td></tr>
+ <tr><td>Time: 2001-11-28T21:05:28Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Longitude: -71.121447 </td></tr>
<tr><td>Latitude: 42.447298 </td></tr>
<tr><td>Altitude: 419.0 ft </td></tr>
- <tr><td>Heading: -999.0 </td></tr>
+ <tr><td>Time: 2001-06-02T03:26:58Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Longitude: -71.122320 </td></tr>
<tr><td>Latitude: 42.449765 </td></tr>
<tr><td>Altitude: 393.1 ft </td></tr>
- <tr><td>Heading: -999.0 </td></tr>
+ <tr><td>Time: 2001-11-07T23:53:41Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Longitude: -71.121746 </td></tr>
<tr><td>Latitude: 42.451442 </td></tr>
<tr><td>Altitude: 244.8 ft </td></tr>
- <tr><td>Heading: -999.0 </td></tr>
+ <tr><td>Time: 2001-11-07T23:53:41Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Longitude: -71.121211 </td></tr>
<tr><td>Latitude: 42.453256 </td></tr>
<tr><td>Altitude: 255.9 ft </td></tr>
- <tr><td>Heading: -999.0 </td></tr>
+ <tr><td>Time: 2001-11-07T23:53:41Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Longitude: -71.119356 </td></tr>
<tr><td>Latitude: 42.456252 </td></tr>
<tr><td>Altitude: 258.2 ft </td></tr>
- <tr><td>Heading: -999.0 </td></tr>
+ <tr><td>Time: 2001-11-07T23:53:41Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Longitude: -71.119676 </td></tr>
<tr><td>Latitude: 42.456592 </td></tr>
<tr><td>Altitude: 258.2 ft </td></tr>
- <tr><td>Heading: -999.0 </td></tr>
+ <tr><td>Time: 2001-11-07T23:53:41Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Longitude: -71.119845 </td></tr>
<tr><td>Latitude: 42.457388 </td></tr>
<tr><td>Altitude: 242.0 ft </td></tr>
- <tr><td>Heading: -999.0 </td></tr>
+ <tr><td>Time: 2001-06-02T03:27:00Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Longitude: -71.119135 </td></tr>
<tr><td>Latitude: 42.458148 </td></tr>
<tr><td>Altitude: 224.0 ft </td></tr>
- <tr><td>Heading: -999.0 </td></tr>
+ <tr><td>Time: 2001-06-02T03:27:00Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Longitude: -71.117693 </td></tr>
<tr><td>Latitude: 42.459377 </td></tr>
<tr><td>Altitude: 210.0 ft </td></tr>
- <tr><td>Heading: -999.0 </td></tr>
+ <tr><td>Time: 2001-06-02T03:27:01Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Longitude: -71.119828 </td></tr>
<tr><td>Latitude: 42.464183 </td></tr>
<tr><td>Altitude: 173.9 ft </td></tr>
- <tr><td>Heading: -999.0 </td></tr>
+ <tr><td>Time: 2001-11-28T21:05:28Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Longitude: -71.119399 </td></tr>
<tr><td>Latitude: 42.465650 </td></tr>
<tr><td>Altitude: 185.0 ft </td></tr>
- <tr><td>Heading: -999.0 </td></tr>
+ <tr><td>Time: 2001-06-02T03:27:02Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Longitude: -71.119328 </td></tr>
<tr><td>Latitude: 42.465913 </td></tr>
<tr><td>Altitude: 211.7 ft </td></tr>
- <tr><td>Heading: -999.0 </td></tr>
+ <tr><td>Time: 2001-11-07T23:53:41Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Longitude: -71.113574 </td></tr>
<tr><td>Latitude: 42.467110 </td></tr>
<tr><td>Altitude: 176.0 ft </td></tr>
- <tr><td>Heading: -999.0 </td></tr>
+ <tr><td>Time: 2001-06-02T03:27:02Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Longitude: -71.110067 </td></tr>
<tr><td>Latitude: 42.466459 </td></tr>
<tr><td>Altitude: 160.0 ft </td></tr>
- <tr><td>Heading: -999.0 </td></tr>
+ <tr><td>Time: 2001-06-02T03:27:02Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Longitude: -71.109410 </td></tr>
<tr><td>Latitude: 42.466557 </td></tr>
<tr><td>Altitude: 161.0 ft </td></tr>
- <tr><td>Heading: -999.0 </td></tr>
+ <tr><td>Time: 2001-06-02T03:27:02Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Longitude: -71.107117 </td></tr>
<tr><td>Latitude: 42.463495 </td></tr>
<tr><td>Altitude: 205.0 ft </td></tr>
- <tr><td>Heading: -999.0 </td></tr>
+ <tr><td>Time: 2001-06-02T03:27:03Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Longitude: -71.107360 </td></tr>
<tr><td>Latitude: 42.465687 </td></tr>
<tr><td>Altitude: 288.0 ft </td></tr>
- <tr><td>Heading: -999.0 </td></tr>
+ <tr><td>Time: 2001-06-02T03:27:03Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Longitude: -71.106170 </td></tr>
<tr><td>Latitude: 42.459986 </td></tr>
<tr><td>Altitude: 239.3 ft </td></tr>
- <tr><td>Heading: -999.0 </td></tr>
+ <tr><td>Time: 2001-11-16T23:03:38Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Longitude: -71.105116 </td></tr>
<tr><td>Latitude: 42.457616 </td></tr>
<tr><td>Altitude: 239.0 ft </td></tr>
- <tr><td>Heading: -999.0 </td></tr>
+ <tr><td>Time: 2001-06-02T03:27:04Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Longitude: -71.105206 </td></tr>
<tr><td>Latitude: 42.453845 </td></tr>
<tr><td>Altitude: 218.8 ft </td></tr>
- <tr><td>Heading: -999.0 </td></tr>
+ <tr><td>Time: 2001-11-16T23:03:38Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Longitude: -71.105413 </td></tr>
<tr><td>Latitude: 42.451430 </td></tr>
<tr><td>Altitude: 188.9 ft </td></tr>
- <tr><td>Heading: -999.0 </td></tr>
+ <tr><td>Time: 2001-11-16T23:03:38Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Longitude: -71.106158 </td></tr>
<tr><td>Latitude: 42.448448 </td></tr>
<tr><td>Altitude: 204.0 ft </td></tr>
- <tr><td>Heading: -999.0 </td></tr>
+ <tr><td>Time: 2001-06-02T03:27:04Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Longitude: -71.106624 </td></tr>
<tr><td>Latitude: 42.447804 </td></tr>
<tr><td>Altitude: 205.0 ft </td></tr>
- <tr><td>Heading: -999.0 </td></tr>
+ <tr><td>Time: 2001-06-02T03:27:04Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Longitude: -71.108882 </td></tr>
<tr><td>Latitude: 42.444773 </td></tr>
<tr><td>Altitude: 206.0 ft </td></tr>
- <tr><td>Heading: -999.0 </td></tr>
+ <tr><td>Time: 2001-06-02T03:27:05Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Longitude: -71.106301 </td></tr>
<tr><td>Latitude: 42.443592 </td></tr>
<tr><td>Altitude: 182.0 ft </td></tr>
- <tr><td>Heading: -999.0 </td></tr>
+ <tr><td>Time: 2001-06-02T03:27:05Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Longitude: -71.111441 </td></tr>
<tr><td>Latitude: 42.442981 </td></tr>
<tr><td>Altitude: 210.0 ft </td></tr>
- <tr><td>Heading: -999.0 </td></tr>
+ <tr><td>Time: 2001-06-02T03:26:58Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Longitude: -71.110975 </td></tr>
<tr><td>Latitude: 42.442196 </td></tr>
<tr><td>Altitude: 210.0 ft </td></tr>
- <tr><td>Heading: -999.0 </td></tr>
+ <tr><td>Time: 2001-06-02T03:26:55Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Longitude: -71.113220 </td></tr>
<tr><td>Latitude: 42.441754 </td></tr>
<tr><td>Altitude: 185.0 ft </td></tr>
- <tr><td>Heading: -999.0 </td></tr>
+ <tr><td>Time: 2001-06-02T03:26:55Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Longitude: -71.114456 </td></tr>
<tr><td>Latitude: 42.439018 </td></tr>
<tr><td>Altitude: 185.0 ft </td></tr>
- <tr><td>Heading: -999.0 </td></tr>
+ <tr><td>Time: 2001-06-02T03:26:55Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Longitude: -71.113223 </td></tr>
<tr><td>Latitude: 42.436757 </td></tr>
<tr><td>Altitude: 123.4 ft </td></tr>
- <tr><td>Heading: -999.0 </td></tr>
+ <tr><td>Time: 2001-11-28T21:05:28Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Longitude: -71.109942 </td></tr>
<tr><td>Latitude: 42.434980 </td></tr>
<tr><td>Altitude: 148.6 ft </td></tr>
- <tr><td>Heading: -999.0 </td></tr>
+ <tr><td>Time: 2001-11-07T23:53:41Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Longitude: -71.109236 </td></tr>
<tr><td>Latitude: 42.431240 </td></tr>
<tr><td>Altitude: 87.1 ft </td></tr>
- <tr><td>Heading: -999.0 </td></tr>
+ <tr><td>Time: 2001-11-07T23:53:41Z </td></tr>
</table>
]]></description>
<LookAt>
<tr><td>Longitude: -71.107628 </td></tr>
<tr><td>Latitude: 42.430950 </td></tr>
<tr><td>Altitude: 77.0 ft </td></tr>
- <tr><td>Heading: -999.0 </td></tr>
+ <tr><td>Time: 2001-06-02T00:18:15Z </td></tr>
</table>
]]></description>
<LookAt>
</Point>
</Placemark>
</Folder>
- <Folder>
- <name>Tracks</name>
- </Folder>
- <Folder>
- <name>Routes</name>
- </Folder>
</Document>
</kml>
--- /dev/null
+Grid Lat/Lon hddd°mm.mmm'\r
+Datum WGS 84\r
+\r
+Header Name Description Type Position Altitude Depth Proximity Temperature Display Mode Color Symbol Facility City State Country Date Modified Link Categories\r
+\r
+Waypoint 5058ROAD ROAD CROSSING User Waypoint N42 26.400 W71 07.257 54 m Symbol & Name Unknown Waypoint 02/06/2001 00:18:14 \r
+Waypoint 5066 User Waypoint N42 26.333 W71 07.158 45 m Symbol & Name Unknown Crossing 28/11/2001 21:05:28 \r
+Waypoint 5067 User Waypoint N42 26.354 W71 07.183 58 m Symbol & Name Unknown Waypoint 02/06/2001 03:26:55 \r
+Waypoint 5096 User Waypoint N42 26.335 W71 06.970 45 m Symbol & Name Unknown Waypoint 16/11/2001 23:03:38 \r
+Waypoint 5142 User Waypoint N42 26.634 W71 07.324 51 m Symbol & Name Unknown Waypoint 28/11/2001 21:05:28 \r
+Waypoint 5144SUMMIT User Waypoint N42 26.721 W71 07.372 62 m Symbol & Name Unknown Summit 28/11/2001 21:05:28 \r
+Waypoint 5148NANEPA User Waypoint N42 26.986 W71 07.341 120 m Symbol & Name Unknown Waypoint 07/11/2001 23:53:41 \r
+Waypoint 5150TANK WATER TANK User Waypoint N42 26.504 W71 07.302 67 m Symbol & Name Unknown Museum 02/06/2001 00:18:16 \r
+Waypoint 5156 User Waypoint N42 26.838 W71 07.288 128 m Symbol & Name Unknown Waypoint 02/06/2001 03:26:58 \r
+Waypoint 5179DEAD Dead End User Waypoint N42 26.992 W71 07.159 117 m Symbol & Name Unknown Danger Area 02/06/2001 03:26:59 \r
+Waypoint 5224 User Waypoint N42 27.292 W71 07.507 97 m Symbol & Name Unknown Waypoint 02/06/2001 03:26:59 \r
+Waypoint 5229 User Waypoint N42 27.545 W71 07.501 83 m Symbol & Name Unknown Waypoint 02/06/2001 03:26:59 \r
+Waypoint 5236BRIDGE Bridge User Waypoint N42 27.388 W71 07.481 90 m Symbol & Name Unknown Bridge 02/06/2001 03:26:59 \r
+Waypoint 5237 User Waypoint N42 27.419 W71 07.470 83 m Symbol & Name Unknown Waypoint 02/06/2001 03:26:59 \r
+Waypoint 5239ROAD Road User Waypoint N42 27.557 W71 07.476 81 m Symbol & Name Unknown Truck Stop 02/06/2001 03:27:00 \r
+Waypoint 5252PURPLE User Waypoint N42 27.195 W71 07.274 78 m Symbol & Name Unknown Summit 07/11/2001 23:53:41 \r
+Waypoint 5254 User Waypoint N42 27.264 W71 07.261 67 m Symbol & Name Unknown Waypoint 28/11/2001 21:05:28 \r
+Waypoint 5258 User Waypoint N42 27.086 W71 07.306 75 m Symbol & Name Unknown Waypoint 07/11/2001 23:53:41 \r
+Waypoint 5264 User Waypoint N42 27.264 W71 07.241 65 m Symbol & Name Unknown Waypoint 28/11/2001 21:05:28 \r
+Waypoint 526708 User Waypoint N42 27.466 W71 07.264 77 m Symbol & Name Unknown Waypoint 02/06/2001 03:27:00 \r
+Waypoint 526750 User Waypoint N42 27.425 W71 07.220 75 m Symbol & Name Unknown Waypoint 02/06/2001 03:27:00 \r
+Waypoint 5267OBSTAC User Waypoint N42 27.443 W71 07.192 74 m Symbol & Name Unknown Amusement Park 02/06/2001 03:27:00 \r
+Waypoint 527614 User Waypoint N42 27.395 W71 07.182 79 m Symbol & Name Unknown Waypoint 07/11/2001 23:53:41 \r
+Waypoint 527631 User Waypoint N42 27.375 W71 07.163 79 m Symbol & Name Unknown Waypoint 07/11/2001 23:53:41 \r
+Waypoint 5278 User Waypoint N42 27.489 W71 07.150 68 m Symbol & Name Unknown Waypoint 02/06/2001 03:27:00 \r
+Waypoint 5278ROAD Road User Waypoint N42 27.527 W71 07.141 67 m Symbol & Name Unknown Truck Stop 02/06/2001 03:27:01 \r
+Waypoint 5287WATER Reservoir User Waypoint N42 27.464 W71 07.050 68 m Symbol & Name Unknown Swimming Area 02/06/2001 03:27:01 \r
+Waypoint 5289 User Waypoint N42 27.563 W71 07.063 64 m Symbol & Name Unknown Waypoint 02/06/2001 03:27:01 \r
+Waypoint 5299DEAD Dead End User Waypoint N42 27.578 W71 06.993 69 m Symbol & Name Unknown Danger Area 02/06/2001 03:27:01 \r
+Waypoint 5374FIRE User Waypoint N42 27.851 W71 07.191 53 m Symbol & Name Unknown Waypoint 28/11/2001 21:05:28 \r
+Waypoint 5376 User Waypoint N42 27.939 W71 07.166 56 m Symbol & Name Unknown Waypoint 02/06/2001 03:27:02 \r
+Waypoint 5376BRIDGE Bridge User Waypoint N42 27.945 W71 07.190 55 m Symbol & Name Unknown Bridge 02/06/2001 03:27:01 \r
+Waypoint 5376DEAD Dead End User Waypoint N42 27.929 W71 07.150 57 m Symbol & Name Unknown Danger Area 02/06/2001 03:27:02 \r
+Waypoint 5376STREAM User Waypoint N42 27.955 W71 07.161 65 m Symbol & Name Unknown Bridge 07/11/2001 23:53:41 \r
+Waypoint 6006 User Waypoint N42 26.341 W71 06.869 56 m Symbol & Name Unknown Waypoint 02/06/2001 03:26:55 \r
+Waypoint 6006BLUE User Waypoint N42 26.316 W71 06.890 46 m Symbol & Name Unknown Waypoint 28/11/2001 21:05:28 \r
+Waypoint 6014MEADOW User Waypoint N42 26.205 W71 06.795 38 m Symbol & Name Unknown Waypoint 28/11/2001 21:05:28 \r
+Waypoint 6016 Bike Loop Connector User Waypoint N42 26.320 W71 06.846 43 m Symbol & Name Unknown Waypoint 28/11/2001 21:05:28 \r
+Waypoint 6029 User Waypoint N42 26.505 W71 06.795 56 m Symbol & Name Unknown Waypoint 02/06/2001 03:26:55 \r
+Waypoint 6042CROSS Crossing User Waypoint N42 26.128 W71 06.581 45 m Symbol & Name Unknown Crossing 02/06/2001 03:27:05 \r
+Waypoint 6053 User Waypoint N42 26.175 W71 06.546 50 m Symbol & Name Unknown Waypoint 02/06/2001 03:27:05 \r
+Waypoint 6066 User Waypoint N42 26.355 W71 06.452 26 m Symbol & Name Unknown Waypoint 02/06/2001 03:26:57 \r
+Waypoint 6067 User Waypoint N42 26.386 W71 06.457 34 m Symbol & Name Unknown Waypoint 02/06/2001 03:26:57 \r
+Waypoint 6071 User Waypoint N42 26.086 W71 06.354 30 m Symbol & Name Unknown Waypoint 02/06/2001 03:26:57 \r
+Waypoint 6073 User Waypoint N42 25.998 W71 06.397 15 m Symbol & Name Unknown Waypoint 02/06/2001 03:26:56 \r
+Waypoint 6077LOGS Log Crossing User Waypoint N42 26.370 W71 06.395 32 m Symbol & Name Unknown Amusement Park 02/06/2001 00:18:16 \r
+Waypoint 6084 User Waypoint N42 26.240 W71 06.288 38 m Symbol & Name Unknown Waypoint 02/06/2001 03:26:57 \r
+Waypoint 6121DEAD Dead End User Waypoint N42 26.586 W71 06.762 56 m Symbol & Name Unknown Danger Area 02/06/2001 03:26:57 \r
+Waypoint 6130 User Waypoint N42 26.532 W71 06.660 64 m Symbol & Name Unknown Waypoint 02/06/2001 03:26:55 \r
+Waypoint 6131 User Waypoint N42 26.579 W71 06.688 64 m Symbol & Name Unknown Waypoint 02/06/2001 03:26:58 \r
+Waypoint 6153 User Waypoint N42 26.686 W71 06.535 63 m Symbol & Name Unknown Waypoint 02/06/2001 03:27:05 \r
+Waypoint 6155DEAD Dead End User Waypoint N42 26.808 W71 06.529 61 m Symbol & Name Unknown Danger Area 02/06/2001 03:27:04 \r
+Waypoint 6171 User Waypoint N42 26.615 W71 06.380 55 m Symbol & Name Unknown Waypoint 02/06/2001 03:27:05 \r
+Waypoint 6176 User Waypoint N42 26.868 W71 06.399 62 m Symbol & Name Unknown Waypoint 02/06/2001 03:27:04 \r
+Waypoint 6177 User Waypoint N42 26.907 W71 06.371 62 m Symbol & Name Unknown Waypoint 02/06/2001 03:27:04 \r
+Waypoint 6181CROSS Crossing User Waypoint N42 26.580 W71 06.354 53 m Symbol & Name Unknown Crossing 02/06/2001 03:27:05 \r
+Waypoint 6272 User Waypoint N42 27.205 W71 06.409 70 m Symbol & Name Unknown Waypoint 02/06/2001 03:26:55 \r
+Waypoint 6278 User Waypoint N42 27.498 W71 06.408 70 m Symbol & Name Unknown Waypoint 02/06/2001 03:27:04 \r
+Waypoint 6280 User Waypoint N42 27.086 W71 06.326 58 m Symbol & Name Unknown Waypoint 16/11/2001 23:03:38 \r
+Waypoint 6283 User Waypoint N42 27.231 W71 06.314 67 m Symbol & Name Unknown Waypoint 16/11/2001 23:03:38 \r
+Waypoint 6289 User Waypoint N42 27.599 W71 06.372 73 m Symbol & Name Unknown Waypoint 16/11/2001 23:03:38 \r
+Waypoint 6297 User Waypoint N42 27.457 W71 06.309 73 m Symbol & Name Unknown Waypoint 02/06/2001 03:27:04 \r
+Waypoint 6328 User Waypoint N42 28.027 W71 06.816 54 m Symbol & Name Unknown Waypoint 02/06/2001 03:27:02 \r
+Waypoint 6353DEAD Dead End User Waypoint N42 27.766 W71 06.601 47 m Symbol & Name Unknown Danger Area 02/06/2001 03:27:03 \r
+Waypoint 6354 User Waypoint N42 27.852 W71 06.593 44 m Symbol & Name Unknown Waypoint 02/06/2001 03:27:03 \r
+Waypoint 635722 User Waypoint N42 27.988 W71 06.606 49 m Symbol & Name Unknown Waypoint 02/06/2001 03:27:02 \r
+Waypoint 635783 User Waypoint N42 27.993 W71 06.566 49 m Symbol & Name Unknown Waypoint 02/06/2001 03:27:02 \r
+Waypoint 6373 User Waypoint N42 27.810 W71 06.429 62 m Symbol & Name Unknown Waypoint 02/06/2001 03:27:03 \r
+Waypoint 6634 User Waypoint N42 24.063 W71 06.616 4 m Symbol & Name Unknown Waypoint 02/06/2001 03:26:56 \r
+Waypoint 6979 User Waypoint N42 25.957 W71 06.393 13 m Symbol & Name Unknown Waypoint 02/06/2001 03:26:56 \r
+Waypoint 6997 User Waypoint N42 25.862 W71 06.475 34 m Symbol & Name Unknown Waypoint 16/11/2001 23:03:38 \r
+Waypoint BEAR HILL BEAR HILL TOWER User Waypoint N42 27.941 W71 06.443 88 m Symbol & Name Unknown Tall Tower 02/06/2001 03:27:03 \r
+Waypoint BELLEVUE User Waypoint N42 25.857 W71 06.459 23 m Symbol & Name Unknown Parking Area 02/06/2001 00:18:15 \r
+Waypoint DARKHOLLPO Dark Hollow Pond User Waypoint N42 27.511 W71 06.220 Symbol & Name Unknown Fishing Area 16/07/2005 20:53:40 \r
+Waypoint GATE14 Gate 14 User Waypoint N42 27.072 W71 07.598 111 m Symbol & Name Unknown Truck Stop 02/06/2001 03:26:59 \r
+Waypoint GATE16 Gate 16 User Waypoint N42 27.510 W71 07.326 78 m Symbol & Name Unknown Truck Stop 02/06/2001 03:27:00 \r
+Waypoint GATE17 Gate 17 User Waypoint N42 27.562 W71 07.156 66 m Symbol & Name Unknown Truck Stop 02/06/2001 03:27:01 \r
+Waypoint GATE19 Gate 19 User Waypoint N42 27.981 W71 07.156 57 m Symbol & Name Unknown Truck Stop 02/06/2001 03:27:02 \r
+Waypoint GATE21 Gate 21 User Waypoint N42 28.119 W71 06.463 49 m Symbol & Name Unknown Truck Stop 02/06/2001 03:27:03 \r
+Waypoint GATE24 Gate 24 User Waypoint N42 27.403 W71 06.180 81 m Symbol & Name Unknown Truck Stop 02/06/2001 03:27:03 \r
+Waypoint GATE5 Gate 5 User Waypoint N42 25.851 W71 06.463 22 m Symbol & Name Unknown Truck Stop 28/11/2001 21:05:28 \r
+Waypoint GATE6 User Waypoint N42 25.874 W71 06.556 27 m Symbol & Name Unknown Waypoint 07/11/2001 23:53:41 \r
+Waypoint PANTHRCAVE User Waypoint N42 26.099 W71 06.598 45 m Symbol & Name Unknown Tunnel 07/11/2001 23:53:41 \r
+Waypoint SHEEPFOLD Sheepfold Parking Lot User Waypoint N42 27.205 W71 06.408 70 m Symbol & Name Unknown Parking Area 02/06/2001 00:18:13 \r
+Waypoint SOAPBOX Soap Box Derby Track User Waypoint N42 27.357 W71 06.451 64 m Symbol & Name Unknown Cemetery 02/06/2001 03:27:04 \r
+\r
+\r
+Header Name Length Course Waypoints Link\r
+\r
+Route BELLEVUE 11.2 km 0° true 46 waypoints \r
+\r
+Header Waypoint Name Distance Leg Length Course\r
+\r
+Route Waypoint BELLEVUE 0 m\r
+Route Waypoint GATE6 136 m 136 m 284° true\r
+Route Waypoint PANTHRCAVE 556 m 420 m 352° true\r
+Route Waypoint 6014MEADOW 891 m 334 m 306° true\r
+Route Waypoint 6006 1.2 km 271 m 338° true\r
+Route Waypoint 6006BLUE 1.2 km 55 m 211° true\r
+Route Waypoint 5096 1.3 km 116 m 288° true\r
+Route Waypoint 5066 1.6 km 257 m 269° true\r
+Route Waypoint 5067 1.6 km 52 m 319° true\r
+Route Waypoint 5058ROAD 1.8 km 133 m 310° true\r
+Route Waypoint 5150TANK 2.0 km 203 m 342° true\r
+Route Waypoint 5142 2.2 km 244 m 353° true\r
+Route Waypoint 5144SUMMIT 2.4 km 175 m 338° true\r
+Route Waypoint 5156 2.6 km 245 m 28° true\r
+Route Waypoint 5148NANEPA 2.9 km 284 m 345° true\r
+Route Waypoint 5258 3.1 km 193 m 14° true\r
+Route Waypoint 5252PURPLE 3.3 km 207 m 12° true\r
+Route Waypoint 527631 3.7 km 367 m 25° true\r
+Route Waypoint 527614 3.7 km 46 m 325° true\r
+Route Waypoint 5267OBSTAC 3.8 km 90 m 351° true\r
+Route Waypoint 5278 3.9 km 103 m 35° true\r
+Route Waypoint 5289 4.1 km 181 m 41° true\r
+Route Waypoint 5374FIRE 4.7 km 563 m 342° true\r
+Route Waypoint 5376 4.8 km 167 m 12° true\r
+Route Waypoint 5376STREAM 4.9 km 30 m 11° true\r
+Route Waypoint 6328 5.4 km 491 m 74° true\r
+Route Waypoint 635722 5.7 km 297 m 104° true\r
+Route Waypoint 635783 5.7 km 55 m 79° true\r
+Route Waypoint 6373 6.1 km 389 m 151° true\r
+Route Waypoint BEAR HILL 6.3 km 245 m 355° true\r
+Route Waypoint 6289 7.0 km 642 m 171° true\r
+Route Waypoint 6297 7.3 km 278 m 162° true\r
+Route Waypoint 6283 7.7 km 420 m 181° true\r
+Route Waypoint 6280 8.0 km 269 m 184° true\r
+Route Waypoint 6177 8.3 km 338 m 190° true\r
+Route Waypoint 6176 8.4 km 81 m 208° true\r
+Route Waypoint 6153 8.8 km 385 m 209° true\r
+Route Waypoint 6171 9.0 km 249 m 122° true\r
+Route Waypoint 6131 9.4 km 428 m 261° true\r
+Route Waypoint 6130 9.5 km 95 m 156° true\r
+Route Waypoint 6029 9.7 km 191 m 255° true\r
+Route Waypoint 6006 10.0 km 321 m 198° true\r
+Route Waypoint 6014MEADOW 10.3 km 271 m 158° true\r
+Route Waypoint PANTHRCAVE 10.7 km 334 m 126° true\r
+Route Waypoint GATE6 11.1 km 420 m 172° true\r
+Route Waypoint BELLEVUE 11.2 km 136 m 104° true\r
+\r
+\r
+Header Name Start Time Elapsed Time Length Average Speed Link\r
+\r
+Track - Trk from .gpx file 25/05/2002 17:06:21 1:59:36 7.7 km 4 kph \r
+\r
+Header Position Time Altitude Depth Leg Length Leg Time Leg Speed Leg Course\r
+\r
+Trackpoint N30 03.731 W91 36.620 25/05/2002 17:06:21 1 m 0.0 m\r
+Trackpoint N30 03.767 W91 36.633 25/05/2002 17:09:55 0.0 m 70 m 0:03:34 1.2 kph 343° true\r
+Trackpoint N30 03.762 W91 36.495 25/05/2002 17:12:00 0.0 m 222 m 0:02:05 6 kph 92° true\r
+Trackpoint N30 03.740 W91 36.442 25/05/2002 17:12:48 0.0 m 94 m 0:00:48 7 kph 116° true\r
+Trackpoint N30 03.692 W91 36.316 25/05/2002 17:14:41 0.0 m 221 m 0:01:53 7 kph 114° true\r
+Trackpoint N30 03.587 W91 35.963 25/05/2002 17:17:16 0.0 m 599 m 0:02:35 14 kph 109° true\r
+Trackpoint N30 03.468 W91 35.800 25/05/2002 17:17:46 0.0 m 342 m 0:00:30 41 kph 130° true\r
+Trackpoint N30 03.323 W91 35.693 25/05/2002 17:18:20 0.0 m 319 m 0:00:34 34 kph 147° true\r
+Trackpoint N30 03.233 W91 35.556 25/05/2002 17:19:01 0.0 m 276 m 0:00:41 24 kph 127° true\r
+Trackpoint N30 02.984 W91 35.384 25/05/2002 17:20:46 0.0 m 538 m 0:01:45 18 kph 149° true\r
+Trackpoint N30 02.941 W91 35.392 25/05/2002 17:21:10 0.0 m 81 m 0:00:24 12 kph 189° true\r
+Trackpoint N30 02.928 W91 35.575 25/05/2002 17:21:51 0.0 m 295 m 0:00:41 26 kph 265° true\r
+Trackpoint N30 02.774 W91 35.786 25/05/2002 17:22:35 0.0 m 443 m 0:00:44 36 kph 230° true\r
+Trackpoint N30 02.731 W91 35.922 25/05/2002 17:23:08 0.0 m 233 m 0:00:33 25 kph 250° true\r
+Trackpoint N30 02.838 W91 36.015 25/05/2002 18:04:23 0.0 m 248 m 0:41:15 0.4 kph 323° true\r
+Trackpoint N30 02.820 W91 35.977 25/05/2002 18:06:04 2 m 0.0 m 70 m 0:01:41 2 kph 119° true\r
+Trackpoint N30 02.786 W91 35.967 25/05/2002 18:07:06 0.0 m 65 m 0:01:02 4 kph 166° true\r
+Trackpoint N30 02.772 W91 35.936 25/05/2002 18:08:18 1 m 0.0 m 56 m 0:01:12 3 kph 117° true\r
+Trackpoint N30 02.782 W91 35.863 25/05/2002 18:10:20 0.0 m 119 m 0:02:02 4 kph 81° true\r
+Trackpoint N30 02.781 W91 35.829 25/05/2002 18:11:09 0.0 m 55 m 0:00:49 4 kph 92° true\r
+Trackpoint N30 02.807 W91 35.779 25/05/2002 18:12:18 0.0 m 94 m 0:01:09 5 kph 59° true\r
+Trackpoint N30 02.847 W91 35.711 25/05/2002 18:14:22 0.0 m 132 m 0:02:04 4 kph 56° true\r
+Trackpoint N30 02.868 W91 35.685 25/05/2002 18:15:04 2 m 0.0 m 57 m 0:00:42 5 kph 47° true\r
+Trackpoint N30 02.895 W91 35.644 25/05/2002 18:16:14 1 m 0.0 m 83 m 0:01:10 4 kph 53° true\r
+Trackpoint N30 02.921 W91 35.627 25/05/2002 18:17:01 1 m 0.0 m 55 m 0:00:47 4 kph 30° true\r
+Trackpoint N30 02.961 W91 35.630 25/05/2002 18:18:07 0.0 m 74 m 0:01:06 4 kph 356° true\r
+Trackpoint N30 03.019 W91 35.638 25/05/2002 18:19:51 2 m 0.0 m 108 m 0:01:44 4 kph 353° true\r
+Trackpoint N30 03.047 W91 35.646 25/05/2002 18:20:39 0.0 m 53 m 0:00:48 4 kph 346° true\r
+Trackpoint N30 03.074 W91 35.661 25/05/2002 18:21:24 0.0 m 56 m 0:00:45 4 kph 334° true\r
+Trackpoint N30 03.108 W91 35.661 25/05/2002 18:22:17 0.0 m 63 m 0:00:53 4 kph 0° true\r
+Trackpoint N30 03.133 W91 35.679 25/05/2002 18:23:18 0.0 m 55 m 0:01:01 3 kph 328° true\r
+Trackpoint N30 03.181 W91 35.680 25/05/2002 18:24:37 0.0 m 89 m 0:01:19 4 kph 359° true\r
+Trackpoint N30 03.292 W91 35.711 25/05/2002 18:28:13 6 m 0.0 m 212 m 0:03:36 4 kph 346° true\r
+Trackpoint N30 03.224 W91 35.695 25/05/2002 18:31:36 2 m 0.0 m 129 m 0:03:23 2 kph 168° true\r
+Trackpoint N30 03.191 W91 35.686 25/05/2002 18:32:56 0.0 m 63 m 0:01:20 3 kph 167° true\r
+Trackpoint N30 03.158 W91 35.689 25/05/2002 18:34:02 0.0 m 61 m 0:01:06 3 kph 184° true\r
+Trackpoint N30 03.147 W91 35.725 25/05/2002 18:36:03 0.0 m 61 m 0:02:01 2 kph 251° true\r
+Trackpoint N30 03.149 W91 35.757 25/05/2002 18:36:48 0.0 m 52 m 0:00:45 4 kph 274° true\r
+Trackpoint N30 03.159 W91 35.806 25/05/2002 18:37:52 1 m 0.0 m 81 m 0:01:04 5 kph 283° true\r
+Trackpoint N30 03.188 W91 35.870 25/05/2002 18:39:18 0.0 m 116 m 0:01:26 5 kph 298° true\r
+Trackpoint N30 03.217 W91 35.877 25/05/2002 18:40:15 0.0 m 55 m 0:00:57 3 kph 348° true\r
+Trackpoint N30 03.238 W91 35.865 25/05/2002 18:41:25 6 m 0.0 m 43 m 0:01:10 2 kph 26° true\r
+Trackpoint N30 03.217 W91 35.884 25/05/2002 18:42:37 0.0 m 49 m 0:01:12 2 kph 218° true\r
+Trackpoint N30 03.192 W91 35.874 25/05/2002 18:44:01 0.0 m 49 m 0:01:24 2 kph 161° true\r
+Trackpoint N30 03.169 W91 35.850 25/05/2002 18:45:53 0.0 m 57 m 0:01:52 2 kph 138° true\r
+Trackpoint N30 03.154 W91 35.815 25/05/2002 18:46:54 0.0 m 63 m 0:01:01 4 kph 116° true\r
+Trackpoint N30 03.140 W91 35.785 25/05/2002 18:47:42 0.0 m 55 m 0:00:48 4 kph 118° true\r
+Trackpoint N30 03.135 W91 35.740 25/05/2002 18:48:41 0.0 m 73 m 0:00:59 4 kph 97° true\r
+Trackpoint N30 03.133 W91 35.700 25/05/2002 18:49:52 0.0 m 64 m 0:01:11 3 kph 93° true\r
+Trackpoint N30 03.113 W91 35.681 25/05/2002 18:50:49 0.0 m 48 m 0:00:57 3 kph 141° true\r
+Trackpoint N30 03.063 W91 35.663 25/05/2002 18:52:14 0.0 m 97 m 0:01:25 4 kph 163° true\r
+Trackpoint N30 03.034 W91 35.653 25/05/2002 18:52:56 0.0 m 56 m 0:00:42 5 kph 163° true\r
+Trackpoint N30 03.011 W91 35.645 25/05/2002 18:53:38 0.0 m 45 m 0:00:42 4 kph 163° true\r
+Trackpoint N30 02.946 W91 35.622 25/05/2002 18:55:11 0.0 m 126 m 0:01:33 5 kph 163° true\r
+Trackpoint N30 02.907 W91 35.654 25/05/2002 18:56:32 0.0 m 89 m 0:01:21 4 kph 215° true\r
+Trackpoint N30 02.885 W91 35.684 25/05/2002 18:57:24 0.0 m 63 m 0:00:52 4 kph 230° true\r
+Trackpoint N30 02.850 W91 35.726 25/05/2002 18:58:40 7 m 0.0 m 94 m 0:01:16 4 kph 226° true\r
+Trackpoint N30 02.824 W91 35.759 25/05/2002 18:59:28 0.0 m 72 m 0:00:48 5 kph 228° true\r
+Trackpoint N30 02.798 W91 35.795 25/05/2002 19:00:22 0.0 m 75 m 0:00:54 5 kph 230° true\r
+Trackpoint N30 02.784 W91 35.858 25/05/2002 19:01:41 0.0 m 105 m 0:01:19 5 kph 256° true\r
+Trackpoint N30 02.774 W91 35.907 25/05/2002 19:02:48 0.0 m 81 m 0:01:07 4 kph 257° true\r
+Trackpoint N30 02.779 W91 35.937 25/05/2002 19:03:43 0.0 m 49 m 0:00:55 3 kph 281° true\r
+Trackpoint N30 02.807 W91 35.956 25/05/2002 19:04:49 0.0 m 60 m 0:01:06 3 kph 330° true\r
+Trackpoint N30 02.828 W91 35.979 25/05/2002 19:05:57 0.0 m 54 m 0:01:08 3 kph 317° true\r
--- /dev/null
+Version 2:G7T\r
+#Sat Apr 14 21:27:12 2007 GMT\r
+#Sinnotts Radius=6371.0 km\r
+D WGS-72\r
+M UTM\r
+Z 0.000000\r
+A Feet ->Altitude/Depth units for this file\r
+#Velocity units Statute miles per hour\r
+C Category 1,Category 2,Category 3,Category 4,Category 5,Category 6,Category 7,Category 8,Category 9,Category 10,Category 11,Category 12,Category 13,Category 14,Category 15,Category 16\r
+\r
+W 5058ROAD 19T 325561.6 4700804.1 Sat Jun 02 00:18:14 2001 ROAD CROSSING ^ 18^Black ^S+N^0\r
+cA 5058ROAD|||||\r
+cB |||0|0|1.0e25\r
+cC 177.000001|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.415 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5058ROAD 19T 325561.6 4700804.1 Sat Jun 02 00:18:14 2001 ROAD CROSSING ^ 18^Black ^S+N^0\r
+cA 5058ROAD|||||\r
+cB |||0|0|1.0e25\r
+cC 177.000001|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.415 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5066 19T 325694.0 4700676.9 Wed Nov 28 21:05:28 2001 5066 ^ 8238^Black ^S+N^0\r
+cA 5066|||||\r
+cB |||0|0|1.0e25\r
+cC 146.281325|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.400 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5066 19T 325694.0 4700676.9 Wed Nov 28 21:05:28 2001 ^ 8238^Black ^S+N^0\r
+cA 5066|||||\r
+cB |||0|0|1.0e25\r
+cC 146.281325|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.400 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5067 19T 325661.1 4700716.5 Sat Jun 02 03:26:55 2001 ^ 18^Black ^S+N^0\r
+cA 5067|||||\r
+cB |||0|0|1.0e25\r
+cC 189.000002|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.400 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5067 19T 325661.1 4700716.5 Sat Jun 02 03:26:55 2001 5067 ^ 18^Black ^S+N^0\r
+cA 5067|||||\r
+cB |||0|0|1.0e25\r
+cC 189.000002|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.400 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5096 19T 325951.7 4700674.8 Fri Nov 16 23:03:38 2001 5096 ^ 18^Black ^S+N^0\r
+cA 5096|||||\r
+cB |||0|0|1.0e25\r
+cC 147.069896|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.276 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5096 19T 325951.7 4700674.8 Fri Nov 16 23:03:38 2001 ^ 18^Black ^S+N^0\r
+cA 5096|||||\r
+cB |||0|0|1.0e25\r
+cC 147.069896|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.276 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5142 19T 325480.4 4701240.7 Wed Nov 28 21:05:28 2001 ^ 18^Black ^S+N^0\r
+cA 5142|||||\r
+cB |||0|0|1.0e25\r
+cC 165.993197|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.285 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5142 19T 325480.4 4701240.7 Wed Nov 28 21:05:28 2001 5142 ^ 18^Black ^S+N^0\r
+cA 5142|||||\r
+cB |||0|0|1.0e25\r
+cC 165.993197|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.285 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5144SUMMIT 19T 325418.6 4701403.9 Wed Nov 28 21:05:28 2001 ^ 8246^Black ^S+N^0\r
+cA 5144SUMMIT|||||\r
+cB |||0|0|1.0e25\r
+cC 202.263459|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.252 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5144SUMMIT 19T 325418.6 4701403.9 Wed Nov 28 21:05:28 2001 Summit ^ 8246^Black ^S+N^0\r
+cA 5144SUMMIT|||||\r
+cB |||0|0|1.0e25\r
+cC 202.263459|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.252 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5148NANEPA 19T 325474.0 4701892.1 Wed Nov 07 23:53:41 2001 Nanepashemet Road Crossing ^ 18^Black ^S+N^0\r
+cA 5148NANEPA|||||\r
+cB |||0|0|1.0e25\r
+cC 393.074416|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.036 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5148NANEPA 19T 325474.0 4701892.1 Wed Nov 07 23:53:41 2001 ^ 18^Black ^S+N^0\r
+cA 5148NANEPA|||||\r
+cB |||0|0|1.0e25\r
+cC 393.074416|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.036 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5150TANK 19T 325504.6 4700998.2 Sat Jun 02 00:18:16 2001 WATER TANK ^ 8211^Black ^S+N^0\r
+cA 5150TANK|||||\r
+cB |||0|0|1.0e25\r
+cC 221.000006|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.367 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5150TANK 19T 325504.6 4700998.2 Sat Jun 02 00:18:16 2001 WATER TANK ^ 8211^Black ^S+N^0\r
+cA 5150TANK|||||\r
+cB |||0|0|1.0e25\r
+cC 221.000006|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.367 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5156 19T 325538.9 4701616.4 Sat Jun 02 03:26:58 2001 ^ 18^Black ^S+N^0\r
+cA 5156|||||\r
+cB |||0|0|1.0e25\r
+cC 418.999990|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.111 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5156 19T 325538.9 4701616.4 Sat Jun 02 03:26:58 2001 5156 ^ 18^Black ^S+N^0\r
+cA 5156|||||\r
+cB |||0|0|1.0e25\r
+cC 418.999990|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.111 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5179DEAD 19T 325722.8 4701897.1 Sat Jun 02 03:26:59 2001 Dead End ^ 166^Black ^S+N^0\r
+cA 5179DEAD|||||\r
+cB |||0|0|1.0e25\r
+cC 383.999992|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.913 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5224 19T 325260.1 4702465.0 Sat Jun 02 03:26:59 2001 5224 ^ 18^Black ^S+N^0\r
+cA 5224|||||\r
+cB |||0|0|1.0e25\r
+cC 317.999997|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.918 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5229 19T 325280.5 4702931.9 Sat Jun 02 03:26:59 2001 5229 ^ 18^Black ^S+N^0\r
+cA 5229|||||\r
+cB |||0|0|1.0e25\r
+cC 270.999999|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.727 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5236BRIDGE 19T 325300.9 4702641.4 Sat Jun 02 03:26:59 2001 Bridge ^ 8233^Black ^S+N^0\r
+cA 5236BRIDGE|||||\r
+cB |||0|0|1.0e25\r
+cC 295.000001|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.830 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5237 19T 325316.9 4702697.6 Sat Jun 02 03:26:59 2001 5237 ^ 18^Black ^S+N^0\r
+cA 5237|||||\r
+cB |||0|0|1.0e25\r
+cC 272.000005|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.800 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5239ROAD 19T 325315.1 4702953.1 Sat Jun 02 03:27:00 2001 Road ^ 176^Black ^S+N^0\r
+cA 5239ROAD|||||\r
+cB |||0|0|1.0e25\r
+cC 265.999992|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.702 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5252PURPLE 19T 325574.9 4702277.5 Wed Nov 07 23:53:41 2001 ^ 8246^Black ^S+N^0\r
+cA 5252PURPLE|||||\r
+cB |||0|0|1.0e25\r
+cC 255.879480|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.838 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5252PURPLE 19T 325574.9 4702277.5 Wed Nov 07 23:53:41 2001 Purple Rock Hill ^ 8246^Black ^S+N^0\r
+cA 5252PURPLE|||||\r
+cB |||0|0|1.0e25\r
+cC 255.879480|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.838 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5254 19T 325596.2 4702404.2 Wed Nov 28 21:05:28 2001 5254 ^ 18^Black ^S+N^0\r
+cA 5254|||||\r
+cB |||0|0|1.0e25\r
+cC 218.821047|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.778 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5258 19T 325525.9 4702077.2 Wed Nov 07 23:53:41 2001 5258 ^ 18^Black ^S+N^0\r
+cA 5258|||||\r
+cB |||0|0|1.0e25\r
+cC 244.840687|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.939 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5258 19T 325525.9 4702077.2 Wed Nov 07 23:53:41 2001 ^ 18^Black ^S+N^0\r
+cA 5258|||||\r
+cB |||0|0|1.0e25\r
+cC 244.840687|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.939 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5264 19T 325623.4 4702403.8 Wed Nov 28 21:05:28 2001 5264 ^ 18^Black ^S+N^0\r
+cA 5264|||||\r
+cB |||0|0|1.0e25\r
+cC 214.090422|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.765 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 526708 19T 325601.0 4702777.4 Sat Jun 02 03:27:00 2001 526708 ^ 18^Black ^S+N^0\r
+cA 526708|||||\r
+cB |||0|0|1.0e25\r
+cC 253.999990|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.632 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 526750 19T 325659.4 4702701.3 Sat Jun 02 03:27:00 2001 526750 ^ 18^Black ^S+N^0\r
+cA 526750|||||\r
+cB |||0|0|1.0e25\r
+cC 245.000008|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.633 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5267OBSTAC 19T 325698.7 4702733.5 Sat Jun 02 03:27:00 2001 Obstacle ^ 8204^Black ^S+N^0\r
+cA 5267OBSTAC|||||\r
+cB |||0|0|1.0e25\r
+cC 241.999989|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.601 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5267OBSTAC 19T 325698.7 4702733.5 Sat Jun 02 03:27:00 2001 ^ 8204^Black ^S+N^0\r
+cA 5267OBSTAC|||||\r
+cB |||0|0|1.0e25\r
+cC 241.999989|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.601 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 527614 19T 325710.4 4702644.8 Wed Nov 07 23:53:41 2001 ^ 18^Black ^S+N^0\r
+cA 527614|||||\r
+cB |||0|0|1.0e25\r
+cC 258.245193|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.630 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 527614 19T 325710.4 4702644.8 Wed Nov 07 23:53:41 2001 527614 ^ 18^Black ^S+N^0\r
+cA 527614|||||\r
+cB |||0|0|1.0e25\r
+cC 258.245193|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.630 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 527631 19T 325735.7 4702606.4 Wed Nov 07 23:53:41 2001 ^ 18^Black ^S+N^0\r
+cA 527631|||||\r
+cB |||0|0|1.0e25\r
+cC 258.245193|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.632 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 527631 19T 325735.7 4702606.4 Wed Nov 07 23:53:41 2001 527631 ^ 18^Black ^S+N^0\r
+cA 527631|||||\r
+cB |||0|0|1.0e25\r
+cC 258.245193|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.632 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5278 19T 325759.2 4702816.5 Sat Jun 02 03:27:00 2001 ^ 18^Black ^S+N^0\r
+cA 5278|||||\r
+cB |||0|0|1.0e25\r
+cC 224.000000|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.540 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5278 19T 325759.2 4702816.5 Sat Jun 02 03:27:00 2001 5278 ^ 18^Black ^S+N^0\r
+cA 5278|||||\r
+cB |||0|0|1.0e25\r
+cC 224.000000|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.540 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5278ROAD 19T 325772.8 4702886.6 Sat Jun 02 03:27:01 2001 Road ^ 176^Black ^S+N^0\r
+cA 5278ROAD|||||\r
+cB |||0|0|1.0e25\r
+cC 221.000006|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.506 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5287WATER 19T 325894.0 4702767.1 Sat Jun 02 03:27:01 2001 Reservoir ^ 163^Black ^S+N^0\r
+cA 5287WATER|||||\r
+cB |||0|0|1.0e25\r
+cC 222.999993|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.493 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5289 19T 325881.1 4702950.0 Sat Jun 02 03:27:01 2001 5289 ^ 18^Black ^S+N^0\r
+cA 5289|||||\r
+cB |||0|0|1.0e25\r
+cC 210.000011|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.429 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5289 19T 325881.1 4702950.0 Sat Jun 02 03:27:01 2001 ^ 18^Black ^S+N^0\r
+cA 5289|||||\r
+cB |||0|0|1.0e25\r
+cC 210.000011|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.429 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5299DEAD 19T 325978.0 4702975.6 Sat Jun 02 03:27:01 2001 Dead End ^ 166^Black ^S+N^0\r
+cA 5299DEAD|||||\r
+cB |||0|0|1.0e25\r
+cC 228.000000|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.372 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5374FIRE 19T 325718.9 4703488.0 Wed Nov 28 21:05:28 2001 5374FIRE ^ 18^Black ^S+N^0\r
+cA 5374FIRE|||||\r
+cB |||0|0|1.0e25\r
+cC 173.877706|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.299 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5374FIRE 19T 325718.9 4703488.0 Wed Nov 28 21:05:28 2001 ^ 18^Black ^S+N^0\r
+cA 5374FIRE|||||\r
+cB |||0|0|1.0e25\r
+cC 173.877706|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.299 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5376 19T 325758.3 4703650.1 Sat Jun 02 03:27:02 2001 5376 ^ 18^Black ^S+N^0\r
+cA 5376|||||\r
+cB |||0|0|1.0e25\r
+cC 185.000002|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.217 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5376 19T 325758.3 4703650.1 Sat Jun 02 03:27:02 2001 ^ 18^Black ^S+N^0\r
+cA 5376|||||\r
+cB |||0|0|1.0e25\r
+cC 185.000002|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.217 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5376BRIDGE 19T 325724.4 4703663.0 Sat Jun 02 03:27:01 2001 Bridge ^ 8233^Black ^S+N^0\r
+cA 5376BRIDGE|||||\r
+cB |||0|0|1.0e25\r
+cC 181.999995|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.229 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5376DEAD 19T 325778.5 4703631.2 Sat Jun 02 03:27:02 2001 Dead End ^ 166^Black ^S+N^0\r
+cA 5376DEAD|||||\r
+cB |||0|0|1.0e25\r
+cC 187.000002|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.215 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5376STREAM 19T 325764.8 4703679.1 Wed Nov 07 23:53:41 2001 Stream Crossing ^ 8233^Black ^S+N^0\r
+cA 5376STREAM|||||\r
+cB |||0|0|1.0e25\r
+cC 211.724709|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.203 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5376STREAM 19T 325764.8 4703679.1 Wed Nov 07 23:53:41 2001 ^ 8233^Black ^S+N^0\r
+cA 5376STREAM|||||\r
+cB |||0|0|1.0e25\r
+cC 211.724709|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.203 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6006 19T 326091.0 4700682.6 Sat Jun 02 03:26:55 2001 ^ 18^Black ^S+N^0\r
+cA 6006|||||\r
+cB |||0|0|1.0e25\r
+cC 185.000002|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.205 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6006 19T 326091.0 4700682.6 Sat Jun 02 03:26:55 2001 ^ 18^Black ^S+N^0\r
+cA 6006|||||\r
+cB |||0|0|1.0e25\r
+cC 185.000002|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.205 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6006 19T 326091.0 4700682.6 Sat Jun 02 03:26:55 2001 600698 ^ 18^Black ^S+N^0\r
+cA 6006|||||\r
+cB |||0|0|1.0e25\r
+cC 185.000002|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.205 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6006BLUE 19T 326061.3 4700636.2 Wed Nov 28 21:05:28 2001 ^ 18^Black ^S+N^0\r
+cA 6006BLUE|||||\r
+cB |||0|0|1.0e25\r
+cC 151.012351|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.237 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6006BLUE 19T 326061.3 4700636.2 Wed Nov 28 21:05:28 2001 6006BLUE ^ 18^Black ^S+N^0\r
+cA 6006BLUE|||||\r
+cB |||0|0|1.0e25\r
+cC 151.012351|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.237 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6014MEADOW 19T 326186.1 4700429.0 Wed Nov 28 21:05:28 2001 6014MEADOW ^ 18^Black ^S+N^0\r
+cA 6014MEADOW|||||\r
+cB |||0|0|1.0e25\r
+cC 123.415169|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.257 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6014MEADOW 19T 326186.1 4700429.0 Wed Nov 28 21:05:28 2001 ^ 18^Black ^S+N^0\r
+cA 6014MEADOW|||||\r
+cB |||0|0|1.0e25\r
+cC 123.415169|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.257 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6014MEADOW 19T 326186.1 4700429.0 Wed Nov 28 21:05:28 2001 ^ 18^Black ^S+N^0\r
+cA 6014MEADOW|||||\r
+cB |||0|0|1.0e25\r
+cC 123.415169|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.257 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6016 19T 326121.0 4700642.7 Wed Nov 28 21:05:28 2001 Bike Loop Connector ^ 18^Black ^S+N^0\r
+cA 6016|||||\r
+cB |||0|0|1.0e25\r
+cC 142.338470|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.206 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6029 19T 326200.2 4700983.9 Sat Jun 02 03:26:55 2001 6029 ^ 18^Black ^S+N^0\r
+cA 6029|||||\r
+cB |||0|0|1.0e25\r
+cC 185.000002|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.035 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6029 19T 326200.2 4700983.9 Sat Jun 02 03:26:55 2001 ^ 18^Black ^S+N^0\r
+cA 6029|||||\r
+cB |||0|0|1.0e25\r
+cC 185.000002|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.035 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6042CROSS 19T 326475.3 4700279.0 Sat Jun 02 03:27:05 2001 Crossing ^ 8238^Black ^S+N^0\r
+cA 6042CROSS|||||\r
+cB |||0|0|1.0e25\r
+cC 148.000004|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.175 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6053 19T 326525.9 4700363.4 Sat Jun 02 03:27:05 2001 6053 ^ 18^Black ^S+N^0\r
+cA 6053|||||\r
+cB |||0|0|1.0e25\r
+cC 164.999999|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.118 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6066 19T 326663.7 4700694.1 Sat Jun 02 03:26:57 2001 6066 ^ 18^Black ^S+N^0\r
+cA 6066|||||\r
+cB |||0|0|1.0e25\r
+cC 84.000003|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.923 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6067 19T 326658.4 4700751.4 Sat Jun 02 03:26:57 2001 6067 ^ 18^Black ^S+N^0\r
+cA 6067|||||\r
+cB |||0|0|1.0e25\r
+cC 113.000006|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.903 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6071 19T 326785.1 4700192.9 Sat Jun 02 03:26:57 2001 6071 ^ 18^Black ^S+N^0\r
+cA 6071|||||\r
+cB |||0|0|1.0e25\r
+cC 99.999998|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.058 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6073 19T 326721.5 4700032.0 Sat Jun 02 03:26:56 2001 6073 ^ 18^Black ^S+N^0\r
+cA 6073|||||\r
+cB |||0|0|1.0e25\r
+cC 49.999999|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.151 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6077LOGS 19T 326742.1 4700720.2 Sat Jun 02 00:18:16 2001 Log Crossing ^ 8204^Black ^S+N^0\r
+cA 6077LOGS|||||\r
+cB |||0|0|1.0e25\r
+cC 105.000005|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.875 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6084 19T 326882.9 4700476.2 Sat Jun 02 03:26:57 2001 6084 ^ 18^Black ^S+N^0\r
+cA 6084|||||\r
+cB |||0|0|1.0e25\r
+cC 124.000001|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.901 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6121DEAD 19T 326248.8 4701133.2 Sat Jun 02 03:26:57 2001 Dead End ^ 166^Black ^S+N^0\r
+cA 6121DEAD|||||\r
+cB |||0|0|1.0e25\r
+cC 183.999995|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.954 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6130 19T 326386.1 4701028.3 Sat Jun 02 03:26:55 2001 6130 ^ 18^Black ^S+N^0\r
+cA 6130|||||\r
+cB |||0|0|1.0e25\r
+cC 210.000011|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.928 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6130 19T 326386.1 4701028.3 Sat Jun 02 03:26:55 2001 ^ 18^Black ^S+N^0\r
+cA 6130|||||\r
+cB |||0|0|1.0e25\r
+cC 210.000011|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.928 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6131 19T 326349.9 4701116.5 Sat Jun 02 03:26:58 2001 ^ 18^Black ^S+N^0\r
+cA 6131|||||\r
+cB |||0|0|1.0e25\r
+cC 210.000011|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.911 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6131 19T 326349.9 4701116.5 Sat Jun 02 03:26:58 2001 6131 ^ 18^Black ^S+N^0\r
+cA 6131|||||\r
+cB |||0|0|1.0e25\r
+cC 210.000011|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.911 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6153 19T 326565.3 4701310.2 Sat Jun 02 03:27:05 2001 6153 ^ 18^Black ^S+N^0\r
+cA 6153|||||\r
+cB |||0|0|1.0e25\r
+cC 205.999998|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.732 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6153 19T 326565.3 4701310.2 Sat Jun 02 03:27:05 2001 ^ 18^Black ^S+N^0\r
+cA 6153|||||\r
+cB |||0|0|1.0e25\r
+cC 205.999998|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.732 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6155DEAD 19T 326579.0 4701534.3 Sat Jun 02 03:27:04 2001 Dead End ^ 166^Black ^S+N^0\r
+cA 6155DEAD|||||\r
+cB |||0|0|1.0e25\r
+cC 201.000003|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.638 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6171 19T 326774.3 4701173.8 Sat Jun 02 03:27:05 2001 6171 ^ 18^Black ^S+N^0\r
+cA 6171|||||\r
+cB |||0|0|1.0e25\r
+cC 181.999995|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.683 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6171 19T 326774.3 4701173.8 Sat Jun 02 03:27:05 2001 ^ 18^Black ^S+N^0\r
+cA 6171|||||\r
+cB |||0|0|1.0e25\r
+cC 181.999995|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.683 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6176 19T 326759.4 4701642.2 Sat Jun 02 03:27:04 2001 ^ 18^Black ^S+N^0\r
+cA 6176|||||\r
+cB |||0|0|1.0e25\r
+cC 205.000004|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.509 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6176 19T 326759.4 4701642.2 Sat Jun 02 03:27:04 2001 6176 ^ 18^Black ^S+N^0\r
+cA 6176|||||\r
+cB |||0|0|1.0e25\r
+cC 205.000004|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.509 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6177 19T 326799.5 4701712.8 Sat Jun 02 03:27:04 2001 6177 ^ 18^Black ^S+N^0\r
+cA 6177|||||\r
+cB |||0|0|1.0e25\r
+cC 203.999997|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.462 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6177 19T 326799.5 4701712.8 Sat Jun 02 03:27:04 2001 ^ 18^Black ^S+N^0\r
+cA 6177|||||\r
+cB |||0|0|1.0e25\r
+cC 203.999997|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.462 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6181CROSS 19T 326807.5 4701106.4 Sat Jun 02 03:27:05 2001 Crossing ^ 8238^Black ^S+N^0\r
+cA 6181CROSS|||||\r
+cB |||0|0|1.0e25\r
+cC 173.000000|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.693 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6272 19T 326723.2 4702268.7 Sat Jun 02 03:26:56 2001 6272 ^ 18^Black ^S+N^0\r
+cA 6272|||||\r
+cB |||0|0|1.0e25\r
+cC 240.000001|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.284 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6272 19T 326761.8 4702265.6 Sat Jun 02 03:26:55 2001 6272 ^ 18^Black ^S+N^0\r
+cA 6272|||||\r
+cB |||0|0|1.0e25\r
+cC 229.000006|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.267 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6278 19T 326776.2 4702807.8 Sat Jun 02 03:27:04 2001 6278 ^ 18^Black ^S+N^0\r
+cA 6278|||||\r
+cB |||0|0|1.0e25\r
+cC 229.999988|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.050 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6280 19T 326869.0 4702042.4 Fri Nov 16 23:03:38 2001 6280 ^ 18^Black ^S+N^0\r
+cA 6280|||||\r
+cB |||0|0|1.0e25\r
+cC 188.858953|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.301 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6280 19T 326869.0 4702042.4 Fri Nov 16 23:03:38 2001 ^ 18^Black ^S+N^0\r
+cA 6280|||||\r
+cB |||0|0|1.0e25\r
+cC 188.858953|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.301 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6283 19T 326892.6 4702310.1 Fri Nov 16 23:03:38 2001 6283 ^ 18^Black ^S+N^0\r
+cA 6283|||||\r
+cB |||0|0|1.0e25\r
+cC 218.821047|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.186 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6283 19T 326892.6 4702310.1 Fri Nov 16 23:03:38 2001 ^ 18^Black ^S+N^0\r
+cA 6283|||||\r
+cB |||0|0|1.0e25\r
+cC 218.821047|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.186 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6289 19T 326830.3 4702994.0 Fri Nov 16 23:03:38 2001 ^ 18^Black ^S+N^0\r
+cA 6289|||||\r
+cB |||0|0|1.0e25\r
+cC 239.321491|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3787.951 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6289 19T 326830.3 4702994.0 Fri Nov 16 23:03:38 2001 6289 ^ 18^Black ^S+N^0\r
+cA 6289|||||\r
+cB |||0|0|1.0e25\r
+cC 239.321491|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3787.951 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6297 19T 326910.4 4702728.7 Sat Jun 02 03:27:04 2001 6297 ^ 18^Black ^S+N^0\r
+cA 6297|||||\r
+cB |||0|0|1.0e25\r
+cC 238.999995|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.015 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6297 19T 326910.4 4702728.7 Sat Jun 02 03:27:04 2001 ^ 18^Black ^S+N^0\r
+cA 6297|||||\r
+cB |||0|0|1.0e25\r
+cC 238.999995|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.015 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6328 19T 326241.2 4703800.2 Sat Jun 02 03:27:02 2001 6328 ^ 18^Black ^S+N^0\r
+cA 6328|||||\r
+cB |||0|0|1.0e25\r
+cC 175.999994|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3787.925 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6328 19T 326241.2 4703800.2 Sat Jun 02 03:27:02 2001 ^ 18^Black ^S+N^0\r
+cA 6328|||||\r
+cB |||0|0|1.0e25\r
+cC 175.999994|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3787.925 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6353DEAD 19T 326524.2 4703311.6 Sat Jun 02 03:27:03 2001 Dead End ^ 166^Black ^S+N^0\r
+cA 6353DEAD|||||\r
+cB |||0|0|1.0e25\r
+cC 154.000004|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3787.977 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6354 19T 326538.3 4703469.7 Sat Jun 02 03:27:03 2001 6354 ^ 18^Black ^S+N^0\r
+cA 6354|||||\r
+cB |||0|0|1.0e25\r
+cC 144.000003|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3787.909 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 635722 19T 326527.7 4703720.8 Sat Jun 02 03:27:02 2001 ^ 18^Black ^S+N^0\r
+cA 635722|||||\r
+cB |||0|0|1.0e25\r
+cC 160.000005|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3787.817 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 635722 19T 326527.7 4703720.8 Sat Jun 02 03:27:02 2001 635722 ^ 18^Black ^S+N^0\r
+cA 635722|||||\r
+cB |||0|0|1.0e25\r
+cC 160.000005|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3787.817 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 635783 19T 326582.0 4703730.3 Sat Jun 02 03:27:02 2001 635783 ^ 18^Black ^S+N^0\r
+cA 635783|||||\r
+cB |||0|0|1.0e25\r
+cC 160.999999|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3787.787 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 635783 19T 326582.0 4703730.3 Sat Jun 02 03:27:02 2001 ^ 18^Black ^S+N^0\r
+cA 635783|||||\r
+cB |||0|0|1.0e25\r
+cC 160.999999|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3787.787 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6373 19T 326762.1 4703385.6 Sat Jun 02 03:27:03 2001 ^ 18^Black ^S+N^0\r
+cA 6373|||||\r
+cB |||0|0|1.0e25\r
+cC 205.000004|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3787.833 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6373 19T 326762.1 4703385.6 Sat Jun 02 03:27:03 2001 6373 ^ 18^Black ^S+N^0\r
+cA 6373|||||\r
+cB |||0|0|1.0e25\r
+cC 205.000004|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3787.833 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6634 19T 326332.9 4696457.9 Sat Jun 02 03:26:56 2001 6634 ^ 18^Black ^S+N^0\r
+cA 6634|||||\r
+cB |||0|0|1.0e25\r
+cC 13.000000|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3790.724 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6979 19T 326725.1 4699956.0 Sat Jun 02 03:26:56 2001 6979 ^ 18^Black ^S+N^0\r
+cA 6979|||||\r
+cB |||0|0|1.0e25\r
+cC 43.999999|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.179 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6997 19T 326609.6 4699782.4 Fri Nov 16 23:03:38 2001 6997 ^ 18^Black ^S+N^0\r
+cA 6997|||||\r
+cB |||0|0|1.0e25\r
+cC 111.588205|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.302 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W BEAR HILL 19T 326748.2 4703629.5 Sat Jun 02 03:27:03 2001 BEAR HILL TOWER ^16391^Black ^S+N^0\r
+cA BEAR HILL|||||\r
+cB |||0|0|1.0e25\r
+cC 288.000007|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3787.745 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W BEAR HILL 19T 326748.2 4703629.5 Sat Jun 02 03:27:03 2001 BEAR HILL TOWER ^16391^Black ^S+N^0\r
+cA BEAR HILL|||||\r
+cB |||0|0|1.0e25\r
+cC 288.000007|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3787.745 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W BELLEVUE 19T 326630.3 4699772.7 Sat Jun 02 00:18:15 2001 BELLEVUE ^ 158^Black ^S+N^0\r
+cA BELLEVUE|||||\r
+cB |||0|0|1.0e25\r
+cC 77.000002|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.296 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W BELLEVUE 19T 326630.3 4699772.7 Sat Jun 02 00:18:15 2001 BELLEVUE ^ 158^Black ^S+N^0\r
+cA BELLEVUE|||||\r
+cB |||0|0|1.0e25\r
+cC 77.000002|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.296 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W BELLEVUE 19T 326630.3 4699772.7 Sat Jun 02 00:18:15 2001 BELLEVUE ^ 158^Black ^S+N^0\r
+cA BELLEVUE|||||\r
+cB |||0|0|1.0e25\r
+cC 77.000002|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.296 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W DARKHOLLPO 19T 327033.8 4702825.6 Sat Jul 16 20:53:40 2005 Dark Hollow Pond ^ 7^Black ^S+N^0\r
+cA DARKHOLLPO|||||\r
+cB |||0|0|1.0e25\r
+cC 1e25|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3787.918 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W GATE14 19T 325125.9 4702060.7 Sat Jun 02 03:26:59 2001 Gate 14 ^ 176^Black ^S+N^0\r
+cA GATE14|||||\r
+cB |||0|0|1.0e25\r
+cC 363.999990|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.140 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W GATE16 19T 325518.2 4702861.5 Sat Jun 02 03:27:00 2001 Gate 16 ^ 176^Black ^S+N^0\r
+cA GATE16|||||\r
+cB |||0|0|1.0e25\r
+cC 254.999997|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.639 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W GATE17 19T 325754.1 4702953.0 Sat Jun 02 03:27:01 2001 Gate 17 ^ 176^Black ^S+N^0\r
+cA GATE17|||||\r
+cB |||0|0|1.0e25\r
+cC 215.999999|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.489 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W GATE19 19T 325773.3 4703727.8 Sat Jun 02 03:27:02 2001 Gate 19 ^ 176^Black ^S+N^0\r
+cA GATE19|||||\r
+cB |||0|0|1.0e25\r
+cC 187.999996|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.180 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W GATE21 19T 326728.7 4703959.8 Sat Jun 02 03:27:03 2001 Gate 21 ^ 176^Black ^S+N^0\r
+cA GATE21|||||\r
+cB |||0|0|1.0e25\r
+cC 162.000005|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3787.627 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W GATE24 19T 327084.2 4702624.6 Sat Jun 02 03:27:03 2001 Gate 24 ^ 176^Black ^S+N^0\r
+cA GATE24|||||\r
+cB |||0|0|1.0e25\r
+cC 265.999992|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3787.971 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W GATE5 19T 326624.9 4699761.4 Wed Nov 28 21:05:28 2001 Gate 5 ^ 176^Black ^S+N^0\r
+cA GATE5|||||\r
+cB |||0|0|1.0e25\r
+cC 70.587318|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.303 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W GATE6 19T 326498.9 4699808.2 Wed Nov 07 23:53:41 2001 Gate 6 ^ 18^Black ^S+N^0\r
+cA GATE6|||||\r
+cB |||0|0|1.0e25\r
+cC 87.145307|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.346 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W GATE6 19T 326498.9 4699808.2 Wed Nov 07 23:53:41 2001 ^ 18^Black ^S+N^0\r
+cA GATE6|||||\r
+cB |||0|0|1.0e25\r
+cC 87.145307|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.346 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W GATE6 19T 326498.9 4699808.2 Wed Nov 07 23:53:41 2001 ^ 18^Black ^S+N^0\r
+cA GATE6|||||\r
+cB |||0|0|1.0e25\r
+cC 87.145307|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.346 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W PANTHRCAVE 19T 326451.1 4700224.9 Wed Nov 07 23:53:41 2001 ^ 8243^Black ^S+N^0\r
+cA PANTHRCAVE|||||\r
+cB |||0|0|1.0e25\r
+cC 148.646638|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.207 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W PANTHRCAVE 19T 326451.1 4700224.9 Wed Nov 07 23:53:41 2001 Panther Cave ^ 8243^Black ^S+N^0\r
+cA PANTHRCAVE|||||\r
+cB |||0|0|1.0e25\r
+cC 148.646638|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.207 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W PANTHRCAVE 19T 326451.1 4700224.9 Wed Nov 07 23:53:41 2001 ^ 8243^Black ^S+N^0\r
+cA PANTHRCAVE|||||\r
+cB |||0|0|1.0e25\r
+cC 148.646638|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.207 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W SHEEPFOLD 19T 326761.9 4702265.6 Sat Jun 02 00:18:13 2001 Sheepfold Parking Lot ^ 158^Black ^S+N^0\r
+cA SHEEPFOLD|||||\r
+cB |||0|0|1.0e25\r
+cC 229.000006|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.267 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+W SOAPBOX 19T 326711.2 4702549.2 Sat Jun 02 03:27:04 2001 Soap Box Derby Track ^ 8235^Black ^S+N^0\r
+cA SOAPBOX|||||\r
+cB |||0|0|1.0e25\r
+cC 210.000011|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.181 S mi\r
+cD 1.0e25|1.0e25|0\r
+\r
+N New Track Log Start - Trk from .gpx file,Black,1\r
+T 15R 633951.5 3326484.2 Sat May 25 17:06:21 2002 ;3.280840; 1e25; SM; 0.0000; 0.0000; 0.0000; INF; -;|1e25\r
+T 15R 633929.8 3326550.5 Sat May 25 17:09:55 2002 ; 1e25; 1e25; SM; 0.0434; 0.0434; 0.0434;0.730757; 214;|1e25\r
+T 15R 634151.6 3326544.0 Sat May 25 17:12:00 2002 ; 1e25; 1e25; SM; 0.1377; 0.1811; 0.1811;3.964510; 125;|1e25\r
+T 15R 634237.3 3326504.3 Sat May 25 17:12:48 2002 ; 1e25; 1e25; SM; 0.0586; 0.2397; 0.2397;4.397203; 48;|1e25\r
+T 15R 634440.8 3326418.2 Sat May 25 17:14:41 2002 ; 1e25; 1e25; SM; 0.1372; 0.3769; 0.3769;4.371133; 113;|1e25\r
+T 15R 635010.3 3326231.1 Sat May 25 17:17:16 2002 ; 1e25; 1e25; SM; 0.3720; 0.7489; 0.7489;8.640052; 155;|1e25\r
+T 15R 635275.0 3326014.6 Sat May 25 17:17:46 2002 ; 1e25; 1e25; SM; 0.2125; 0.9615; 0.9615;25.504435; 30;|1e25\r
+T 15R 635450.2 3325748.8 Sat May 25 17:18:20 2002 ; 1e25; 1e25; SM; 0.1981; 1.1596; 1.1596;20.979147; 34;|1e25\r
+T 15R 635672.3 3325585.3 Sat May 25 17:19:01 2002 ; 1e25; 1e25; SM; 0.1714; 1.3310; 1.3310;15.050832; 41;|1e25\r
+T 15R 635954.4 3325128.8 Sat May 25 17:20:46 2002 ; 1e25; 1e25; SM; 0.3341; 1.6651; 1.6651;11.454587; 105;|1e25\r
+T 15R 635942.5 3325049.3 Sat May 25 17:21:10 2002 ; 1e25; 1e25; SM; 0.0501; 1.7152; 1.7152;7.515936; 24;|1e25\r
+T 15R 635648.8 3325021.6 Sat May 25 17:21:51 2002 ; 1e25; 1e25; SM; 0.1830; 1.8982; 1.8982;16.070644; 41;|1e25\r
+T 15R 635313.2 3324732.9 Sat May 25 17:22:35 2002 ; 1e25; 1e25; SM; 0.2751; 2.1734; 2.1734;22.511499; 44;|1e25\r
+T 15R 635095.6 3324650.9 Sat May 25 17:23:08 2002 ; 1e25; 1e25; SM; 0.1443; 2.3177; 2.3177;15.745092; 33;|1e25\r
+T 15R 634943.7 3324846.7 Sat May 25 18:04:23 2002 ; 1e25; 1e25; SM; 0.1542; 2.4719; 2.4719;0.224257; 2475;|1e25\r
+T 15R 635005.2 3324814.2 Sat May 25 18:06:04 2002 ;6.561680; 1e25; SM; 0.0432; 2.5151; 2.5151;1.540302; 101;|1e25\r
+T 15R 635022.0 3324751.5 Sat May 25 18:07:06 2002 ; 1e25; 1e25; SM; 0.0404; 2.5555; 2.5555;2.346642; 62;|1e25\r
+T 15R 635072.2 3324726.3 Sat May 25 18:08:18 2002 ;3.280840; 1e25; SM; 0.0349; 2.5904; 2.5904;1.743045; 72;|1e25\r
+T 15R 635189.3 3324746.3 Sat May 25 18:10:20 2002 ; 1e25; 1e25; SM; 0.0737; 2.6641; 2.6641;2.174638; 122;|1e25\r
+T 15R 635243.9 3324745.1 Sat May 25 18:11:09 2002 ; 1e25; 1e25; SM; 0.0339; 2.6979; 2.6979;2.488559; 49;|1e25\r
+T 15R 635323.7 3324794.0 Sat May 25 18:12:18 2002 ; 1e25; 1e25; SM; 0.0582; 2.7561; 2.7561;3.034664; 69;|1e25\r
+T 15R 635432.0 3324869.3 Sat May 25 18:14:22 2002 ; 1e25; 1e25; SM; 0.0819; 2.8381; 2.8381;2.379163; 124;|1e25\r
+T 15R 635473.3 3324908.6 Sat May 25 18:15:04 2002 ;6.561680; 1e25; SM; 0.0354; 2.8735; 2.8735;3.037052; 42;|1e25\r
+T 15R 635538.6 3324959.3 Sat May 25 18:16:14 2002 ;3.280840; 1e25; SM; 0.0514; 2.9249; 2.9249;2.642554; 70;|1e25\r
+T 15R 635565.3 3325007.6 Sat May 25 18:17:01 2002 ;3.280840; 1e25; SM; 0.0344; 2.9593; 2.9593;2.632849; 47;|1e25\r
+T 15R 635559.6 3325081.5 Sat May 25 18:18:07 2002 ; 1e25; 1e25; SM; 0.0462; 3.0054; 3.0054;2.519028; 66;|1e25\r
+T 15R 635545.5 3325188.5 Sat May 25 18:19:51 2002 ;6.561680; 1e25; SM; 0.0673; 3.0727; 3.0727;2.329100; 104;|1e25\r
+T 15R 635531.9 3325240.0 Sat May 25 18:20:39 2002 ; 1e25; 1e25; SM; 0.0332; 3.1059; 3.1059;2.488490; 48;|1e25\r
+T 15R 635507.2 3325289.5 Sat May 25 18:21:24 2002 ; 1e25; 1e25; SM; 0.0345; 3.1404; 3.1404;2.760011; 45;|1e25\r
+T 15R 635506.4 3325352.4 Sat May 25 18:22:17 2002 ; 1e25; 1e25; SM; 0.0392; 3.1796; 3.1796;2.661007; 53;|1e25\r
+T 15R 635476.9 3325398.2 Sat May 25 18:23:18 2002 ; 1e25; 1e25; SM; 0.0339; 3.2135; 3.2135;2.003106; 61;|1e25\r
+T 15R 635474.3 3325486.9 Sat May 25 18:24:37 2002 ; 1e25; 1e25; SM; 0.0553; 3.2688; 3.2688;2.519224; 79;|1e25\r
+T 15R 635421.9 3325691.3 Sat May 25 18:28:13 2002 ;19.685039; 1e25; SM; 0.1315; 3.4003; 3.4003;2.191816; 216;|1e25\r
+T 15R 635449.2 3325565.9 Sat May 25 18:31:36 2002 ;6.561680; 1e25; SM; 0.0800; 3.4803; 3.4803;1.418052; 203;|1e25\r
+T 15R 635464.4 3325505.1 Sat May 25 18:32:56 2002 ; 1e25; 1e25; SM; 0.0390; 3.5193; 3.5193;1.757061; 80;|1e25\r
+T 15R 635460.4 3325444.1 Sat May 25 18:34:02 2002 ; 1e25; 1e25; SM; 0.0381; 3.5574; 3.5574;2.079208; 66;|1e25\r
+T 15R 635402.8 3325423.1 Sat May 25 18:36:03 2002 ; 1e25; 1e25; SM; 0.0380; 3.5955; 3.5955;1.131931; 121;|1e25\r
+T 15R 635351.2 3325426.2 Sat May 25 18:36:48 2002 ; 1e25; 1e25; SM; 0.0320; 3.6275; 3.6275;2.561370; 45;|1e25\r
+T 15R 635272.3 3325443.7 Sat May 25 18:37:52 2002 ;3.280840; 1e25; SM; 0.0501; 3.6776; 3.6776;2.820732; 64;|1e25\r
+T 15R 635168.8 3325496.0 Sat May 25 18:39:18 2002 ; 1e25; 1e25; SM; 0.0720; 3.7497; 3.7497;3.014423; 86;|1e25\r
+T 15R 635156.9 3325549.5 Sat May 25 18:40:15 2002 ; 1e25; 1e25; SM; 0.0342; 3.7838; 3.7838;2.157813; 57;|1e25\r
+T 15R 635175.7 3325588.5 Sat May 25 18:41:25 2002 ;19.685039; 1e25; SM; 0.0270; 3.8108; 3.8108;1.387488; 70;|1e25\r
+T 15R 635145.7 3325549.3 Sat May 25 18:42:37 2002 ; 1e25; 1e25; SM; 0.0307; 3.8415; 3.8415;1.534552; 72;|1e25\r
+T 15R 635162.3 3325503.3 Sat May 25 18:44:01 2002 ; 1e25; 1e25; SM; 0.0305; 3.8720; 3.8720;1.306042; 84;|1e25\r
+T 15R 635201.3 3325461.3 Sat May 25 18:45:53 2002 ; 1e25; 1e25; SM; 0.0357; 3.9076; 3.9076;1.146618; 112;|1e25\r
+T 15R 635258.0 3325434.3 Sat May 25 18:46:54 2002 ; 1e25; 1e25; SM; 0.0390; 3.9466; 3.9466;2.299515; 61;|1e25\r
+T 15R 635306.5 3325409.0 Sat May 25 18:47:42 2002 ; 1e25; 1e25; SM; 0.0340; 3.9806; 3.9806;2.549512; 48;|1e25\r
+T 15R 635378.9 3325400.7 Sat May 25 18:48:41 2002 ; 1e25; 1e25; SM; 0.0452; 4.0258; 4.0258;2.759120; 59;|1e25\r
+T 15R 635443.2 3325397.8 Sat May 25 18:49:52 2002 ; 1e25; 1e25; SM; 0.0399; 4.0657; 4.0657;2.022865; 71;|1e25\r
+T 15R 635474.2 3325361.2 Sat May 25 18:50:49 2002 ; 1e25; 1e25; SM; 0.0299; 4.0956; 4.0956;1.886267; 57;|1e25\r
+T 15R 635504.3 3325269.2 Sat May 25 18:52:14 2002 ; 1e25; 1e25; SM; 0.0603; 4.1559; 4.1559;2.553308; 85;|1e25\r
+T 15R 635521.0 3325215.9 Sat May 25 18:52:56 2002 ; 1e25; 1e25; SM; 0.0348; 4.1907; 4.1907;2.985822; 42;|1e25\r
+T 15R 635534.4 3325173.5 Sat May 25 18:53:38 2002 ; 1e25; 1e25; SM; 0.0277; 4.2184; 4.2184;2.374160; 42;|1e25\r
+T 15R 635572.8 3325053.9 Sat May 25 18:55:11 2002 ; 1e25; 1e25; SM; 0.0783; 4.2966; 4.2966;3.029246; 93;|1e25\r
+T 15R 635522.3 3324981.2 Sat May 25 18:56:32 2002 ; 1e25; 1e25; SM; 0.0551; 4.3517; 4.3517;2.447726; 81;|1e25\r
+T 15R 635474.6 3324940.0 Sat May 25 18:57:24 2002 ; 1e25; 1e25; SM; 0.0392; 4.3909; 4.3909;2.714362; 52;|1e25\r
+T 15R 635407.9 3324874.5 Sat May 25 18:58:40 2002 ;22.965879; 1e25; SM; 0.0581; 4.4490; 4.4490;2.751982; 76;|1e25\r
+T 15R 635355.4 3324825.9 Sat May 25 18:59:28 2002 ; 1e25; 1e25; SM; 0.0445; 4.4935; 4.4935;3.334841; 48;|1e25\r
+T 15R 635298.2 3324777.1 Sat May 25 19:00:22 2002 ; 1e25; 1e25; SM; 0.0468; 4.5403; 4.5403;3.117638; 54;|1e25\r
+T 15R 635197.2 3324750.0 Sat May 25 19:01:41 2002 ; 1e25; 1e25; SM; 0.0648; 4.6051; 4.6051;2.954261; 79;|1e25\r
+T 15R 635118.7 3324730.6 Sat May 25 19:02:48 2002 ; 1e25; 1e25; SM; 0.0502; 4.6553; 4.6553;2.697719; 67;|1e25\r
+T 15R 635070.4 3324739.3 Sat May 25 19:03:43 2002 ; 1e25; 1e25; SM; 0.0305; 4.6858; 4.6858;1.993899; 55;|1e25\r
+T 15R 635039.3 3324790.5 Sat May 25 19:04:49 2002 ; 1e25; 1e25; SM; 0.0373; 4.7231; 4.7231;2.036431; 66;|1e25\r
+T 15R 635001.8 3324828.9 Sat May 25 19:05:57 2002 ; 1e25; 1e25; SM; 0.0334; 4.7564; 4.7564;1.765615; 68;|1e25\r
+R 01 BELLEVUE\r
+W BELLEVUE 19T 326630.3 4699772.7 Sat Jun 02 00:18:15 2001 BELLEVUE ^ 158^Black ^S+N^0\r
+cA BELLEVUE|||||\r
+cB |||0|0|1.0e25\r
+cC 77.000002|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
+cD 1.0e25|1.0e25|0\r
+\r
+W GATE6 19T 326498.9 4699808.2 Wed Nov 07 23:53:41 2001 ^ 18^Black ^S+N^0\r
+cA GATE6|||||\r
+cB |||0|0|1.0e25\r
+cC 87.145307|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
+cD 1.0e25|1.0e25|0\r
+\r
+W PANTHRCAVE 19T 326451.1 4700224.9 Wed Nov 07 23:53:41 2001 ^ 8243^Black ^S+N^0\r
+cA PANTHRCAVE|||||\r
+cB |||0|0|1.0e25\r
+cC 148.646638|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6014MEADOW 19T 326186.1 4700429.0 Wed Nov 28 21:05:28 2001 ^ 18^Black ^S+N^0\r
+cA 6014MEADOW|||||\r
+cB |||0|0|1.0e25\r
+cC 123.415169|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6006 19T 326091.0 4700682.6 Sat Jun 02 03:26:55 2001 ^ 18^Black ^S+N^0\r
+cA 6006|||||\r
+cB |||0|0|1.0e25\r
+cC 185.000002|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6006BLUE 19T 326061.3 4700636.2 Wed Nov 28 21:05:28 2001 ^ 18^Black ^S+N^0\r
+cA 6006BLUE|||||\r
+cB |||0|0|1.0e25\r
+cC 151.012351|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5096 19T 325951.7 4700674.8 Fri Nov 16 23:03:38 2001 ^ 18^Black ^S+N^0\r
+cA 5096|||||\r
+cB |||0|0|1.0e25\r
+cC 147.069896|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5066 19T 325694.0 4700676.9 Wed Nov 28 21:05:28 2001 ^ 8238^Black ^S+N^0\r
+cA 5066|||||\r
+cB |||0|0|1.0e25\r
+cC 146.281325|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5067 19T 325661.1 4700716.5 Sat Jun 02 03:26:55 2001 ^ 18^Black ^S+N^0\r
+cA 5067|||||\r
+cB |||0|0|1.0e25\r
+cC 189.000002|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5058ROAD 19T 325561.6 4700804.1 Sat Jun 02 00:18:14 2001 ROAD CROSSING ^ 18^Black ^S+N^0\r
+cA 5058ROAD|||||\r
+cB |||0|0|1.0e25\r
+cC 177.000001|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5150TANK 19T 325504.6 4700998.2 Sat Jun 02 00:18:16 2001 WATER TANK ^ 8211^Black ^S+N^0\r
+cA 5150TANK|||||\r
+cB |||0|0|1.0e25\r
+cC 221.000006|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5142 19T 325480.4 4701240.7 Wed Nov 28 21:05:28 2001 ^ 18^Black ^S+N^0\r
+cA 5142|||||\r
+cB |||0|0|1.0e25\r
+cC 165.993197|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5144SUMMIT 19T 325418.6 4701403.9 Wed Nov 28 21:05:28 2001 ^ 8246^Black ^S+N^0\r
+cA 5144SUMMIT|||||\r
+cB |||0|0|1.0e25\r
+cC 202.263459|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5156 19T 325538.9 4701616.4 Sat Jun 02 03:26:58 2001 ^ 18^Black ^S+N^0\r
+cA 5156|||||\r
+cB |||0|0|1.0e25\r
+cC 418.999990|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5148NANEPA 19T 325474.0 4701892.1 Wed Nov 07 23:53:41 2001 ^ 18^Black ^S+N^0\r
+cA 5148NANEPA|||||\r
+cB |||0|0|1.0e25\r
+cC 393.074416|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5258 19T 325525.9 4702077.2 Wed Nov 07 23:53:41 2001 ^ 18^Black ^S+N^0\r
+cA 5258|||||\r
+cB |||0|0|1.0e25\r
+cC 244.840687|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5252PURPLE 19T 325574.9 4702277.5 Wed Nov 07 23:53:41 2001 ^ 8246^Black ^S+N^0\r
+cA 5252PURPLE|||||\r
+cB |||0|0|1.0e25\r
+cC 255.879480|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 527631 19T 325735.7 4702606.4 Wed Nov 07 23:53:41 2001 ^ 18^Black ^S+N^0\r
+cA 527631|||||\r
+cB |||0|0|1.0e25\r
+cC 258.245193|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 527614 19T 325710.4 4702644.8 Wed Nov 07 23:53:41 2001 ^ 18^Black ^S+N^0\r
+cA 527614|||||\r
+cB |||0|0|1.0e25\r
+cC 258.245193|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5267OBSTAC 19T 325698.7 4702733.5 Sat Jun 02 03:27:00 2001 ^ 8204^Black ^S+N^0\r
+cA 5267OBSTAC|||||\r
+cB |||0|0|1.0e25\r
+cC 241.999989|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5278 19T 325759.2 4702816.5 Sat Jun 02 03:27:00 2001 ^ 18^Black ^S+N^0\r
+cA 5278|||||\r
+cB |||0|0|1.0e25\r
+cC 224.000000|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5289 19T 325881.1 4702950.0 Sat Jun 02 03:27:01 2001 ^ 18^Black ^S+N^0\r
+cA 5289|||||\r
+cB |||0|0|1.0e25\r
+cC 210.000011|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5374FIRE 19T 325718.9 4703488.0 Wed Nov 28 21:05:28 2001 ^ 18^Black ^S+N^0\r
+cA 5374FIRE|||||\r
+cB |||0|0|1.0e25\r
+cC 173.877706|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5376 19T 325758.3 4703650.1 Sat Jun 02 03:27:02 2001 ^ 18^Black ^S+N^0\r
+cA 5376|||||\r
+cB |||0|0|1.0e25\r
+cC 185.000002|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 5376STREAM 19T 325764.8 4703679.1 Wed Nov 07 23:53:41 2001 ^ 8233^Black ^S+N^0\r
+cA 5376STREAM|||||\r
+cB |||0|0|1.0e25\r
+cC 211.724709|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6328 19T 326241.2 4703800.2 Sat Jun 02 03:27:02 2001 ^ 18^Black ^S+N^0\r
+cA 6328|||||\r
+cB |||0|0|1.0e25\r
+cC 175.999994|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 635722 19T 326527.7 4703720.8 Sat Jun 02 03:27:02 2001 ^ 18^Black ^S+N^0\r
+cA 635722|||||\r
+cB |||0|0|1.0e25\r
+cC 160.000005|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 635783 19T 326582.0 4703730.3 Sat Jun 02 03:27:02 2001 ^ 18^Black ^S+N^0\r
+cA 635783|||||\r
+cB |||0|0|1.0e25\r
+cC 160.999999|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6373 19T 326762.1 4703385.6 Sat Jun 02 03:27:03 2001 ^ 18^Black ^S+N^0\r
+cA 6373|||||\r
+cB |||0|0|1.0e25\r
+cC 205.000004|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
+cD 1.0e25|1.0e25|0\r
+\r
+W BEAR HILL 19T 326748.2 4703629.5 Sat Jun 02 03:27:03 2001 BEAR HILL TOWER ^16391^Black ^S+N^0\r
+cA BEAR HILL|||||\r
+cB |||0|0|1.0e25\r
+cC 288.000007|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6289 19T 326830.3 4702994.0 Fri Nov 16 23:03:38 2001 ^ 18^Black ^S+N^0\r
+cA 6289|||||\r
+cB |||0|0|1.0e25\r
+cC 239.321491|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6297 19T 326910.4 4702728.7 Sat Jun 02 03:27:04 2001 ^ 18^Black ^S+N^0\r
+cA 6297|||||\r
+cB |||0|0|1.0e25\r
+cC 238.999995|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6283 19T 326892.6 4702310.1 Fri Nov 16 23:03:38 2001 ^ 18^Black ^S+N^0\r
+cA 6283|||||\r
+cB |||0|0|1.0e25\r
+cC 218.821047|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6280 19T 326869.0 4702042.4 Fri Nov 16 23:03:38 2001 ^ 18^Black ^S+N^0\r
+cA 6280|||||\r
+cB |||0|0|1.0e25\r
+cC 188.858953|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6177 19T 326799.5 4701712.8 Sat Jun 02 03:27:04 2001 ^ 18^Black ^S+N^0\r
+cA 6177|||||\r
+cB |||0|0|1.0e25\r
+cC 203.999997|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6176 19T 326759.4 4701642.2 Sat Jun 02 03:27:04 2001 ^ 18^Black ^S+N^0\r
+cA 6176|||||\r
+cB |||0|0|1.0e25\r
+cC 205.000004|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6153 19T 326565.3 4701310.2 Sat Jun 02 03:27:05 2001 ^ 18^Black ^S+N^0\r
+cA 6153|||||\r
+cB |||0|0|1.0e25\r
+cC 205.999998|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6171 19T 326774.3 4701173.8 Sat Jun 02 03:27:05 2001 ^ 18^Black ^S+N^0\r
+cA 6171|||||\r
+cB |||0|0|1.0e25\r
+cC 181.999995|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6131 19T 326349.9 4701116.5 Sat Jun 02 03:26:58 2001 ^ 18^Black ^S+N^0\r
+cA 6131|||||\r
+cB |||0|0|1.0e25\r
+cC 210.000011|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6130 19T 326386.1 4701028.3 Sat Jun 02 03:26:55 2001 ^ 18^Black ^S+N^0\r
+cA 6130|||||\r
+cB |||0|0|1.0e25\r
+cC 210.000011|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6029 19T 326200.2 4700983.9 Sat Jun 02 03:26:55 2001 ^ 18^Black ^S+N^0\r
+cA 6029|||||\r
+cB |||0|0|1.0e25\r
+cC 185.000002|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6006 19T 326091.0 4700682.6 Sat Jun 02 03:26:55 2001 ^ 18^Black ^S+N^0\r
+cA 6006|||||\r
+cB |||0|0|1.0e25\r
+cC 185.000002|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
+cD 1.0e25|1.0e25|0\r
+\r
+W 6014MEADOW 19T 326186.1 4700429.0 Wed Nov 28 21:05:28 2001 ^ 18^Black ^S+N^0\r
+cA 6014MEADOW|||||\r
+cB |||0|0|1.0e25\r
+cC 123.415169|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
+cD 1.0e25|1.0e25|0\r
+\r
+W PANTHRCAVE 19T 326451.1 4700224.9 Wed Nov 07 23:53:41 2001 ^ 8243^Black ^S+N^0\r
+cA PANTHRCAVE|||||\r
+cB |||0|0|1.0e25\r
+cC 148.646638|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
+cD 1.0e25|1.0e25|0\r
+\r
+W GATE6 19T 326498.9 4699808.2 Wed Nov 07 23:53:41 2001 ^ 18^Black ^S+N^0\r
+cA GATE6|||||\r
+cB |||0|0|1.0e25\r
+cC 87.145307|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
+cD 1.0e25|1.0e25|0\r
+\r
+W BELLEVUE 19T 326630.3 4699772.7 Sat Jun 02 00:18:15 2001 BELLEVUE ^ 158^Black ^S+N^0\r
+cA BELLEVUE|||||\r
+cB |||0|0|1.0e25\r
+cC 77.000002|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
+cD 1.0e25|1.0e25|0\r
+\r
+E 01\r
-[Wp0]
-Loc=New location
-Name=5066
-Lat=42.438878000000003
-Long=-71.119276999999997
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=5066
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37223.878796296300000
-GUID=0-0-0-0
-[Wp1]
-Loc=New location
-Name=5067
-Lat=42.439227000000002
-Long=-71.119688999999994
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=5067
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143692129600000
-GUID=0-0-0-0
-[Wp2]
-Loc=New location
-Name=5096
-Lat=42.438916999999996
-Long=-71.116146000000001
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=5096
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37211.960856481500000
-GUID=0-0-0-0
-[Wp3]
-Loc=New location
-Name=5142
-Lat=42.443904000000003
-Long=-71.122044000000002
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=5142
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37223.878796296300000
-GUID=0-0-0-0
-[Wp4]
-Loc=New location
-Name=5156
-Lat=42.447298000000004
-Long=-71.121447000000003
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=5156
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143726851800000
-GUID=0-0-0-0
-[Wp5]
-Loc=New location
-Name=5224
-Lat=42.454872999999999
-Long=-71.125094000000004
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=5224
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143738425900000
-GUID=0-0-0-0
-[Wp6]
-Loc=New location
-Name=5229
-Lat=42.459079000000003
-Long=-71.124988000000002
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=5229
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143738425900000
-GUID=0-0-0-0
-[Wp7]
-Loc=New location
-Name=5237
-Lat=42.456978999999997
-Long=-71.124474000000006
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=5237
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143738425900000
-GUID=0-0-0-0
-[Wp8]
-Loc=New location
-Name=5254
-Lat=42.454400999999997
-Long=-71.120990000000006
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=5254
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37223.878796296300000
-GUID=0-0-0-0
-[Wp9]
-Loc=New location
-Name=5258
-Lat=42.451442000000000
-Long=-71.121746000000002
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=5258
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37202.995613425900000
-GUID=0-0-0-0
-[Wp10]
-Loc=New location
-Name=5264
-Lat=42.454403999999997
-Long=-71.120660000000001
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=5264
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37223.878796296300000
-GUID=0-0-0-0
-[Wp11]
-Loc=New location
-Name=526708
-Lat=42.457760999999998
-Long=-71.121044999999995
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=526708
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143750000000000
-GUID=0-0-0-0
-[Wp12]
-Loc=New location
-Name=526750
-Lat=42.457089000000003
-Long=-71.120312999999996
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=526750
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143750000000000
-GUID=0-0-0-0
-[Wp13]
-Loc=New location
-Name=527614
-Lat=42.456592000000001
-Long=-71.119675999999998
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=527614
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37202.995613425900000
-GUID=0-0-0-0
-[Wp14]
-Loc=New location
-Name=527631
-Lat=42.456251999999999
-Long=-71.119355999999996
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=527631
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37202.995613425900000
-GUID=0-0-0-0
-[Wp15]
-Loc=New location
-Name=5278
-Lat=42.458148000000001
-Long=-71.119135000000000
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=5278
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143750000000000
-GUID=0-0-0-0
-[Wp16]
-Loc=New location
-Name=5289
-Lat=42.459377000000003
-Long=-71.117693000000003
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=5289
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143761574100000
-GUID=0-0-0-0
-[Wp17]
-Loc=New location
-Name=5374FIRE
-Lat=42.464182999999998
-Long=-71.119827999999998
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=5374FIRE
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37223.878796296300000
-GUID=0-0-0-0
-[Wp18]
-Loc=New location
-Name=5376
-Lat=42.465649999999997
-Long=-71.119399000000001
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=5376
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143773148100000
-GUID=0-0-0-0
-[Wp19]
-Loc=New location
-Name=6006
-Lat=42.439017999999997
-Long=-71.114456000000004
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=600698
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143692129600000
-GUID=0-0-0-0
-[Wp20]
-Loc=New location
-Name=6006BLUE
-Lat=42.438594000000002
-Long=-71.114802999999995
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=6006BLUE
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37223.878796296300000
-GUID=0-0-0-0
-[Wp21]
-Loc=New location
-Name=6014MEADOW
-Lat=42.436757000000000
-Long=-71.113223000000005
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=6014MEADOW
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37223.878796296300000
-GUID=0-0-0-0
-[Wp22]
-Loc=New location
-Name=6029
-Lat=42.441754000000003
-Long=-71.113219999999998
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=6029
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143692129600000
-GUID=0-0-0-0
-[Wp23]
-Loc=New location
-Name=6053
-Lat=42.436242999999997
-Long=-71.109075000000004
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=6053
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143807870400000
-GUID=0-0-0-0
-[Wp24]
-Loc=New location
-Name=6066
-Lat=42.439250000000001
-Long=-71.107500000000002
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=6066
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143715277800000
-GUID=0-0-0-0
-[Wp25]
-Loc=New location
-Name=6067
-Lat=42.439763999999997
-Long=-71.107581999999994
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=6067
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143715277800000
-GUID=0-0-0-0
-[Wp26]
-Loc=New location
-Name=6071
-Lat=42.434766000000003
-Long=-71.105874000000000
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=6071
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143715277800000
-GUID=0-0-0-0
-[Wp27]
-Loc=New location
-Name=6073
-Lat=42.433304000000000
-Long=-71.106599000000003
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=6073
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143703703700000
-GUID=0-0-0-0
-[Wp28]
-Loc=New location
-Name=6084
-Lat=42.437337999999997
-Long=-71.104771999999997
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=6084
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143715277800000
-GUID=0-0-0-0
-[Wp29]
-Loc=New location
-Name=6130
-Lat=42.442196000000003
-Long=-71.110974999999996
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=6130
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143692129600000
-GUID=0-0-0-0
-[Wp30]
-Loc=New location
-Name=6131
-Lat=42.442981000000003
-Long=-71.111440999999999
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=6131
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143726851800000
-GUID=0-0-0-0
-[Wp31]
-Loc=New location
-Name=6153
-Lat=42.444772999999998
-Long=-71.108881999999994
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=6153
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143807870400000
-GUID=0-0-0-0
-[Wp32]
-Loc=New location
-Name=6171
-Lat=42.443592000000002
-Long=-71.106301000000002
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=6171
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143807870400000
-GUID=0-0-0-0
-[Wp33]
-Loc=New location
-Name=6176
-Lat=42.447803999999998
-Long=-71.106623999999996
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=6176
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143796296300000
-GUID=0-0-0-0
-[Wp34]
-Loc=New location
-Name=6177
-Lat=42.448447999999999
-Long=-71.106157999999994
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=6177
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143796296300000
-GUID=0-0-0-0
-[Wp35]
-Loc=New location
-Name=6272
-Lat=42.453415000000000
-Long=-71.106782999999993
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=6272
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143692129600000
-GUID=0-0-0-0
-[Wp36]
-Loc=New location
-Name=6272
-Lat=42.453434000000001
-Long=-71.107253000000000
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=6272
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143703703700000
-GUID=0-0-0-0
-[Wp37]
-Loc=New location
-Name=6278
-Lat=42.458297999999999
-Long=-71.106770999999995
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=6278
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143796296300000
-GUID=0-0-0-0
-[Wp38]
-Loc=New location
-Name=6280
-Lat=42.451430000000002
-Long=-71.105412999999999
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=6280
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37211.960856481500000
-GUID=0-0-0-0
-[Wp39]
-Loc=New location
-Name=6283
-Lat=42.453845000000001
-Long=-71.105205999999995
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=6283
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37211.960856481500000
-GUID=0-0-0-0
-[Wp40]
-Loc=New location
-Name=6289
-Lat=42.459986000000001
-Long=-71.106170000000006
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=6289
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37211.960856481500000
-GUID=0-0-0-0
-[Wp41]
-Loc=New location
-Name=6297
-Lat=42.457616000000002
-Long=-71.105115999999995
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=6297
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143796296300000
-GUID=0-0-0-0
-[Wp42]
-Loc=New location
-Name=6328
-Lat=42.467109999999998
-Long=-71.113574000000000
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=6328
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143773148100000
-GUID=0-0-0-0
-[Wp43]
-Loc=New location
-Name=6354
-Lat=42.464202000000000
-Long=-71.109863000000004
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=6354
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143784722200000
-GUID=0-0-0-0
-[Wp44]
-Loc=New location
-Name=635722
-Lat=42.466459000000000
-Long=-71.110067000000001
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=635722
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143773148100000
-GUID=0-0-0-0
-[Wp45]
-Loc=New location
-Name=635783
-Lat=42.466557000000002
-Long=-71.109409999999997
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=635783
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143773148100000
-GUID=0-0-0-0
-[Wp46]
-Loc=New location
-Name=6373
-Lat=42.463495000000002
-Long=-71.107117000000002
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=6373
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143784722200000
-GUID=0-0-0-0
-[Wp47]
-Loc=New location
-Name=6634
-Lat=42.401051000000002
-Long=-71.110241000000002
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=6634
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143703703700000
-GUID=0-0-0-0
-[Wp48]
-Loc=New location
-Name=6979
-Lat=42.432620999999997
-Long=-71.106532000000001
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=6979
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143703703700000
-GUID=0-0-0-0
-[Wp49]
-Loc=New location
-Name=6997
-Lat=42.431032999999999
-Long=-71.107883000000001
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=6997
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37211.960856481500000
-GUID=0-0-0-0
-[Wp50]
-Loc=New location
-Name=BEAR HILL
-Lat=42.465687000000003
-Long=-71.107360000000000
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=Bear Hill Tower
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143784722200000
-GUID=0-0-0-0
-[Wp51]
-Loc=New location
-Name=BELLEVUE
-Lat=42.430950000000003
-Long=-71.107628000000005
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=Bellevue Parking Lot
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.012673611100000
-GUID=0-0-0-0
-[Wp52]
-Loc=New location
-Name=6016
-Lat=42.438665999999998
-Long=-71.114079000000004
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=Bike Loop Connector
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37223.878796296300000
-GUID=0-0-0-0
-[Wp53]
-Loc=New location
-Name=5236BRIDGE
-Lat=42.456468999999998
-Long=-71.124651000000000
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=Bridge
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143738425900000
-GUID=0-0-0-0
-[Wp54]
-Loc=New location
-Name=5376BRIDGE
-Lat=42.465758999999998
-Long=-71.119815000000003
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=Bridge
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143761574100000
-GUID=0-0-0-0
-[Wp55]
-Loc=New location
-Name=6181CROSS
-Lat=42.442993000000001
-Long=-71.105878000000004
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=Crossing
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143807870400000
-GUID=0-0-0-0
-[Wp56]
-Loc=New location
-Name=6042CROSS
-Lat=42.435471999999997
-Long=-71.109663999999995
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=Crossing
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143807870400000
-GUID=0-0-0-0
-[Wp57]
-Loc=New location
-Name=DARKHOLLPO
-Lat=42.458516000000003
-Long=-71.103645999999998
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=Dark Hollow Pond
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=25569.000000000000000
-GUID=0-0-0-0
-[Wp58]
-Loc=New location
-Name=6121DEAD
-Lat=42.443109000000000
-Long=-71.112674999999996
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=Dead End
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143715277800000
-GUID=0-0-0-0
-[Wp59]
-Loc=New location
-Name=5179DEAD
-Lat=42.449866000000000
-Long=-71.119298000000001
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=Dead End
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143738425900000
-GUID=0-0-0-0
-[Wp60]
-Loc=New location
-Name=5299DEAD
-Lat=42.459629000000000
-Long=-71.116523999999998
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=Dead End
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143761574100000
-GUID=0-0-0-0
-[Wp61]
-Loc=New location
-Name=5376DEAD
-Lat=42.465485000000001
-Long=-71.119147999999996
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=Dead End
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143773148100000
-GUID=0-0-0-0
-[Wp62]
-Loc=New location
-Name=6353DEAD
-Lat=42.462775999999998
-Long=-71.109986000000006
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=Dead End
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143784722200000
-GUID=0-0-0-0
-[Wp63]
-Loc=New location
-Name=6155DEAD
-Lat=42.446793000000000
-Long=-71.108784000000000
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=Dead End
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143796296300000
-GUID=0-0-0-0
-[Wp64]
-Loc=New location
-Name=GATE14
-Lat=42.451203999999997
-Long=-71.126602000000005
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=Gate 14
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143738425900000
-GUID=0-0-0-0
-[Wp65]
-Loc=New location
-Name=GATE16
-Lat=42.458499000000003
-Long=-71.122078000000002
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=Gate 16
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143750000000000
-GUID=0-0-0-0
-[Wp66]
-Loc=New location
-Name=GATE17
-Lat=42.459375999999999
-Long=-71.119237999999996
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=Gate 17
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143761574100000
-GUID=0-0-0-0
-[Wp67]
-Loc=New location
-Name=GATE19
-Lat=42.466352999999998
-Long=-71.119240000000005
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=Gate 19
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143773148100000
-GUID=0-0-0-0
-[Wp68]
-Loc=New location
-Name=GATE21
-Lat=42.468654999999998
-Long=-71.107697000000002
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=Gate 21
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143784722200000
-GUID=0-0-0-0
-[Wp69]
-Loc=New location
-Name=GATE24
-Lat=42.456718000000002
-Long=-71.102973000000006
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=Gate 24
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143784722200000
-GUID=0-0-0-0
-[Wp70]
-Loc=New location
-Name=GATE5
-Lat=42.430847000000000
-Long=-71.107690000000005
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=Gate 5
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37223.878796296300000
-GUID=0-0-0-0
-[Wp71]
-Loc=New location
-Name=GATE6
-Lat=42.431240000000003
-Long=-71.109235999999996
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=Gate 6
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37202.995613425900000
-GUID=0-0-0-0
-[Wp72]
-Loc=New location
-Name=6077LOGS
-Lat=42.439501999999997
-Long=-71.106555999999998
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=Log Crossing
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.012685185200000
-GUID=0-0-0-0
-[Wp73]
-Loc=New location
-Name=5148NANEPA
-Lat=42.449764999999999
-Long=-71.122320000000002
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=Nanepashemet Road Crossing
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37202.995613425900000
-GUID=0-0-0-0
-[Wp74]
-Loc=New location
-Name=5267OBSTAC
-Lat=42.457388000000002
-Long=-71.119844999999998
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=Obstacle
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143750000000000
-GUID=0-0-0-0
-[Wp75]
-Loc=New location
-Name=PANTHRCAVE
-Lat=42.434980000000003
-Long=-71.109942000000004
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=Panther Cave
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37202.995613425900000
-GUID=0-0-0-0
-[Wp76]
-Loc=New location
-Name=5252PURPLE
-Lat=42.453256000000003
-Long=-71.121211000000002
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=Purple Rock Hill
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37202.995613425900000
-GUID=0-0-0-0
-[Wp77]
-Loc=New location
-Name=5287WATER
-Lat=42.457734000000002
-Long=-71.117480999999998
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=Reservoir
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143761574100000
-GUID=0-0-0-0
-[Wp78]
-Loc=New location
-Name=5239ROAD
-Lat=42.459277999999998
-Long=-71.124573999999996
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=Road
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143750000000000
-GUID=0-0-0-0
-[Wp79]
-Loc=New location
-Name=5278ROAD
-Lat=42.458781999999999
-Long=-71.118990999999994
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=Road
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143761574100000
-GUID=0-0-0-0
-[Wp80]
-Loc=New location
-Name=5058ROAD
-Lat=42.439993000000001
-Long=-71.120925000000000
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=Road Crossing
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.012662037000000
-GUID=0-0-0-0
-[Wp81]
-Loc=New location
-Name=SHEEPFOLD
-Lat=42.453415000000000
-Long=-71.106781999999995
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=Sheepfold Parking Lot
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.012650463000000
-GUID=0-0-0-0
-[Wp82]
-Loc=New location
-Name=SOAPBOX
-Lat=42.455956000000000
-Long=-71.107483000000002
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=Soap Box Derby Track
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.143796296300000
-GUID=0-0-0-0
-[Wp83]
-Loc=New location
-Name=5376STREAM
-Lat=42.465913000000000
-Long=-71.119327999999996
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=Stream Crossing
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37202.995613425900000
-GUID=0-0-0-0
-[Wp84]
-Loc=New location
-Name=5144SUMMIT
-Lat=42.445359000000003
-Long=-71.122844999999998
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=Summit
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37223.878796296300000
-GUID=0-0-0-0
-[Wp85]
-Loc=New location
-Name=5150TANK
-Lat=42.441727000000000
-Long=-71.121675999999994
-Rng=0.000000000000000
-Bear=0.000000000000000
-Bmp=3
-Fixed=1
-Locked=0
-Notes=Water Tank
-Rel=
-RelSet=1
-RcCount=1
-RcRadius=0.000000000000000
-Show=1
-RcShow=0
-SeaTemp=-32678.000000000000000
-Depth=65535.000000000000000
-Time=37044.012685185200000
-GUID=0-0-0-0
-[Rt0]
-Name=BELLEVUE
-Visible=1
-Guid=0-0-0-0
-Mk0=BELLEVUE
-Cog0=0.000000000000000
-Eta0=0.000000000000000
-LengthPredictedDrift0=0.000000000000000
-PredictedSet0=0.000000000000000
-PredictedSog0=0.000000000000000
-PredictedTime0=0.000000000000000
-PredictedTwa20=0.000000000000000
-PredictedTwd0=0.000000000000000
-PredictedTws0=0.000000000000000
-Mk1=GATE6
-Cog1=0.000000000000000
-Eta1=0.000000000000000
-LengthPredictedDrift1=0.000000000000000
-PredictedSet1=0.000000000000000
-PredictedSog1=0.000000000000000
-PredictedTime1=0.000000000000000
-PredictedTwa21=0.000000000000000
-PredictedTwd1=0.000000000000000
-PredictedTws1=0.000000000000000
-Mk2=PANTHRCAVE
-Cog2=0.000000000000000
-Eta2=0.000000000000000
-LengthPredictedDrift2=0.000000000000000
-PredictedSet2=0.000000000000000
-PredictedSog2=0.000000000000000
-PredictedTime2=0.000000000000000
-PredictedTwa22=0.000000000000000
-PredictedTwd2=0.000000000000000
-PredictedTws2=0.000000000000000
-Mk3=6014MEADOW
-Cog3=0.000000000000000
-Eta3=0.000000000000000
-LengthPredictedDrift3=0.000000000000000
-PredictedSet3=0.000000000000000
-PredictedSog3=0.000000000000000
-PredictedTime3=0.000000000000000
-PredictedTwa23=0.000000000000000
-PredictedTwd3=0.000000000000000
-PredictedTws3=0.000000000000000
-Mk4=6006
-Cog4=0.000000000000000
-Eta4=0.000000000000000
-LengthPredictedDrift4=0.000000000000000
-PredictedSet4=0.000000000000000
-PredictedSog4=0.000000000000000
-PredictedTime4=0.000000000000000
-PredictedTwa24=0.000000000000000
-PredictedTwd4=0.000000000000000
-PredictedTws4=0.000000000000000
-Mk5=6006BLUE
-Cog5=0.000000000000000
-Eta5=0.000000000000000
-LengthPredictedDrift5=0.000000000000000
-PredictedSet5=0.000000000000000
-PredictedSog5=0.000000000000000
-PredictedTime5=0.000000000000000
-PredictedTwa25=0.000000000000000
-PredictedTwd5=0.000000000000000
-PredictedTws5=0.000000000000000
-Mk6=5096
-Cog6=0.000000000000000
-Eta6=0.000000000000000
-LengthPredictedDrift6=0.000000000000000
-PredictedSet6=0.000000000000000
-PredictedSog6=0.000000000000000
-PredictedTime6=0.000000000000000
-PredictedTwa26=0.000000000000000
-PredictedTwd6=0.000000000000000
-PredictedTws6=0.000000000000000
-Mk7=5066
-Cog7=0.000000000000000
-Eta7=0.000000000000000
-LengthPredictedDrift7=0.000000000000000
-PredictedSet7=0.000000000000000
-PredictedSog7=0.000000000000000
-PredictedTime7=0.000000000000000
-PredictedTwa27=0.000000000000000
-PredictedTwd7=0.000000000000000
-PredictedTws7=0.000000000000000
-Mk8=5067
-Cog8=0.000000000000000
-Eta8=0.000000000000000
-LengthPredictedDrift8=0.000000000000000
-PredictedSet8=0.000000000000000
-PredictedSog8=0.000000000000000
-PredictedTime8=0.000000000000000
-PredictedTwa28=0.000000000000000
-PredictedTwd8=0.000000000000000
-PredictedTws8=0.000000000000000
-Mk9=5058ROAD
-Cog9=0.000000000000000
-Eta9=0.000000000000000
-LengthPredictedDrift9=0.000000000000000
-PredictedSet9=0.000000000000000
-PredictedSog9=0.000000000000000
-PredictedTime9=0.000000000000000
-PredictedTwa29=0.000000000000000
-PredictedTwd9=0.000000000000000
-PredictedTws9=0.000000000000000
-Mk10=5150TANK
-Cog10=0.000000000000000
-Eta10=0.000000000000000
-LengthPredictedDrift10=0.000000000000000
-PredictedSet10=0.000000000000000
-PredictedSog10=0.000000000000000
-PredictedTime10=0.000000000000000
-PredictedTwa210=0.000000000000000
-PredictedTwd10=0.000000000000000
-PredictedTws10=0.000000000000000
-Mk11=5142
-Cog11=0.000000000000000
-Eta11=0.000000000000000
-LengthPredictedDrift11=0.000000000000000
-PredictedSet11=0.000000000000000
-PredictedSog11=0.000000000000000
-PredictedTime11=0.000000000000000
-PredictedTwa211=0.000000000000000
-PredictedTwd11=0.000000000000000
-PredictedTws11=0.000000000000000
-Mk12=5144SUMMIT
-Cog12=0.000000000000000
-Eta12=0.000000000000000
-LengthPredictedDrift12=0.000000000000000
-PredictedSet12=0.000000000000000
-PredictedSog12=0.000000000000000
-PredictedTime12=0.000000000000000
-PredictedTwa212=0.000000000000000
-PredictedTwd12=0.000000000000000
-PredictedTws12=0.000000000000000
-Mk13=5156
-Cog13=0.000000000000000
-Eta13=0.000000000000000
-LengthPredictedDrift13=0.000000000000000
-PredictedSet13=0.000000000000000
-PredictedSog13=0.000000000000000
-PredictedTime13=0.000000000000000
-PredictedTwa213=0.000000000000000
-PredictedTwd13=0.000000000000000
-PredictedTws13=0.000000000000000
-Mk14=5148NANEPA
-Cog14=0.000000000000000
-Eta14=0.000000000000000
-LengthPredictedDrift14=0.000000000000000
-PredictedSet14=0.000000000000000
-PredictedSog14=0.000000000000000
-PredictedTime14=0.000000000000000
-PredictedTwa214=0.000000000000000
-PredictedTwd14=0.000000000000000
-PredictedTws14=0.000000000000000
-Mk15=5258
-Cog15=0.000000000000000
-Eta15=0.000000000000000
-LengthPredictedDrift15=0.000000000000000
-PredictedSet15=0.000000000000000
-PredictedSog15=0.000000000000000
-PredictedTime15=0.000000000000000
-PredictedTwa215=0.000000000000000
-PredictedTwd15=0.000000000000000
-PredictedTws15=0.000000000000000
-Mk16=5252PURPLE
-Cog16=0.000000000000000
-Eta16=0.000000000000000
-LengthPredictedDrift16=0.000000000000000
-PredictedSet16=0.000000000000000
-PredictedSog16=0.000000000000000
-PredictedTime16=0.000000000000000
-PredictedTwa216=0.000000000000000
-PredictedTwd16=0.000000000000000
-PredictedTws16=0.000000000000000
-Mk17=527631
-Cog17=0.000000000000000
-Eta17=0.000000000000000
-LengthPredictedDrift17=0.000000000000000
-PredictedSet17=0.000000000000000
-PredictedSog17=0.000000000000000
-PredictedTime17=0.000000000000000
-PredictedTwa217=0.000000000000000
-PredictedTwd17=0.000000000000000
-PredictedTws17=0.000000000000000
-Mk18=527614
-Cog18=0.000000000000000
-Eta18=0.000000000000000
-LengthPredictedDrift18=0.000000000000000
-PredictedSet18=0.000000000000000
-PredictedSog18=0.000000000000000
-PredictedTime18=0.000000000000000
-PredictedTwa218=0.000000000000000
-PredictedTwd18=0.000000000000000
-PredictedTws18=0.000000000000000
-Mk19=5267OBSTAC
-Cog19=0.000000000000000
-Eta19=0.000000000000000
-LengthPredictedDrift19=0.000000000000000
-PredictedSet19=0.000000000000000
-PredictedSog19=0.000000000000000
-PredictedTime19=0.000000000000000
-PredictedTwa219=0.000000000000000
-PredictedTwd19=0.000000000000000
-PredictedTws19=0.000000000000000
-Mk20=5278
-Cog20=0.000000000000000
-Eta20=0.000000000000000
-LengthPredictedDrift20=0.000000000000000
-PredictedSet20=0.000000000000000
-PredictedSog20=0.000000000000000
-PredictedTime20=0.000000000000000
-PredictedTwa220=0.000000000000000
-PredictedTwd20=0.000000000000000
-PredictedTws20=0.000000000000000
-Mk21=5289
-Cog21=0.000000000000000
-Eta21=0.000000000000000
-LengthPredictedDrift21=0.000000000000000
-PredictedSet21=0.000000000000000
-PredictedSog21=0.000000000000000
-PredictedTime21=0.000000000000000
-PredictedTwa221=0.000000000000000
-PredictedTwd21=0.000000000000000
-PredictedTws21=0.000000000000000
-Mk22=5374FIRE
-Cog22=0.000000000000000
-Eta22=0.000000000000000
-LengthPredictedDrift22=0.000000000000000
-PredictedSet22=0.000000000000000
-PredictedSog22=0.000000000000000
-PredictedTime22=0.000000000000000
-PredictedTwa222=0.000000000000000
-PredictedTwd22=0.000000000000000
-PredictedTws22=0.000000000000000
-Mk23=5376
-Cog23=0.000000000000000
-Eta23=0.000000000000000
-LengthPredictedDrift23=0.000000000000000
-PredictedSet23=0.000000000000000
-PredictedSog23=0.000000000000000
-PredictedTime23=0.000000000000000
-PredictedTwa223=0.000000000000000
-PredictedTwd23=0.000000000000000
-PredictedTws23=0.000000000000000
-Mk24=5376STREAM
-Cog24=0.000000000000000
-Eta24=0.000000000000000
-LengthPredictedDrift24=0.000000000000000
-PredictedSet24=0.000000000000000
-PredictedSog24=0.000000000000000
-PredictedTime24=0.000000000000000
-PredictedTwa224=0.000000000000000
-PredictedTwd24=0.000000000000000
-PredictedTws24=0.000000000000000
-Mk25=6328
-Cog25=0.000000000000000
-Eta25=0.000000000000000
-LengthPredictedDrift25=0.000000000000000
-PredictedSet25=0.000000000000000
-PredictedSog25=0.000000000000000
-PredictedTime25=0.000000000000000
-PredictedTwa225=0.000000000000000
-PredictedTwd25=0.000000000000000
-PredictedTws25=0.000000000000000
-Mk26=635722
-Cog26=0.000000000000000
-Eta26=0.000000000000000
-LengthPredictedDrift26=0.000000000000000
-PredictedSet26=0.000000000000000
-PredictedSog26=0.000000000000000
-PredictedTime26=0.000000000000000
-PredictedTwa226=0.000000000000000
-PredictedTwd26=0.000000000000000
-PredictedTws26=0.000000000000000
-Mk27=635783
-Cog27=0.000000000000000
-Eta27=0.000000000000000
-LengthPredictedDrift27=0.000000000000000
-PredictedSet27=0.000000000000000
-PredictedSog27=0.000000000000000
-PredictedTime27=0.000000000000000
-PredictedTwa227=0.000000000000000
-PredictedTwd27=0.000000000000000
-PredictedTws27=0.000000000000000
-Mk28=6373
-Cog28=0.000000000000000
-Eta28=0.000000000000000
-LengthPredictedDrift28=0.000000000000000
-PredictedSet28=0.000000000000000
-PredictedSog28=0.000000000000000
-PredictedTime28=0.000000000000000
-PredictedTwa228=0.000000000000000
-PredictedTwd28=0.000000000000000
-PredictedTws28=0.000000000000000
-Mk29=BEAR HILL
-Cog29=0.000000000000000
-Eta29=0.000000000000000
-LengthPredictedDrift29=0.000000000000000
-PredictedSet29=0.000000000000000
-PredictedSog29=0.000000000000000
-PredictedTime29=0.000000000000000
-PredictedTwa229=0.000000000000000
-PredictedTwd29=0.000000000000000
-PredictedTws29=0.000000000000000
-Mk30=6289
-Cog30=0.000000000000000
-Eta30=0.000000000000000
-LengthPredictedDrift30=0.000000000000000
-PredictedSet30=0.000000000000000
-PredictedSog30=0.000000000000000
-PredictedTime30=0.000000000000000
-PredictedTwa230=0.000000000000000
-PredictedTwd30=0.000000000000000
-PredictedTws30=0.000000000000000
-Mk31=6297
-Cog31=0.000000000000000
-Eta31=0.000000000000000
-LengthPredictedDrift31=0.000000000000000
-PredictedSet31=0.000000000000000
-PredictedSog31=0.000000000000000
-PredictedTime31=0.000000000000000
-PredictedTwa231=0.000000000000000
-PredictedTwd31=0.000000000000000
-PredictedTws31=0.000000000000000
-Mk32=6283
-Cog32=0.000000000000000
-Eta32=0.000000000000000
-LengthPredictedDrift32=0.000000000000000
-PredictedSet32=0.000000000000000
-PredictedSog32=0.000000000000000
-PredictedTime32=0.000000000000000
-PredictedTwa232=0.000000000000000
-PredictedTwd32=0.000000000000000
-PredictedTws32=0.000000000000000
-Mk33=6280
-Cog33=0.000000000000000
-Eta33=0.000000000000000
-LengthPredictedDrift33=0.000000000000000
-PredictedSet33=0.000000000000000
-PredictedSog33=0.000000000000000
-PredictedTime33=0.000000000000000
-PredictedTwa233=0.000000000000000
-PredictedTwd33=0.000000000000000
-PredictedTws33=0.000000000000000
-Mk34=6177
-Cog34=0.000000000000000
-Eta34=0.000000000000000
-LengthPredictedDrift34=0.000000000000000
-PredictedSet34=0.000000000000000
-PredictedSog34=0.000000000000000
-PredictedTime34=0.000000000000000
-PredictedTwa234=0.000000000000000
-PredictedTwd34=0.000000000000000
-PredictedTws34=0.000000000000000
-Mk35=6176
-Cog35=0.000000000000000
-Eta35=0.000000000000000
-LengthPredictedDrift35=0.000000000000000
-PredictedSet35=0.000000000000000
-PredictedSog35=0.000000000000000
-PredictedTime35=0.000000000000000
-PredictedTwa235=0.000000000000000
-PredictedTwd35=0.000000000000000
-PredictedTws35=0.000000000000000
-Mk36=6153
-Cog36=0.000000000000000
-Eta36=0.000000000000000
-LengthPredictedDrift36=0.000000000000000
-PredictedSet36=0.000000000000000
-PredictedSog36=0.000000000000000
-PredictedTime36=0.000000000000000
-PredictedTwa236=0.000000000000000
-PredictedTwd36=0.000000000000000
-PredictedTws36=0.000000000000000
-Mk37=6171
-Cog37=0.000000000000000
-Eta37=0.000000000000000
-LengthPredictedDrift37=0.000000000000000
-PredictedSet37=0.000000000000000
-PredictedSog37=0.000000000000000
-PredictedTime37=0.000000000000000
-PredictedTwa237=0.000000000000000
-PredictedTwd37=0.000000000000000
-PredictedTws37=0.000000000000000
-Mk38=6131
-Cog38=0.000000000000000
-Eta38=0.000000000000000
-LengthPredictedDrift38=0.000000000000000
-PredictedSet38=0.000000000000000
-PredictedSog38=0.000000000000000
-PredictedTime38=0.000000000000000
-PredictedTwa238=0.000000000000000
-PredictedTwd38=0.000000000000000
-PredictedTws38=0.000000000000000
-Mk39=6130
-Cog39=0.000000000000000
-Eta39=0.000000000000000
-LengthPredictedDrift39=0.000000000000000
-PredictedSet39=0.000000000000000
-PredictedSog39=0.000000000000000
-PredictedTime39=0.000000000000000
-PredictedTwa239=0.000000000000000
-PredictedTwd39=0.000000000000000
-PredictedTws39=0.000000000000000
-Mk40=6029
-Cog40=0.000000000000000
-Eta40=0.000000000000000
-LengthPredictedDrift40=0.000000000000000
-PredictedSet40=0.000000000000000
-PredictedSog40=0.000000000000000
-PredictedTime40=0.000000000000000
-PredictedTwa240=0.000000000000000
-PredictedTwd40=0.000000000000000
-PredictedTws40=0.000000000000000
-Mk41=6006
-Cog41=0.000000000000000
-Eta41=0.000000000000000
-LengthPredictedDrift41=0.000000000000000
-PredictedSet41=0.000000000000000
-PredictedSog41=0.000000000000000
-PredictedTime41=0.000000000000000
-PredictedTwa241=0.000000000000000
-PredictedTwd41=0.000000000000000
-PredictedTws41=0.000000000000000
-Mk42=6014MEADOW
-Cog42=0.000000000000000
-Eta42=0.000000000000000
-LengthPredictedDrift42=0.000000000000000
-PredictedSet42=0.000000000000000
-PredictedSog42=0.000000000000000
-PredictedTime42=0.000000000000000
-PredictedTwa242=0.000000000000000
-PredictedTwd42=0.000000000000000
-PredictedTws42=0.000000000000000
-Mk43=PANTHRCAVE
-Cog43=0.000000000000000
-Eta43=0.000000000000000
-LengthPredictedDrift43=0.000000000000000
-PredictedSet43=0.000000000000000
-PredictedSog43=0.000000000000000
-PredictedTime43=0.000000000000000
-PredictedTwa243=0.000000000000000
-PredictedTwd43=0.000000000000000
-PredictedTws43=0.000000000000000
-Mk44=GATE6
-Cog44=0.000000000000000
-Eta44=0.000000000000000
-LengthPredictedDrift44=0.000000000000000
-PredictedSet44=0.000000000000000
-PredictedSog44=0.000000000000000
-PredictedTime44=0.000000000000000
-PredictedTwa244=0.000000000000000
-PredictedTwd44=0.000000000000000
-PredictedTws44=0.000000000000000
-Mk45=BELLEVUE
-Cog45=0.000000000000000
-Eta45=0.000000000000000
-LengthPredictedDrift45=0.000000000000000
-PredictedSet45=0.000000000000000
-PredictedSog45=0.000000000000000
-PredictedTime45=0.000000000000000
-PredictedTwa245=0.000000000000000
-PredictedTwd45=0.000000000000000
-PredictedTws45=0.000000000000000
+[Wp0]\r
+Loc=My Waypoints\r
+Name=5058ROAD\r
+Lat=42.439993000000001\r
+Long=-71.120925000000000\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=Road Crossing\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.012662037000000\r
+[Wp1]\r
+Loc=My Waypoints\r
+Name=5066\r
+Lat=42.438878000000003\r
+Long=-71.119276999999997\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=5066\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37223.878796296300000\r
+[Wp2]\r
+Loc=My Waypoints\r
+Name=5067\r
+Lat=42.439227000000002\r
+Long=-71.119688999999994\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=5067\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143692129600000\r
+[Wp3]\r
+Loc=My Waypoints\r
+Name=5096\r
+Lat=42.438916999999996\r
+Long=-71.116146000000001\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=5096\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37211.960856481500000\r
+[Wp4]\r
+Loc=My Waypoints\r
+Name=5142\r
+Lat=42.443904000000003\r
+Long=-71.122044000000002\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=5142\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37223.878796296300000\r
+[Wp5]\r
+Loc=My Waypoints\r
+Name=5144SUMMIT\r
+Lat=42.445359000000003\r
+Long=-71.122844999999998\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=Summit\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37223.878796296300000\r
+[Wp6]\r
+Loc=My Waypoints\r
+Name=5148NANEPA\r
+Lat=42.449764999999999\r
+Long=-71.122320000000002\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=Nanepashemet Road Crossing\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37202.995613425900000\r
+[Wp7]\r
+Loc=My Waypoints\r
+Name=5150TANK\r
+Lat=42.441727000000000\r
+Long=-71.121675999999994\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=Water Tank\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.012685185200000\r
+[Wp8]\r
+Loc=My Waypoints\r
+Name=5156\r
+Lat=42.447298000000004\r
+Long=-71.121447000000003\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=5156\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143726851800000\r
+[Wp9]\r
+Loc=My Waypoints\r
+Name=5179DEAD\r
+Lat=42.449866000000000\r
+Long=-71.119298000000001\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=Dead End\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143738425900000\r
+[Wp10]\r
+Loc=My Waypoints\r
+Name=5224\r
+Lat=42.454872999999999\r
+Long=-71.125094000000004\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=5224\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143738425900000\r
+[Wp11]\r
+Loc=My Waypoints\r
+Name=5229\r
+Lat=42.459079000000003\r
+Long=-71.124988000000002\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=5229\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143738425900000\r
+[Wp12]\r
+Loc=My Waypoints\r
+Name=5236BRIDGE\r
+Lat=42.456468999999998\r
+Long=-71.124651000000000\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=Bridge\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143738425900000\r
+[Wp13]\r
+Loc=My Waypoints\r
+Name=5237\r
+Lat=42.456978999999997\r
+Long=-71.124474000000006\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=5237\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143738425900000\r
+[Wp14]\r
+Loc=My Waypoints\r
+Name=5239ROAD\r
+Lat=42.459277999999998\r
+Long=-71.124573999999996\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=Road\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143750000000000\r
+[Wp15]\r
+Loc=My Waypoints\r
+Name=5252PURPLE\r
+Lat=42.453256000000003\r
+Long=-71.121211000000002\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=Purple Rock Hill\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37202.995613425900000\r
+[Wp16]\r
+Loc=My Waypoints\r
+Name=5254\r
+Lat=42.454400999999997\r
+Long=-71.120990000000006\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=5254\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37223.878796296300000\r
+[Wp17]\r
+Loc=My Waypoints\r
+Name=5258\r
+Lat=42.451442000000000\r
+Long=-71.121746000000002\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=5258\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37202.995613425900000\r
+[Wp18]\r
+Loc=My Waypoints\r
+Name=5264\r
+Lat=42.454403999999997\r
+Long=-71.120660000000001\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=5264\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37223.878796296300000\r
+[Wp19]\r
+Loc=My Waypoints\r
+Name=526708\r
+Lat=42.457760999999998\r
+Long=-71.121044999999995\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=526708\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143750000000000\r
+[Wp20]\r
+Loc=My Waypoints\r
+Name=526750\r
+Lat=42.457089000000003\r
+Long=-71.120312999999996\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=526750\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143750000000000\r
+[Wp21]\r
+Loc=My Waypoints\r
+Name=5267OBSTAC\r
+Lat=42.457388000000002\r
+Long=-71.119844999999998\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=Obstacle\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143750000000000\r
+[Wp22]\r
+Loc=My Waypoints\r
+Name=527614\r
+Lat=42.456592000000001\r
+Long=-71.119675999999998\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=527614\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37202.995613425900000\r
+[Wp23]\r
+Loc=My Waypoints\r
+Name=527631\r
+Lat=42.456251999999999\r
+Long=-71.119355999999996\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=527631\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37202.995613425900000\r
+[Wp24]\r
+Loc=My Waypoints\r
+Name=5278\r
+Lat=42.458148000000001\r
+Long=-71.119135000000000\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=5278\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143750000000000\r
+[Wp25]\r
+Loc=My Waypoints\r
+Name=5278ROAD\r
+Lat=42.458781999999999\r
+Long=-71.118990999999994\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=Road\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143761574100000\r
+[Wp26]\r
+Loc=My Waypoints\r
+Name=5287WATER\r
+Lat=42.457734000000002\r
+Long=-71.117480999999998\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=44\r
+Fixed=1\r
+Locked=0\r
+Notes=Reservoir\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143761574100000\r
+[Wp27]\r
+Loc=My Waypoints\r
+Name=5289\r
+Lat=42.459377000000003\r
+Long=-71.117693000000003\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=5289\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143761574100000\r
+[Wp28]\r
+Loc=My Waypoints\r
+Name=5299DEAD\r
+Lat=42.459629000000000\r
+Long=-71.116523999999998\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=Dead End\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143761574100000\r
+[Wp29]\r
+Loc=My Waypoints\r
+Name=5374FIRE\r
+Lat=42.464182999999998\r
+Long=-71.119827999999998\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=5374FIRE\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37223.878796296300000\r
+[Wp30]\r
+Loc=My Waypoints\r
+Name=5376\r
+Lat=42.465649999999997\r
+Long=-71.119399000000001\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=5376\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143773148100000\r
+[Wp31]\r
+Loc=My Waypoints\r
+Name=5376BRIDGE\r
+Lat=42.465758999999998\r
+Long=-71.119815000000003\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=Bridge\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143761574100000\r
+[Wp32]\r
+Loc=My Waypoints\r
+Name=5376DEAD\r
+Lat=42.465485000000001\r
+Long=-71.119147999999996\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=Dead End\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143773148100000\r
+[Wp33]\r
+Loc=My Waypoints\r
+Name=5376STREAM\r
+Lat=42.465913000000000\r
+Long=-71.119327999999996\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=Stream Crossing\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37202.995613425900000\r
+[Wp34]\r
+Loc=My Waypoints\r
+Name=6006\r
+Lat=42.439017999999997\r
+Long=-71.114456000000004\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=600698\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143692129600000\r
+[Wp35]\r
+Loc=My Waypoints\r
+Name=6006BLUE\r
+Lat=42.438594000000002\r
+Long=-71.114802999999995\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=6006BLUE\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37223.878796296300000\r
+[Wp36]\r
+Loc=My Waypoints\r
+Name=6014MEADOW\r
+Lat=42.436757000000000\r
+Long=-71.113223000000005\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=6014MEADOW\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37223.878796296300000\r
+[Wp37]\r
+Loc=My Waypoints\r
+Name=6016\r
+Lat=42.438665999999998\r
+Long=-71.114079000000004\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=Bike Loop Connector\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37223.878796296300000\r
+[Wp38]\r
+Loc=My Waypoints\r
+Name=6029\r
+Lat=42.441754000000003\r
+Long=-71.113219999999998\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=6029\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143692129600000\r
+[Wp39]\r
+Loc=My Waypoints\r
+Name=6042CROSS\r
+Lat=42.435471999999997\r
+Long=-71.109663999999995\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=Crossing\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143807870400000\r
+[Wp40]\r
+Loc=My Waypoints\r
+Name=6053\r
+Lat=42.436242999999997\r
+Long=-71.109075000000004\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=6053\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143807870400000\r
+[Wp41]\r
+Loc=My Waypoints\r
+Name=6066\r
+Lat=42.439250000000001\r
+Long=-71.107500000000002\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=6066\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143715277800000\r
+[Wp42]\r
+Loc=My Waypoints\r
+Name=6067\r
+Lat=42.439763999999997\r
+Long=-71.107581999999994\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=6067\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143715277800000\r
+[Wp43]\r
+Loc=My Waypoints\r
+Name=6071\r
+Lat=42.434766000000003\r
+Long=-71.105874000000000\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=6071\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143715277800000\r
+[Wp44]\r
+Loc=My Waypoints\r
+Name=6073\r
+Lat=42.433304000000000\r
+Long=-71.106599000000003\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=6073\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143703703700000\r
+[Wp45]\r
+Loc=My Waypoints\r
+Name=6077LOGS\r
+Lat=42.439501999999997\r
+Long=-71.106555999999998\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=Log Crossing\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.012685185200000\r
+[Wp46]\r
+Loc=My Waypoints\r
+Name=6084\r
+Lat=42.437337999999997\r
+Long=-71.104771999999997\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=6084\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143715277800000\r
+[Wp47]\r
+Loc=My Waypoints\r
+Name=6121DEAD\r
+Lat=42.443109000000000\r
+Long=-71.112674999999996\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=Dead End\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143715277800000\r
+[Wp48]\r
+Loc=My Waypoints\r
+Name=6130\r
+Lat=42.442196000000003\r
+Long=-71.110974999999996\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=6130\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143692129600000\r
+[Wp49]\r
+Loc=My Waypoints\r
+Name=6131\r
+Lat=42.442981000000003\r
+Long=-71.111440999999999\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=6131\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143726851800000\r
+[Wp50]\r
+Loc=My Waypoints\r
+Name=6153\r
+Lat=42.444772999999998\r
+Long=-71.108881999999994\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=6153\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143807870400000\r
+[Wp51]\r
+Loc=My Waypoints\r
+Name=6155DEAD\r
+Lat=42.446793000000000\r
+Long=-71.108784000000000\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=Dead End\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143796296300000\r
+[Wp52]\r
+Loc=My Waypoints\r
+Name=6171\r
+Lat=42.443592000000002\r
+Long=-71.106301000000002\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=6171\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143807870400000\r
+[Wp53]\r
+Loc=My Waypoints\r
+Name=6176\r
+Lat=42.447803999999998\r
+Long=-71.106623999999996\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=6176\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143796296300000\r
+[Wp54]\r
+Loc=My Waypoints\r
+Name=6177\r
+Lat=42.448447999999999\r
+Long=-71.106157999999994\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=6177\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143796296300000\r
+[Wp55]\r
+Loc=My Waypoints\r
+Name=6181CROSS\r
+Lat=42.442993000000001\r
+Long=-71.105878000000004\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=Crossing\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143807870400000\r
+[Wp56]\r
+Loc=My Waypoints\r
+Name=6272\r
+Lat=42.453415000000000\r
+Long=-71.106782999999993\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=6272\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143692129600000\r
+[Wp57]\r
+Loc=My Waypoints\r
+Name=6272.1\r
+Lat=42.453434000000001\r
+Long=-71.107253000000000\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=6272\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143703703700000\r
+[Wp58]\r
+Loc=My Waypoints\r
+Name=6278\r
+Lat=42.458297999999999\r
+Long=-71.106770999999995\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=6278\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143796296300000\r
+[Wp59]\r
+Loc=My Waypoints\r
+Name=6280\r
+Lat=42.451430000000002\r
+Long=-71.105412999999999\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=6280\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37211.960856481500000\r
+[Wp60]\r
+Loc=My Waypoints\r
+Name=6283\r
+Lat=42.453845000000001\r
+Long=-71.105205999999995\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=6283\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37211.960856481500000\r
+[Wp61]\r
+Loc=My Waypoints\r
+Name=6289\r
+Lat=42.459986000000001\r
+Long=-71.106170000000006\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=6289\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37211.960856481500000\r
+[Wp62]\r
+Loc=My Waypoints\r
+Name=6297\r
+Lat=42.457616000000002\r
+Long=-71.105115999999995\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=6297\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143796296300000\r
+[Wp63]\r
+Loc=My Waypoints\r
+Name=6328\r
+Lat=42.467109999999998\r
+Long=-71.113574000000000\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=6328\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143773148100000\r
+[Wp64]\r
+Loc=My Waypoints\r
+Name=6353DEAD\r
+Lat=42.462775999999998\r
+Long=-71.109986000000006\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=Dead End\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143784722200000\r
+[Wp65]\r
+Loc=My Waypoints\r
+Name=6354\r
+Lat=42.464202000000000\r
+Long=-71.109863000000004\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=6354\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143784722200000\r
+[Wp66]\r
+Loc=My Waypoints\r
+Name=635722\r
+Lat=42.466459000000000\r
+Long=-71.110067000000001\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=635722\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143773148100000\r
+[Wp67]\r
+Loc=My Waypoints\r
+Name=635783\r
+Lat=42.466557000000002\r
+Long=-71.109409999999997\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=635783\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143773148100000\r
+[Wp68]\r
+Loc=My Waypoints\r
+Name=6373\r
+Lat=42.463495000000002\r
+Long=-71.107117000000002\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=6373\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143784722200000\r
+[Wp69]\r
+Loc=My Waypoints\r
+Name=6634\r
+Lat=42.401051000000002\r
+Long=-71.110241000000002\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=6634\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143703703700000\r
+[Wp70]\r
+Loc=My Waypoints\r
+Name=6979\r
+Lat=42.432620999999997\r
+Long=-71.106532000000001\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=6979\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143703703700000\r
+[Wp71]\r
+Loc=My Waypoints\r
+Name=6997\r
+Lat=42.431032999999999\r
+Long=-71.107883000000001\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=6997\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37211.960856481500000\r
+[Wp72]\r
+Loc=My Waypoints\r
+Name=BEAR HILL\r
+Lat=42.465687000000003\r
+Long=-71.107360000000000\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=Bear Hill Tower\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143784722200000\r
+[Wp73]\r
+Loc=My Waypoints\r
+Name=BELLEVUE\r
+Lat=42.430950000000003\r
+Long=-71.107628000000005\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=Bellevue Parking Lot\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.012673611100000\r
+[Wp74]\r
+Loc=My Waypoints\r
+Name=DARKHOLLPO\r
+Lat=42.458516000000003\r
+Long=-71.103645999999998\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=Dark Hollow Pond\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=25569.000000000000000\r
+[Wp75]\r
+Loc=My Waypoints\r
+Name=GATE14\r
+Lat=42.451203999999997\r
+Long=-71.126602000000005\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=Gate 14\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143738425900000\r
+[Wp76]\r
+Loc=My Waypoints\r
+Name=GATE16\r
+Lat=42.458499000000003\r
+Long=-71.122078000000002\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=Gate 16\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143750000000000\r
+[Wp77]\r
+Loc=My Waypoints\r
+Name=GATE17\r
+Lat=42.459375999999999\r
+Long=-71.119237999999996\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=Gate 17\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143761574100000\r
+[Wp78]\r
+Loc=My Waypoints\r
+Name=GATE19\r
+Lat=42.466352999999998\r
+Long=-71.119240000000005\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=Gate 19\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143773148100000\r
+[Wp79]\r
+Loc=My Waypoints\r
+Name=GATE21\r
+Lat=42.468654999999998\r
+Long=-71.107697000000002\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=Gate 21\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143784722200000\r
+[Wp80]\r
+Loc=My Waypoints\r
+Name=GATE24\r
+Lat=42.456718000000002\r
+Long=-71.102973000000006\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=Gate 24\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143784722200000\r
+[Wp81]\r
+Loc=My Waypoints\r
+Name=GATE5\r
+Lat=42.430847000000000\r
+Long=-71.107690000000005\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=Gate 5\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37223.878796296300000\r
+[Wp82]\r
+Loc=My Waypoints\r
+Name=GATE6\r
+Lat=42.431240000000003\r
+Long=-71.109235999999996\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=Gate 6\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37202.995613425900000\r
+[Wp83]\r
+Loc=My Waypoints\r
+Name=PANTHRCAVE\r
+Lat=42.434980000000003\r
+Long=-71.109942000000004\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=Panther Cave\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37202.995613425900000\r
+[Wp84]\r
+Loc=My Waypoints\r
+Name=SHEEPFOLD\r
+Lat=42.453415000000000\r
+Long=-71.106781999999995\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=Sheepfold Parking Lot\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.012650463000000\r
+[Wp85]\r
+Loc=My Waypoints\r
+Name=SOAPBOX\r
+Lat=42.455956000000000\r
+Long=-71.107483000000002\r
+Rng=0.000000000000000\r
+Bear=0.000000000000000\r
+Bmp=3\r
+Fixed=1\r
+Locked=0\r
+Notes=Soap Box Derby Track\r
+Rel=\r
+RelSet=0\r
+RcCount=0\r
+RcRadius=0.000000000000000\r
+Show=1\r
+RcShow=0\r
+SeaTemp=-32678.000000000000000\r
+Depth=65535.000000000000000\r
+Time=37044.143796296300000\r
+[Rt0]\r
+Name=BELLEVUE\r
+Visible=1\r
+Mk0=BELLEVUE\r
+Cog0=0.000000000000000\r
+Eta0=0.000000000000000\r
+Length0=0.000000000000000\r
+PredictedDrift0=0.000000000000000\r
+PredictedSet0=0.000000000000000\r
+PredictedSog0=0.000000000000000\r
+PredictedTime0=0.000000000000000\r
+PredictedTwa0=0.000000000000000\r
+PredictedTwd0=0.000000000000000\r
+PredictedTws0=0.000000000000000\r
+Mk1=GATE6\r
+Cog1=0.000000000000000\r
+Eta1=0.000000000000000\r
+Length1=0.000000000000000\r
+PredictedDrift1=0.000000000000000\r
+PredictedSet1=0.000000000000000\r
+PredictedSog1=0.000000000000000\r
+PredictedTime1=0.000000000000000\r
+PredictedTwa1=0.000000000000000\r
+PredictedTwd1=0.000000000000000\r
+PredictedTws1=0.000000000000000\r
+Mk2=PANTHRCAVE\r
+Cog2=0.000000000000000\r
+Eta2=0.000000000000000\r
+Length2=0.000000000000000\r
+PredictedDrift2=0.000000000000000\r
+PredictedSet2=0.000000000000000\r
+PredictedSog2=0.000000000000000\r
+PredictedTime2=0.000000000000000\r
+PredictedTwa2=0.000000000000000\r
+PredictedTwd2=0.000000000000000\r
+PredictedTws2=0.000000000000000\r
+Mk3=6014MEADOW\r
+Cog3=0.000000000000000\r
+Eta3=0.000000000000000\r
+Length3=0.000000000000000\r
+PredictedDrift3=0.000000000000000\r
+PredictedSet3=0.000000000000000\r
+PredictedSog3=0.000000000000000\r
+PredictedTime3=0.000000000000000\r
+PredictedTwa3=0.000000000000000\r
+PredictedTwd3=0.000000000000000\r
+PredictedTws3=0.000000000000000\r
+Mk4=6006\r
+Cog4=0.000000000000000\r
+Eta4=0.000000000000000\r
+Length4=0.000000000000000\r
+PredictedDrift4=0.000000000000000\r
+PredictedSet4=0.000000000000000\r
+PredictedSog4=0.000000000000000\r
+PredictedTime4=0.000000000000000\r
+PredictedTwa4=0.000000000000000\r
+PredictedTwd4=0.000000000000000\r
+PredictedTws4=0.000000000000000\r
+Mk5=6006BLUE\r
+Cog5=0.000000000000000\r
+Eta5=0.000000000000000\r
+Length5=0.000000000000000\r
+PredictedDrift5=0.000000000000000\r
+PredictedSet5=0.000000000000000\r
+PredictedSog5=0.000000000000000\r
+PredictedTime5=0.000000000000000\r
+PredictedTwa5=0.000000000000000\r
+PredictedTwd5=0.000000000000000\r
+PredictedTws5=0.000000000000000\r
+Mk6=5096\r
+Cog6=0.000000000000000\r
+Eta6=0.000000000000000\r
+Length6=0.000000000000000\r
+PredictedDrift6=0.000000000000000\r
+PredictedSet6=0.000000000000000\r
+PredictedSog6=0.000000000000000\r
+PredictedTime6=0.000000000000000\r
+PredictedTwa6=0.000000000000000\r
+PredictedTwd6=0.000000000000000\r
+PredictedTws6=0.000000000000000\r
+Mk7=5066\r
+Cog7=0.000000000000000\r
+Eta7=0.000000000000000\r
+Length7=0.000000000000000\r
+PredictedDrift7=0.000000000000000\r
+PredictedSet7=0.000000000000000\r
+PredictedSog7=0.000000000000000\r
+PredictedTime7=0.000000000000000\r
+PredictedTwa7=0.000000000000000\r
+PredictedTwd7=0.000000000000000\r
+PredictedTws7=0.000000000000000\r
+Mk8=5067\r
+Cog8=0.000000000000000\r
+Eta8=0.000000000000000\r
+Length8=0.000000000000000\r
+PredictedDrift8=0.000000000000000\r
+PredictedSet8=0.000000000000000\r
+PredictedSog8=0.000000000000000\r
+PredictedTime8=0.000000000000000\r
+PredictedTwa8=0.000000000000000\r
+PredictedTwd8=0.000000000000000\r
+PredictedTws8=0.000000000000000\r
+Mk9=5058ROAD\r
+Cog9=0.000000000000000\r
+Eta9=0.000000000000000\r
+Length9=0.000000000000000\r
+PredictedDrift9=0.000000000000000\r
+PredictedSet9=0.000000000000000\r
+PredictedSog9=0.000000000000000\r
+PredictedTime9=0.000000000000000\r
+PredictedTwa9=0.000000000000000\r
+PredictedTwd9=0.000000000000000\r
+PredictedTws9=0.000000000000000\r
+Mk10=5150TANK\r
+Cog10=0.000000000000000\r
+Eta10=0.000000000000000\r
+Length10=0.000000000000000\r
+PredictedDrift10=0.000000000000000\r
+PredictedSet10=0.000000000000000\r
+PredictedSog10=0.000000000000000\r
+PredictedTime10=0.000000000000000\r
+PredictedTwa10=0.000000000000000\r
+PredictedTwd10=0.000000000000000\r
+PredictedTws10=0.000000000000000\r
+Mk11=5142\r
+Cog11=0.000000000000000\r
+Eta11=0.000000000000000\r
+Length11=0.000000000000000\r
+PredictedDrift11=0.000000000000000\r
+PredictedSet11=0.000000000000000\r
+PredictedSog11=0.000000000000000\r
+PredictedTime11=0.000000000000000\r
+PredictedTwa11=0.000000000000000\r
+PredictedTwd11=0.000000000000000\r
+PredictedTws11=0.000000000000000\r
+Mk12=5144SUMMIT\r
+Cog12=0.000000000000000\r
+Eta12=0.000000000000000\r
+Length12=0.000000000000000\r
+PredictedDrift12=0.000000000000000\r
+PredictedSet12=0.000000000000000\r
+PredictedSog12=0.000000000000000\r
+PredictedTime12=0.000000000000000\r
+PredictedTwa12=0.000000000000000\r
+PredictedTwd12=0.000000000000000\r
+PredictedTws12=0.000000000000000\r
+Mk13=5156\r
+Cog13=0.000000000000000\r
+Eta13=0.000000000000000\r
+Length13=0.000000000000000\r
+PredictedDrift13=0.000000000000000\r
+PredictedSet13=0.000000000000000\r
+PredictedSog13=0.000000000000000\r
+PredictedTime13=0.000000000000000\r
+PredictedTwa13=0.000000000000000\r
+PredictedTwd13=0.000000000000000\r
+PredictedTws13=0.000000000000000\r
+Mk14=5148NANEPA\r
+Cog14=0.000000000000000\r
+Eta14=0.000000000000000\r
+Length14=0.000000000000000\r
+PredictedDrift14=0.000000000000000\r
+PredictedSet14=0.000000000000000\r
+PredictedSog14=0.000000000000000\r
+PredictedTime14=0.000000000000000\r
+PredictedTwa14=0.000000000000000\r
+PredictedTwd14=0.000000000000000\r
+PredictedTws14=0.000000000000000\r
+Mk15=5258\r
+Cog15=0.000000000000000\r
+Eta15=0.000000000000000\r
+Length15=0.000000000000000\r
+PredictedDrift15=0.000000000000000\r
+PredictedSet15=0.000000000000000\r
+PredictedSog15=0.000000000000000\r
+PredictedTime15=0.000000000000000\r
+PredictedTwa15=0.000000000000000\r
+PredictedTwd15=0.000000000000000\r
+PredictedTws15=0.000000000000000\r
+Mk16=5252PURPLE\r
+Cog16=0.000000000000000\r
+Eta16=0.000000000000000\r
+Length16=0.000000000000000\r
+PredictedDrift16=0.000000000000000\r
+PredictedSet16=0.000000000000000\r
+PredictedSog16=0.000000000000000\r
+PredictedTime16=0.000000000000000\r
+PredictedTwa16=0.000000000000000\r
+PredictedTwd16=0.000000000000000\r
+PredictedTws16=0.000000000000000\r
+Mk17=527631\r
+Cog17=0.000000000000000\r
+Eta17=0.000000000000000\r
+Length17=0.000000000000000\r
+PredictedDrift17=0.000000000000000\r
+PredictedSet17=0.000000000000000\r
+PredictedSog17=0.000000000000000\r
+PredictedTime17=0.000000000000000\r
+PredictedTwa17=0.000000000000000\r
+PredictedTwd17=0.000000000000000\r
+PredictedTws17=0.000000000000000\r
+Mk18=527614\r
+Cog18=0.000000000000000\r
+Eta18=0.000000000000000\r
+Length18=0.000000000000000\r
+PredictedDrift18=0.000000000000000\r
+PredictedSet18=0.000000000000000\r
+PredictedSog18=0.000000000000000\r
+PredictedTime18=0.000000000000000\r
+PredictedTwa18=0.000000000000000\r
+PredictedTwd18=0.000000000000000\r
+PredictedTws18=0.000000000000000\r
+Mk19=5267OBSTAC\r
+Cog19=0.000000000000000\r
+Eta19=0.000000000000000\r
+Length19=0.000000000000000\r
+PredictedDrift19=0.000000000000000\r
+PredictedSet19=0.000000000000000\r
+PredictedSog19=0.000000000000000\r
+PredictedTime19=0.000000000000000\r
+PredictedTwa19=0.000000000000000\r
+PredictedTwd19=0.000000000000000\r
+PredictedTws19=0.000000000000000\r
+Mk20=5278\r
+Cog20=0.000000000000000\r
+Eta20=0.000000000000000\r
+Length20=0.000000000000000\r
+PredictedDrift20=0.000000000000000\r
+PredictedSet20=0.000000000000000\r
+PredictedSog20=0.000000000000000\r
+PredictedTime20=0.000000000000000\r
+PredictedTwa20=0.000000000000000\r
+PredictedTwd20=0.000000000000000\r
+PredictedTws20=0.000000000000000\r
+Mk21=5289\r
+Cog21=0.000000000000000\r
+Eta21=0.000000000000000\r
+Length21=0.000000000000000\r
+PredictedDrift21=0.000000000000000\r
+PredictedSet21=0.000000000000000\r
+PredictedSog21=0.000000000000000\r
+PredictedTime21=0.000000000000000\r
+PredictedTwa21=0.000000000000000\r
+PredictedTwd21=0.000000000000000\r
+PredictedTws21=0.000000000000000\r
+Mk22=5374FIRE\r
+Cog22=0.000000000000000\r
+Eta22=0.000000000000000\r
+Length22=0.000000000000000\r
+PredictedDrift22=0.000000000000000\r
+PredictedSet22=0.000000000000000\r
+PredictedSog22=0.000000000000000\r
+PredictedTime22=0.000000000000000\r
+PredictedTwa22=0.000000000000000\r
+PredictedTwd22=0.000000000000000\r
+PredictedTws22=0.000000000000000\r
+Mk23=5376\r
+Cog23=0.000000000000000\r
+Eta23=0.000000000000000\r
+Length23=0.000000000000000\r
+PredictedDrift23=0.000000000000000\r
+PredictedSet23=0.000000000000000\r
+PredictedSog23=0.000000000000000\r
+PredictedTime23=0.000000000000000\r
+PredictedTwa23=0.000000000000000\r
+PredictedTwd23=0.000000000000000\r
+PredictedTws23=0.000000000000000\r
+Mk24=5376STREAM\r
+Cog24=0.000000000000000\r
+Eta24=0.000000000000000\r
+Length24=0.000000000000000\r
+PredictedDrift24=0.000000000000000\r
+PredictedSet24=0.000000000000000\r
+PredictedSog24=0.000000000000000\r
+PredictedTime24=0.000000000000000\r
+PredictedTwa24=0.000000000000000\r
+PredictedTwd24=0.000000000000000\r
+PredictedTws24=0.000000000000000\r
+Mk25=6328\r
+Cog25=0.000000000000000\r
+Eta25=0.000000000000000\r
+Length25=0.000000000000000\r
+PredictedDrift25=0.000000000000000\r
+PredictedSet25=0.000000000000000\r
+PredictedSog25=0.000000000000000\r
+PredictedTime25=0.000000000000000\r
+PredictedTwa25=0.000000000000000\r
+PredictedTwd25=0.000000000000000\r
+PredictedTws25=0.000000000000000\r
+Mk26=635722\r
+Cog26=0.000000000000000\r
+Eta26=0.000000000000000\r
+Length26=0.000000000000000\r
+PredictedDrift26=0.000000000000000\r
+PredictedSet26=0.000000000000000\r
+PredictedSog26=0.000000000000000\r
+PredictedTime26=0.000000000000000\r
+PredictedTwa26=0.000000000000000\r
+PredictedTwd26=0.000000000000000\r
+PredictedTws26=0.000000000000000\r
+Mk27=635783\r
+Cog27=0.000000000000000\r
+Eta27=0.000000000000000\r
+Length27=0.000000000000000\r
+PredictedDrift27=0.000000000000000\r
+PredictedSet27=0.000000000000000\r
+PredictedSog27=0.000000000000000\r
+PredictedTime27=0.000000000000000\r
+PredictedTwa27=0.000000000000000\r
+PredictedTwd27=0.000000000000000\r
+PredictedTws27=0.000000000000000\r
+Mk28=6373\r
+Cog28=0.000000000000000\r
+Eta28=0.000000000000000\r
+Length28=0.000000000000000\r
+PredictedDrift28=0.000000000000000\r
+PredictedSet28=0.000000000000000\r
+PredictedSog28=0.000000000000000\r
+PredictedTime28=0.000000000000000\r
+PredictedTwa28=0.000000000000000\r
+PredictedTwd28=0.000000000000000\r
+PredictedTws28=0.000000000000000\r
+Mk29=BEAR HILL\r
+Cog29=0.000000000000000\r
+Eta29=0.000000000000000\r
+Length29=0.000000000000000\r
+PredictedDrift29=0.000000000000000\r
+PredictedSet29=0.000000000000000\r
+PredictedSog29=0.000000000000000\r
+PredictedTime29=0.000000000000000\r
+PredictedTwa29=0.000000000000000\r
+PredictedTwd29=0.000000000000000\r
+PredictedTws29=0.000000000000000\r
+Mk30=6289\r
+Cog30=0.000000000000000\r
+Eta30=0.000000000000000\r
+Length30=0.000000000000000\r
+PredictedDrift30=0.000000000000000\r
+PredictedSet30=0.000000000000000\r
+PredictedSog30=0.000000000000000\r
+PredictedTime30=0.000000000000000\r
+PredictedTwa30=0.000000000000000\r
+PredictedTwd30=0.000000000000000\r
+PredictedTws30=0.000000000000000\r
+Mk31=6297\r
+Cog31=0.000000000000000\r
+Eta31=0.000000000000000\r
+Length31=0.000000000000000\r
+PredictedDrift31=0.000000000000000\r
+PredictedSet31=0.000000000000000\r
+PredictedSog31=0.000000000000000\r
+PredictedTime31=0.000000000000000\r
+PredictedTwa31=0.000000000000000\r
+PredictedTwd31=0.000000000000000\r
+PredictedTws31=0.000000000000000\r
+Mk32=6283\r
+Cog32=0.000000000000000\r
+Eta32=0.000000000000000\r
+Length32=0.000000000000000\r
+PredictedDrift32=0.000000000000000\r
+PredictedSet32=0.000000000000000\r
+PredictedSog32=0.000000000000000\r
+PredictedTime32=0.000000000000000\r
+PredictedTwa32=0.000000000000000\r
+PredictedTwd32=0.000000000000000\r
+PredictedTws32=0.000000000000000\r
+Mk33=6280\r
+Cog33=0.000000000000000\r
+Eta33=0.000000000000000\r
+Length33=0.000000000000000\r
+PredictedDrift33=0.000000000000000\r
+PredictedSet33=0.000000000000000\r
+PredictedSog33=0.000000000000000\r
+PredictedTime33=0.000000000000000\r
+PredictedTwa33=0.000000000000000\r
+PredictedTwd33=0.000000000000000\r
+PredictedTws33=0.000000000000000\r
+Mk34=6177\r
+Cog34=0.000000000000000\r
+Eta34=0.000000000000000\r
+Length34=0.000000000000000\r
+PredictedDrift34=0.000000000000000\r
+PredictedSet34=0.000000000000000\r
+PredictedSog34=0.000000000000000\r
+PredictedTime34=0.000000000000000\r
+PredictedTwa34=0.000000000000000\r
+PredictedTwd34=0.000000000000000\r
+PredictedTws34=0.000000000000000\r
+Mk35=6176\r
+Cog35=0.000000000000000\r
+Eta35=0.000000000000000\r
+Length35=0.000000000000000\r
+PredictedDrift35=0.000000000000000\r
+PredictedSet35=0.000000000000000\r
+PredictedSog35=0.000000000000000\r
+PredictedTime35=0.000000000000000\r
+PredictedTwa35=0.000000000000000\r
+PredictedTwd35=0.000000000000000\r
+PredictedTws35=0.000000000000000\r
+Mk36=6153\r
+Cog36=0.000000000000000\r
+Eta36=0.000000000000000\r
+Length36=0.000000000000000\r
+PredictedDrift36=0.000000000000000\r
+PredictedSet36=0.000000000000000\r
+PredictedSog36=0.000000000000000\r
+PredictedTime36=0.000000000000000\r
+PredictedTwa36=0.000000000000000\r
+PredictedTwd36=0.000000000000000\r
+PredictedTws36=0.000000000000000\r
+Mk37=6171\r
+Cog37=0.000000000000000\r
+Eta37=0.000000000000000\r
+Length37=0.000000000000000\r
+PredictedDrift37=0.000000000000000\r
+PredictedSet37=0.000000000000000\r
+PredictedSog37=0.000000000000000\r
+PredictedTime37=0.000000000000000\r
+PredictedTwa37=0.000000000000000\r
+PredictedTwd37=0.000000000000000\r
+PredictedTws37=0.000000000000000\r
+Mk38=6131\r
+Cog38=0.000000000000000\r
+Eta38=0.000000000000000\r
+Length38=0.000000000000000\r
+PredictedDrift38=0.000000000000000\r
+PredictedSet38=0.000000000000000\r
+PredictedSog38=0.000000000000000\r
+PredictedTime38=0.000000000000000\r
+PredictedTwa38=0.000000000000000\r
+PredictedTwd38=0.000000000000000\r
+PredictedTws38=0.000000000000000\r
+Mk39=6130\r
+Cog39=0.000000000000000\r
+Eta39=0.000000000000000\r
+Length39=0.000000000000000\r
+PredictedDrift39=0.000000000000000\r
+PredictedSet39=0.000000000000000\r
+PredictedSog39=0.000000000000000\r
+PredictedTime39=0.000000000000000\r
+PredictedTwa39=0.000000000000000\r
+PredictedTwd39=0.000000000000000\r
+PredictedTws39=0.000000000000000\r
+Mk40=6029\r
+Cog40=0.000000000000000\r
+Eta40=0.000000000000000\r
+Length40=0.000000000000000\r
+PredictedDrift40=0.000000000000000\r
+PredictedSet40=0.000000000000000\r
+PredictedSog40=0.000000000000000\r
+PredictedTime40=0.000000000000000\r
+PredictedTwa40=0.000000000000000\r
+PredictedTwd40=0.000000000000000\r
+PredictedTws40=0.000000000000000\r
+Mk41=6006\r
+Cog41=0.000000000000000\r
+Eta41=0.000000000000000\r
+Length41=0.000000000000000\r
+PredictedDrift41=0.000000000000000\r
+PredictedSet41=0.000000000000000\r
+PredictedSog41=0.000000000000000\r
+PredictedTime41=0.000000000000000\r
+PredictedTwa41=0.000000000000000\r
+PredictedTwd41=0.000000000000000\r
+PredictedTws41=0.000000000000000\r
+Mk42=6014MEADOW\r
+Cog42=0.000000000000000\r
+Eta42=0.000000000000000\r
+Length42=0.000000000000000\r
+PredictedDrift42=0.000000000000000\r
+PredictedSet42=0.000000000000000\r
+PredictedSog42=0.000000000000000\r
+PredictedTime42=0.000000000000000\r
+PredictedTwa42=0.000000000000000\r
+PredictedTwd42=0.000000000000000\r
+PredictedTws42=0.000000000000000\r
+Mk43=PANTHRCAVE\r
+Cog43=0.000000000000000\r
+Eta43=0.000000000000000\r
+Length43=0.000000000000000\r
+PredictedDrift43=0.000000000000000\r
+PredictedSet43=0.000000000000000\r
+PredictedSog43=0.000000000000000\r
+PredictedTime43=0.000000000000000\r
+PredictedTwa43=0.000000000000000\r
+PredictedTwd43=0.000000000000000\r
+PredictedTws43=0.000000000000000\r
+Mk44=GATE6\r
+Cog44=0.000000000000000\r
+Eta44=0.000000000000000\r
+Length44=0.000000000000000\r
+PredictedDrift44=0.000000000000000\r
+PredictedSet44=0.000000000000000\r
+PredictedSog44=0.000000000000000\r
+PredictedTime44=0.000000000000000\r
+PredictedTwa44=0.000000000000000\r
+PredictedTwd44=0.000000000000000\r
+PredictedTws44=0.000000000000000\r
+Mk45=BELLEVUE\r
+Cog45=0.000000000000000\r
+Eta45=0.000000000000000\r
+Length45=0.000000000000000\r
+PredictedDrift45=0.000000000000000\r
+PredictedSet45=0.000000000000000\r
+PredictedSog45=0.000000000000000\r
+PredictedTime45=0.000000000000000\r
+PredictedTwa45=0.000000000000000\r
+PredictedTwd45=0.000000000000000\r
+PredictedTws45=0.000000000000000\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<gpx
+ version="1.0"
+creator="GPSBabel - http://www.gpsbabel.org"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xmlns="http://www.topografix.com/GPX/1/0"
+xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd">
+<time>1970-01-01T00:00:00Z</time>
+<bounds minlat="42.401050944" minlon="-71.126601985" maxlat="42.468654849" maxlon="-71.102972981"/>
+<wpt lat="42.439992931" lon="-71.120924922">
+ <name>5058ROAD</name>
+ <cmt>ROAD CROSSING</cmt>
+ <desc>ROAD CROSSING</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.438877970" lon="-71.119276956">
+ <name>5066</name>
+ <cmt>5066</cmt>
+ <desc>5066</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.439226909" lon="-71.119688759">
+ <name>5067</name>
+ <cmt>5067</cmt>
+ <desc>5067</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.438916946" lon="-71.116145980">
+ <name>5096</name>
+ <cmt>5096</cmt>
+ <desc>5096</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.443903927" lon="-71.122043990">
+ <name>5142</name>
+ <cmt>5142</cmt>
+ <desc>5142</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.445358858" lon="-71.122844797">
+ <name>5144SUMMIT</name>
+ <cmt>Summit</cmt>
+ <desc>Summit</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.449764973" lon="-71.122319922">
+ <name>5148NANEPA</name>
+ <cmt>Nanepashemet Road Crossing</cmt>
+ <desc>Nanepashemet Road Crossing</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.441726979" lon="-71.121675773">
+ <name>5150TANK</name>
+ <cmt>WATER TANK</cmt>
+ <desc>WATER TANK</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.447297927" lon="-71.121446947">
+ <name>5156</name>
+ <cmt>5156</cmt>
+ <desc>5156</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.449865891" lon="-71.119297827">
+ <name>5179DEAD</name>
+ <cmt>Dead End</cmt>
+ <desc>Dead End</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.454872821" lon="-71.125093997">
+ <name>5224</name>
+ <cmt>5224</cmt>
+ <desc>5224</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.459078860" lon="-71.124987882">
+ <name>5229</name>
+ <cmt>5229</cmt>
+ <desc>5229</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.456468903" lon="-71.124650761">
+ <name>5236BRIDGE</name>
+ <cmt>Bridge</cmt>
+ <desc>Bridge</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.456978858" lon="-71.124473820">
+ <name>5237</name>
+ <cmt>5237</cmt>
+ <desc>5237</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.459277930" lon="-71.124573816">
+ <name>5239ROAD</name>
+ <cmt>Road</cmt>
+ <desc>Road</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.453255868" lon="-71.121210828">
+ <name>5252PURPLE</name>
+ <cmt>Purple Rock Hill</cmt>
+ <desc>Purple Rock Hill</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.454400836" lon="-71.120989798">
+ <name>5254</name>
+ <cmt>5254</cmt>
+ <desc>5254</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.451441940" lon="-71.121745761">
+ <name>5258</name>
+ <cmt>5258</cmt>
+ <desc>5258</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.454403937" lon="-71.120659970">
+ <name>5264</name>
+ <cmt>5264</cmt>
+ <desc>5264</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.457760973" lon="-71.121044951">
+ <name>526708</name>
+ <cmt>526708</cmt>
+ <desc>526708</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.457088996" lon="-71.120312959">
+ <name>526750</name>
+ <cmt>526750</cmt>
+ <desc>526750</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.457387811" lon="-71.119844830">
+ <name>5267OBSTAC</name>
+ <cmt>Obstacle</cmt>
+ <desc>Obstacle</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.456591949" lon="-71.119675767">
+ <name>527614</name>
+ <cmt>527614</cmt>
+ <desc>527614</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.456251979" lon="-71.119355829">
+ <name>527631</name>
+ <cmt>527631</cmt>
+ <desc>527631</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.458147882" lon="-71.119134799">
+ <name>5278</name>
+ <cmt>5278</cmt>
+ <desc>5278</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.458781973" lon="-71.118990798">
+ <name>5278ROAD</name>
+ <cmt>Road</cmt>
+ <desc>Road</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.457733816" lon="-71.117480882">
+ <name>5287WATER</name>
+ <cmt>Reservoir</cmt>
+ <desc>Reservoir</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.459376752" lon="-71.117692944">
+ <name>5289</name>
+ <cmt>5289</cmt>
+ <desc>5289</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.459628964" lon="-71.116523920">
+ <name>5299DEAD</name>
+ <cmt>Dead End</cmt>
+ <desc>Dead End</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.464182936" lon="-71.119827814">
+ <name>5374FIRE</name>
+ <cmt>5374FIRE</cmt>
+ <desc>5374FIRE</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.465649853" lon="-71.119398829">
+ <name>5376</name>
+ <cmt>5376</cmt>
+ <desc>5376</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.465758985" lon="-71.119814822">
+ <name>5376BRIDGE</name>
+ <cmt>Bridge</cmt>
+ <desc>Bridge</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.465484897" lon="-71.119147791">
+ <name>5376DEAD</name>
+ <cmt>Dead End</cmt>
+ <desc>Dead End</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.465912877" lon="-71.119327918">
+ <name>5376STREAM</name>
+ <cmt>Stream Crossing</cmt>
+ <desc>Stream Crossing</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.439017948" lon="-71.114455853">
+ <name>6006</name>
+ <cmt>600698</cmt>
+ <desc>600698</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.438593823" lon="-71.114802780">
+ <name>6006BLUE</name>
+ <cmt>6006BLUE</cmt>
+ <desc>6006BLUE</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.436756846" lon="-71.113222959">
+ <name>6014MEADOW</name>
+ <cmt>6014MEADOW</cmt>
+ <desc>6014MEADOW</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.438665992" lon="-71.114078835">
+ <name>6016</name>
+ <cmt>Bike Loop Connector</cmt>
+ <desc>Bike Loop Connector</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.441753969" lon="-71.113219773">
+ <name>6029</name>
+ <cmt>6029</cmt>
+ <desc>6029</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.435471984" lon="-71.109663919">
+ <name>6042CROSS</name>
+ <cmt>Crossing</cmt>
+ <desc>Crossing</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.436242783" lon="-71.109074755">
+ <name>6053</name>
+ <cmt>6053</cmt>
+ <desc>6053</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.439249959" lon="-71.107499963">
+ <name>6066</name>
+ <cmt>6066</cmt>
+ <desc>6066</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.439763770" lon="-71.107581938">
+ <name>6067</name>
+ <cmt>6067</cmt>
+ <desc>6067</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.434765976" lon="-71.105873790">
+ <name>6071</name>
+ <cmt>6071</cmt>
+ <desc>6071</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.433303921" lon="-71.106598992">
+ <name>6073</name>
+ <cmt>6073</cmt>
+ <desc>6073</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.439501919" lon="-71.106555993">
+ <name>6077LOGS</name>
+ <cmt>Log Crossing</cmt>
+ <desc>Log Crossing</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.437337963" lon="-71.104771905">
+ <name>6084</name>
+ <cmt>6084</cmt>
+ <desc>6084</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.443108819" lon="-71.112674950">
+ <name>6121DEAD</name>
+ <cmt>Dead End</cmt>
+ <desc>Dead End</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.442195863" lon="-71.110974764">
+ <name>6130</name>
+ <cmt>6130</cmt>
+ <desc>6130</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.442980912" lon="-71.111440966">
+ <name>6131</name>
+ <cmt>6131</cmt>
+ <desc>6131</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.444772879" lon="-71.108881971">
+ <name>6153</name>
+ <cmt>6153</cmt>
+ <desc>6153</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.446792834" lon="-71.108783903">
+ <name>6155DEAD</name>
+ <cmt>Dead End</cmt>
+ <desc>Dead End</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.443591869" lon="-71.106300848">
+ <name>6171</name>
+ <cmt>6171</cmt>
+ <desc>6171</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.447803859" lon="-71.106623970">
+ <name>6176</name>
+ <cmt>6176</cmt>
+ <desc>6176</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.448447756" lon="-71.106157769">
+ <name>6177</name>
+ <cmt>6177</cmt>
+ <desc>6177</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.442992982" lon="-71.105877981">
+ <name>6181CROSS</name>
+ <cmt>Crossing</cmt>
+ <desc>Crossing</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.453414788" lon="-71.106782975">
+ <name>6272</name>
+ <cmt>6272</cmt>
+ <desc>6272</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.453433815" lon="-71.107252948">
+ <name>6272.1</name>
+ <cmt>6272</cmt>
+ <desc>6272</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.458297918" lon="-71.106770989">
+ <name>6278</name>
+ <cmt>6278</cmt>
+ <desc>6278</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.451429954" lon="-71.105412953">
+ <name>6280</name>
+ <cmt>6280</cmt>
+ <desc>6280</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.453844948" lon="-71.105205920">
+ <name>6283</name>
+ <cmt>6283</cmt>
+ <desc>6283</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.459985781" lon="-71.106169755">
+ <name>6289</name>
+ <cmt>6289</cmt>
+ <desc>6289</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.457615966" lon="-71.105115982">
+ <name>6297</name>
+ <cmt>6297</cmt>
+ <desc>6297</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.467109812" lon="-71.113573993">
+ <name>6328</name>
+ <cmt>6328</cmt>
+ <desc>6328</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.462775866" lon="-71.109985868">
+ <name>6353DEAD</name>
+ <cmt>Dead End</cmt>
+ <desc>Dead End</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.464201963" lon="-71.109862989">
+ <name>6354</name>
+ <cmt>6354</cmt>
+ <desc>6354</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.466458958" lon="-71.110066921">
+ <name>635722</name>
+ <cmt>635722</cmt>
+ <desc>635722</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.466556774" lon="-71.109409947">
+ <name>635783</name>
+ <cmt>635783</cmt>
+ <desc>635783</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.463494781" lon="-71.107116994">
+ <name>6373</name>
+ <cmt>6373</cmt>
+ <desc>6373</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.401050944" lon="-71.110240929">
+ <name>6634</name>
+ <cmt>6634</cmt>
+ <desc>6634</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.432620795" lon="-71.106531937">
+ <name>6979</name>
+ <cmt>6979</cmt>
+ <desc>6979</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.431032928" lon="-71.107882932">
+ <name>6997</name>
+ <cmt>6997</cmt>
+ <desc>6997</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.465686901" lon="-71.107359985">
+ <name>BEAR HILL</name>
+ <cmt>BEAR HILL TOWER</cmt>
+ <desc>BEAR HILL TOWER</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.430949947" lon="-71.107627871">
+ <name>BELLEVUE</name>
+ <cmt>BELLEVUE</cmt>
+ <desc>BELLEVUE</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.458515931" lon="-71.103645964">
+ <name>DARKHOLLPO</name>
+ <cmt>Dark Hollow Pond</cmt>
+ <desc>Dark Hollow Pond</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.451203978" lon="-71.126601985">
+ <name>GATE14</name>
+ <cmt>Gate 14</cmt>
+ <desc>Gate 14</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.458498916" lon="-71.122077769">
+ <name>GATE16</name>
+ <cmt>Gate 16</cmt>
+ <desc>Gate 16</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.459375830" lon="-71.119237980">
+ <name>GATE17</name>
+ <cmt>Gate 17</cmt>
+ <desc>Gate 17</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.466352927" lon="-71.119239992">
+ <name>GATE19</name>
+ <cmt>Gate 19</cmt>
+ <desc>Gate 19</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.468654849" lon="-71.107696854">
+ <name>GATE21</name>
+ <cmt>Gate 21</cmt>
+ <desc>Gate 21</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.456717929" lon="-71.102972981">
+ <name>GATE24</name>
+ <cmt>Gate 24</cmt>
+ <desc>Gate 24</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.430846766" lon="-71.107689897">
+ <name>GATE5</name>
+ <cmt>Gate 5</cmt>
+ <desc>Gate 5</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.431239961" lon="-71.109235939">
+ <name>GATE6</name>
+ <cmt>Gate 6</cmt>
+ <desc>Gate 6</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.434979966" lon="-71.109941863">
+ <name>PANTHRCAVE</name>
+ <cmt>Panther Cave</cmt>
+ <desc>Panther Cave</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.453414788" lon="-71.106781969">
+ <name>SHEEPFOLD</name>
+ <cmt>Sheepfold Parking Lot</cmt>
+ <desc>Sheepfold Parking Lot</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.455955762" lon="-71.107482864">
+ <name>SOAPBOX</name>
+ <cmt>Soap Box Derby Track</cmt>
+ <desc>Soap Box Derby Track</desc>
+ <sym>Waypoint</sym>
+</wpt>
+</gpx>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<gpx
+ version="1.0"
+creator="GPSBabel - http://www.gpsbabel.org"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xmlns="http://www.topografix.com/GPX/1/0"
+xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd">
+<time>1970-01-01T00:00:00Z</time>
+<bounds minlat="42.401050944" minlon="-71.126601985" maxlat="42.468654849" maxlon="-71.102972981"/>
+<wpt lat="42.439992931" lon="-71.120924922">
+ <name>5058ROAD</name>
+ <cmt>ROAD CROSSING</cmt>
+ <desc>ROAD CROSSING</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.438877970" lon="-71.119276956">
+ <name>5066</name>
+ <cmt>5066</cmt>
+ <desc>5066</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.439226909" lon="-71.119688759">
+ <name>5067</name>
+ <cmt>5067</cmt>
+ <desc>5067</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.438916946" lon="-71.116145980">
+ <name>5096</name>
+ <cmt>5096</cmt>
+ <desc>5096</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.443903927" lon="-71.122043990">
+ <name>5142</name>
+ <cmt>5142</cmt>
+ <desc>5142</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.445358858" lon="-71.122844797">
+ <name>5144SUMMIT</name>
+ <cmt>Summit</cmt>
+ <desc>Summit</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.449764973" lon="-71.122319922">
+ <name>5148NANEPA</name>
+ <cmt>Nanepashemet Road Crossing</cmt>
+ <desc>Nanepashemet Road Crossing</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.441726979" lon="-71.121675773">
+ <name>5150TANK</name>
+ <cmt>WATER TANK</cmt>
+ <desc>WATER TANK</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.447297927" lon="-71.121446947">
+ <name>5156</name>
+ <cmt>5156</cmt>
+ <desc>5156</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.449865891" lon="-71.119297827">
+ <name>5179DEAD</name>
+ <cmt>Dead End</cmt>
+ <desc>Dead End</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.454872821" lon="-71.125093997">
+ <name>5224</name>
+ <cmt>5224</cmt>
+ <desc>5224</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.459078860" lon="-71.124987882">
+ <name>5229</name>
+ <cmt>5229</cmt>
+ <desc>5229</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.456468903" lon="-71.124650678">
+ <name>5236BRIDGE</name>
+ <cmt>Bridge</cmt>
+ <desc>Bridge</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.456978858" lon="-71.124473820">
+ <name>5237</name>
+ <cmt>5237</cmt>
+ <desc>5237</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.459277930" lon="-71.124573816">
+ <name>5239ROAD</name>
+ <cmt>Road</cmt>
+ <desc>Road</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.453255868" lon="-71.121210745">
+ <name>5252PURPLE</name>
+ <cmt>Purple Rock Hill</cmt>
+ <desc>Purple Rock Hill</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.454400836" lon="-71.120989798">
+ <name>5254</name>
+ <cmt>5254</cmt>
+ <desc>5254</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.451441940" lon="-71.121745678">
+ <name>5258</name>
+ <cmt>5258</cmt>
+ <desc>5258</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.454403937" lon="-71.120659970">
+ <name>5264</name>
+ <cmt>5264</cmt>
+ <desc>5264</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.457760973" lon="-71.121044951">
+ <name>526708</name>
+ <cmt>526708</cmt>
+ <desc>526708</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.457088996" lon="-71.120312959">
+ <name>526750</name>
+ <cmt>526750</cmt>
+ <desc>526750</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.457387811" lon="-71.119844830">
+ <name>5267OBSTAC</name>
+ <cmt>Obstacle</cmt>
+ <desc>Obstacle</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.456591949" lon="-71.119675767">
+ <name>527614</name>
+ <cmt>527614</cmt>
+ <desc>527614</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.456251979" lon="-71.119355746">
+ <name>527631</name>
+ <cmt>527631</cmt>
+ <desc>527631</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.458147882" lon="-71.119134799">
+ <name>5278</name>
+ <cmt>5278</cmt>
+ <desc>5278</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.458781973" lon="-71.118990798">
+ <name>5278ROAD</name>
+ <cmt>Road</cmt>
+ <desc>Road</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.457733816" lon="-71.117480882">
+ <name>5287WATER</name>
+ <cmt>Reservoir</cmt>
+ <desc>Reservoir</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.459376669" lon="-71.117692944">
+ <name>5289</name>
+ <cmt>5289</cmt>
+ <desc>5289</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.459628964" lon="-71.116523920">
+ <name>5299DEAD</name>
+ <cmt>Dead End</cmt>
+ <desc>Dead End</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.464182936" lon="-71.119827731">
+ <name>5374FIRE</name>
+ <cmt>5374FIRE</cmt>
+ <desc>5374FIRE</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.465649853" lon="-71.119398829">
+ <name>5376</name>
+ <cmt>5376</cmt>
+ <desc>5376</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.465758985" lon="-71.119814739">
+ <name>5376BRIDGE</name>
+ <cmt>Bridge</cmt>
+ <desc>Bridge</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.465484897" lon="-71.119147791">
+ <name>5376DEAD</name>
+ <cmt>Dead End</cmt>
+ <desc>Dead End</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.465912877" lon="-71.119327918">
+ <name>5376STREAM</name>
+ <cmt>Stream Crossing</cmt>
+ <desc>Stream Crossing</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.439017948" lon="-71.114455853">
+ <name>6006</name>
+ <cmt>600698</cmt>
+ <desc>600698</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.438593740" lon="-71.114802780">
+ <name>6006BLUE</name>
+ <cmt>6006BLUE</cmt>
+ <desc>6006BLUE</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.436756846" lon="-71.113222959">
+ <name>6014MEADOW</name>
+ <cmt>6014MEADOW</cmt>
+ <desc>6014MEADOW</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.438665992" lon="-71.114078835">
+ <name>6016</name>
+ <cmt>Bike Loop Connector</cmt>
+ <desc>Bike Loop Connector</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.441753969" lon="-71.113219690">
+ <name>6029</name>
+ <cmt>6029</cmt>
+ <desc>6029</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.435471984" lon="-71.109663919">
+ <name>6042CROSS</name>
+ <cmt>Crossing</cmt>
+ <desc>Crossing</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.436242700" lon="-71.109074755">
+ <name>6053</name>
+ <cmt>6053</cmt>
+ <desc>6053</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.439249959" lon="-71.107499963">
+ <name>6066</name>
+ <cmt>6066</cmt>
+ <desc>6066</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.439763770" lon="-71.107581938">
+ <name>6067</name>
+ <cmt>6067</cmt>
+ <desc>6067</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.434765976" lon="-71.105873790">
+ <name>6071</name>
+ <cmt>6071</cmt>
+ <desc>6071</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.433303921" lon="-71.106598992">
+ <name>6073</name>
+ <cmt>6073</cmt>
+ <desc>6073</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.439501919" lon="-71.106555993">
+ <name>6077LOGS</name>
+ <cmt>Log Crossing</cmt>
+ <desc>Log Crossing</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.437337963" lon="-71.104771905">
+ <name>6084</name>
+ <cmt>6084</cmt>
+ <desc>6084</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.443108736" lon="-71.112674950">
+ <name>6121DEAD</name>
+ <cmt>Dead End</cmt>
+ <desc>Dead End</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.442195863" lon="-71.110974681">
+ <name>6130</name>
+ <cmt>6130</cmt>
+ <desc>6130</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.442980912" lon="-71.111440966">
+ <name>6131</name>
+ <cmt>6131</cmt>
+ <desc>6131</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.444772879" lon="-71.108881971">
+ <name>6153</name>
+ <cmt>6153</cmt>
+ <desc>6153</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.446792834" lon="-71.108783903">
+ <name>6155DEAD</name>
+ <cmt>Dead End</cmt>
+ <desc>Dead End</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.443591869" lon="-71.106300848">
+ <name>6171</name>
+ <cmt>6171</cmt>
+ <desc>6171</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.447803859" lon="-71.106623970">
+ <name>6176</name>
+ <cmt>6176</cmt>
+ <desc>6176</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.448447673" lon="-71.106157769">
+ <name>6177</name>
+ <cmt>6177</cmt>
+ <desc>6177</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.442992982" lon="-71.105877981">
+ <name>6181CROSS</name>
+ <cmt>Crossing</cmt>
+ <desc>Crossing</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.453414705" lon="-71.106782975">
+ <name>6272</name>
+ <cmt>6272</cmt>
+ <desc>6272</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.453433732" lon="-71.107252948">
+ <name>6272.1</name>
+ <cmt>6272</cmt>
+ <desc>6272</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.458297918" lon="-71.106770989">
+ <name>6278</name>
+ <cmt>6278</cmt>
+ <desc>6278</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.451429954" lon="-71.105412953">
+ <name>6280</name>
+ <cmt>6280</cmt>
+ <desc>6280</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.453844948" lon="-71.105205920">
+ <name>6283</name>
+ <cmt>6283</cmt>
+ <desc>6283</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.459985698" lon="-71.106169755">
+ <name>6289</name>
+ <cmt>6289</cmt>
+ <desc>6289</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.457615966" lon="-71.105115982">
+ <name>6297</name>
+ <cmt>6297</cmt>
+ <desc>6297</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.467109729" lon="-71.113573993">
+ <name>6328</name>
+ <cmt>6328</cmt>
+ <desc>6328</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.462775866" lon="-71.109985868">
+ <name>6353DEAD</name>
+ <cmt>Dead End</cmt>
+ <desc>Dead End</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.464201963" lon="-71.109862989">
+ <name>6354</name>
+ <cmt>6354</cmt>
+ <desc>6354</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.466458958" lon="-71.110066921">
+ <name>635722</name>
+ <cmt>635722</cmt>
+ <desc>635722</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.466556691" lon="-71.109409947">
+ <name>635783</name>
+ <cmt>635783</cmt>
+ <desc>635783</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.463494698" lon="-71.107116994">
+ <name>6373</name>
+ <cmt>6373</cmt>
+ <desc>6373</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.401050944" lon="-71.110240929">
+ <name>6634</name>
+ <cmt>6634</cmt>
+ <desc>6634</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.432620712" lon="-71.106531937">
+ <name>6979</name>
+ <cmt>6979</cmt>
+ <desc>6979</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.431032928" lon="-71.107882932">
+ <name>6997</name>
+ <cmt>6997</cmt>
+ <desc>6997</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.465686901" lon="-71.107359985">
+ <name>BEAR HILL</name>
+ <cmt>BEAR HILL TOWER</cmt>
+ <desc>BEAR HILL TOWER</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.430949947" lon="-71.107627871">
+ <name>BELLEVUE</name>
+ <cmt>BELLEVUE</cmt>
+ <desc>BELLEVUE</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.458515931" lon="-71.103645964">
+ <name>DARKHOLLPO</name>
+ <cmt>Dark Hollow Pond</cmt>
+ <desc>Dark Hollow Pond</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.451203978" lon="-71.126601985">
+ <name>GATE14</name>
+ <cmt>Gate 14</cmt>
+ <desc>Gate 14</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.458498916" lon="-71.122077769">
+ <name>GATE16</name>
+ <cmt>Gate 16</cmt>
+ <desc>Gate 16</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.459375747" lon="-71.119237980">
+ <name>GATE17</name>
+ <cmt>Gate 17</cmt>
+ <desc>Gate 17</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.466352927" lon="-71.119239992">
+ <name>GATE19</name>
+ <cmt>Gate 19</cmt>
+ <desc>Gate 19</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.468654849" lon="-71.107696854">
+ <name>GATE21</name>
+ <cmt>Gate 21</cmt>
+ <desc>Gate 21</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.456717929" lon="-71.102972981">
+ <name>GATE24</name>
+ <cmt>Gate 24</cmt>
+ <desc>Gate 24</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.430846766" lon="-71.107689897">
+ <name>GATE5</name>
+ <cmt>Gate 5</cmt>
+ <desc>Gate 5</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.431239961" lon="-71.109235939">
+ <name>GATE6</name>
+ <cmt>Gate 6</cmt>
+ <desc>Gate 6</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.434979966" lon="-71.109941863">
+ <name>PANTHRCAVE</name>
+ <cmt>Panther Cave</cmt>
+ <desc>Panther Cave</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.453414705" lon="-71.106781969">
+ <name>SHEEPFOLD</name>
+ <cmt>Sheepfold Parking Lot</cmt>
+ <desc>Sheepfold Parking Lot</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.455955679" lon="-71.107482864">
+ <name>SOAPBOX</name>
+ <cmt>Soap Box Derby Track</cmt>
+ <desc>Soap Box Derby Track</desc>
+ <sym>Waypoint</sym>
+</wpt>
+</gpx>
--- /dev/null
+No,Latitude,Longitude,Name,Altitude,Description,Symbol,Date,Time,URL,Facility,City,Country\r
+1,50.492603,12.105431,"001",,"001","Waypoint",2006/03/28,00:10:37,,,,\r
+2,50.492603,12.105431,"002",,"002","Waypoint",2006/03/28,00:10:37,,,,\r
+3,50.494277,12.105130,"003",,"003","Waypoint",2006/03/28,00:10:37,,,,\r
+4,50.493834,12.106101,"004",,"004","Waypoint",2006/03/28,00:10:37,,,,\r
+5,50.493834,12.106101,"005",,"005","Waypoint",2006/03/28,00:10:37,,,,\r
+6,50.493376,12.107105,"006",,"006","Waypoint",2006/03/28,00:10:37,,,,\r
+7,50.493660,12.107152,"007",,"007","Waypoint",2006/03/28,00:10:37,,,,\r
+8,51.893799,12.977943,"ED_X",,"Dummy airport (Germany)","Airport",2006/03/28,01:38:07,,"FAC1","CITY1","Germany"\r
+9,38.631995,-3.174055,"GC_X",,"Dummy airport (Spain)","Airport",2006/03/28,01:42:01,,"FAC2","CITY2","Canary Island"\r
+10,50.493667,12.107150,"Jahnstrasse",,"Jahnstrasse 11","Flag, Red",2006/03/31,21:48:22,,,,\r
+11,46.387606,3.498277,"LF_X",,"Dummy airport (France)","Airport",2006/03/28,01:40:32,,"FAC3","CITY3","France"\r
+12,50.493834,12.106100,"Liebknechtstrasse",,"Liebknechtstrasse 90","Waypoint",2006/03/31,21:49:30,,,,\r
+13,43.314550,12.161554,"LI_X",,"Dummy airport (Italy)","Heliport",2006/03/28,01:43:25,,"FAC4","CITY4","Italy"\r
+14,50.492616,12.105448,"NARVA",391.0,"Start","Flag, Green",2006/03/31,21:49:26,"http://www.narva-light.de",,,\r
--- /dev/null
+No,Latitude,Longitude,Name,Description,Symbol,Address,City,PostalCode,State,Country,Phone\r
+1,50.877341,12.433889,"3","! constructed waypoint !","Waypoint","Hauptstrasse -1",,,,,"03741-999999"\r
+2,50.964955,12.435919,"Altenburg-Umgehung","! constructed waypoint !","Waypoint",,"Plauen",,,,"03741-999999"\r
+3,50.610795,12.173802,"Elsterberg","! constructed waypoint !","Waypoint",,,,"Sachsen",,"03741-999999"\r
+4,50.844126,12.408757,"Gosel","! constructed waypoint !","Waypoint",,,,,"Deutschland","03741-999999"\r
+5,50.654763,12.204957,"Greiz","! constructed waypoint !","Waypoint",,,"08523",,,"03741-999999"\r
+6,51.314521,12.409143,"HMMMM","No comment","Waypoint","Hauptstrasse -2","Plauen","08523","Sachsen","Deutschland","03741-999999"\r
+7,50.493663,12.107153,"Jahnstrasse","! constructed waypoint !","Waypoint",,,"08523",,"Deutschland","03741-999999"\r
+8,50.493837,12.106101,"Liebknechtstrasse","! constructed waypoint !","Waypoint",,,"08523",,"Deutschland","03741-999999"\r
+9,50.492619,12.105449,"NARVA","Start","Waypoint",,,"08523",,"Deutschland","03741-999999"\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<gpx
+ version="1.1"
+creator="GPSBabel - http://www.gpsbabel.org"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xmlns="http://www.topografix.com/GPX/1/1"
+xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">
+<metadata>
+<time>1970-01-01T00:00:00Z</time>
+<bounds minlat="21.278604576" minlon="-157.810719665" maxlat="21.278604576" maxlon="-157.810719665"/>
+</metadata>
+<wpt lat="21.278604576" lon="-157.810719665">
+<time>2007-03-10T22:41:34Z</time>
+ <name>001</name>
+ <cmt>3348 Martha St</cmt>
+ <desc>3348 Martha St</desc>
+ <link href="www.one.com">
+ <text>one</text>
+ </link>
+ <link href="www.two.com">
+ <text>two dots</text>
+ </link>
+ <link href="www.twoandahalf.com">
+ </link>
+ <link href="www.three.com">
+ <text>three dots</text>
+ </link>
+ <sym>Waypoint</sym>
+ <extensions>
+ <gpxx:WaypointExtension xmlns:gpxx="http://www.garmin.com/xmlschemas/GpxExtensions/v3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.garmin.com/xmlschemas/GpxExtensions/v3 http://www.garmin.com/xmlschemas/GpxExtensions/v3/GpxExtensionsv3.xsd">
+ <gpxx:DisplayMode>SymbolAndDescription</gpxx:DisplayMode>
+ </gpxx:WaypointExtension>
+ </extensions>
+</wpt>
+</gpx>
ROUTENAME=DE_Plauen-Leipzig
DESCRIPTIONLINES=1
DESCRIPTION1=
-STATION1=Standort,999999999
-STATION2=Standort,999999999
+STATION1=Town,999999999
+STATION2=AdrMon VORTE,999999999
STATION3=Standort,999999999
STATION4=Standort,999999999
STATION5=Standort,999999999
STATION6=Standort,999999999
STATION7=Standort,999999999
STATION8=Standort,999999999
-STATION9=Standort,999999999
+STATION9=Town,999999999
[COORDINATES]
STATION1=1346067,6524736
STATION2=1346265,6524980
<time>1970-01-01T00:00:00Z</time>
<bounds minlat="50.492706401" minlon="12.105471361" maxlat="51.314684001" maxlon="12.492485421"/>
<wpt lat="50.492706401" lon="12.105471361">
- <name>STATION1</name>
- <cmt>bei D 08527,Neundorf,,0,</cmt>
- <desc>bei D 08527,Neundorf,,0,</desc>
- <sym>Waypoint</sym>
+ <name>Neundorf</name>
+ <cmt>Orte</cmt>
+ <desc>bei D 08527</desc>
+ <sym>City (Small)</sym>
</wpt>
<wpt lat="50.494102371" lon="12.107252018">
- <name>STATION2</name>
- <cmt>bei D 08523,Plauen/Possig,,0,</cmt>
- <desc>bei D 08523,Plauen/Possig,,0,</desc>
- <sym>Waypoint</sym>
+ <name>Plauen/Possig</name>
+ <cmt>Ortsinformationen</cmt>
+ <desc>bei D 08523</desc>
+ <sym>Information</sym>
</wpt>
<wpt lat="50.497986840" lon="12.105885049">
- <name>STATION3</name>
- <cmt>bei D 08523,Plauen/Westend,,0,</cmt>
- <desc>bei D 08523,Plauen/Westend,,0,</desc>
+ <name>Plauen/Westend</name>
+ <cmt>Standort</cmt>
+ <desc>bei D 08523</desc>
<sym>Waypoint</sym>
</wpt>
<wpt lat="50.688914683" lon="12.327792655">
- <name>STATION4</name>
- <cmt>bei D 08427,Fraureuth/Beiersdorf,,0,</cmt>
- <desc>bei D 08427,Fraureuth/Beiersdorf,,0,</desc>
+ <name>Fraureuth/Beiersdorf</name>
+ <cmt>Standort</cmt>
+ <desc>bei D 08427</desc>
<sym>Waypoint</sym>
</wpt>
<wpt lat="50.864403822" lon="12.429074255">
- <name>STATION5</name>
- <cmt>bei D 04639,Ponitz/Merlach,,0,</cmt>
- <desc>bei D 04639,Ponitz/Merlach,,0,</desc>
+ <name>Ponitz/Merlach</name>
+ <cmt>Standort</cmt>
+ <desc>bei D 04639</desc>
<sym>Waypoint</sym>
</wpt>
<wpt lat="50.971321599" lon="12.452645474">
- <name>STATION6</name>
- <cmt>bei D 04600,Altenburg/Paditz,,0,</cmt>
- <desc>bei D 04600,Altenburg/Paditz,,0,</desc>
+ <name>Altenburg/Paditz</name>
+ <cmt>Standort</cmt>
+ <desc>bei D 04600</desc>
<sym>Waypoint</sym>
</wpt>
<wpt lat="51.171165953" lon="12.492485421">
- <name>STATION7</name>
- <cmt>bei D 04552,Borna/Gestewitz,,0,</cmt>
- <desc>bei D 04552,Borna/Gestewitz,,0,</desc>
+ <name>Borna/Gestewitz</name>
+ <cmt>Standort</cmt>
+ <desc>bei D 04552</desc>
<sym>Waypoint</sym>
</wpt>
<wpt lat="51.238200898" lon="12.388856592">
- <name>STATION8</name>
- <cmt>bei D 04564,Boehlen/Grossdeuben,,0,</cmt>
- <desc>bei D 04564,Boehlen/Grossdeuben,,0,</desc>
+ <name>Boehlen/Grossdeuben</name>
+ <cmt>Standort</cmt>
+ <desc>bei D 04564</desc>
<sym>Waypoint</sym>
</wpt>
<wpt lat="51.314684001" lon="12.409118308">
- <name>STATION9</name>
- <cmt>bei D 04317,Leipzig/Thonberg,,0,</cmt>
- <desc>bei D 04317,Leipzig/Thonberg,,0,</desc>
- <sym>Waypoint</sym>
+ <name>Leipzig/Thonberg</name>
+ <cmt>Orte</cmt>
+ <desc>bei D 04317</desc>
+ <sym>City (Small)</sym>
</wpt>
<rte>
<name>DE_Plauen-Leipzig</name>
<rtept lat="50.492706401" lon="12.105471361">
- <name>STATION1</name>
- <cmt>bei D 08527,Neundorf,,0,</cmt>
- <desc>bei D 08527,Neundorf,,0,</desc>
- <sym>Waypoint</sym>
+ <name>Neundorf</name>
+ <cmt>Orte</cmt>
+ <desc>bei D 08527</desc>
+ <sym>City (Small)</sym>
</rtept>
<rtept lat="50.494102371" lon="12.107252018">
- <name>STATION2</name>
- <cmt>bei D 08523,Plauen/Possig,,0,</cmt>
- <desc>bei D 08523,Plauen/Possig,,0,</desc>
- <sym>Waypoint</sym>
+ <name>Plauen/Possig</name>
+ <cmt>Ortsinformationen</cmt>
+ <desc>bei D 08523</desc>
+ <sym>Information</sym>
</rtept>
<rtept lat="50.497986840" lon="12.105885049">
- <name>STATION3</name>
- <cmt>bei D 08523,Plauen/Westend,,0,</cmt>
- <desc>bei D 08523,Plauen/Westend,,0,</desc>
+ <name>Plauen/Westend</name>
+ <cmt>Standort</cmt>
+ <desc>bei D 08523</desc>
<sym>Waypoint</sym>
</rtept>
<rtept lat="50.688914683" lon="12.327792655">
- <name>STATION4</name>
- <cmt>bei D 08427,Fraureuth/Beiersdorf,,0,</cmt>
- <desc>bei D 08427,Fraureuth/Beiersdorf,,0,</desc>
+ <name>Fraureuth/Beiersdorf</name>
+ <cmt>Standort</cmt>
+ <desc>bei D 08427</desc>
<sym>Waypoint</sym>
</rtept>
<rtept lat="50.864403822" lon="12.429074255">
- <name>STATION5</name>
- <cmt>bei D 04639,Ponitz/Merlach,,0,</cmt>
- <desc>bei D 04639,Ponitz/Merlach,,0,</desc>
+ <name>Ponitz/Merlach</name>
+ <cmt>Standort</cmt>
+ <desc>bei D 04639</desc>
<sym>Waypoint</sym>
</rtept>
<rtept lat="50.971321599" lon="12.452645474">
- <name>STATION6</name>
- <cmt>bei D 04600,Altenburg/Paditz,,0,</cmt>
- <desc>bei D 04600,Altenburg/Paditz,,0,</desc>
+ <name>Altenburg/Paditz</name>
+ <cmt>Standort</cmt>
+ <desc>bei D 04600</desc>
<sym>Waypoint</sym>
</rtept>
<rtept lat="51.171165953" lon="12.492485421">
- <name>STATION7</name>
- <cmt>bei D 04552,Borna/Gestewitz,,0,</cmt>
- <desc>bei D 04552,Borna/Gestewitz,,0,</desc>
+ <name>Borna/Gestewitz</name>
+ <cmt>Standort</cmt>
+ <desc>bei D 04552</desc>
<sym>Waypoint</sym>
</rtept>
<rtept lat="51.238200898" lon="12.388856592">
- <name>STATION8</name>
- <cmt>bei D 04564,Boehlen/Grossdeuben,,0,</cmt>
- <desc>bei D 04564,Boehlen/Grossdeuben,,0,</desc>
+ <name>Boehlen/Grossdeuben</name>
+ <cmt>Standort</cmt>
+ <desc>bei D 04564</desc>
<sym>Waypoint</sym>
</rtept>
<rtept lat="51.314684001" lon="12.409118308">
- <name>STATION9</name>
- <cmt>bei D 04317,Leipzig/Thonberg,,0,</cmt>
- <desc>bei D 04317,Leipzig/Thonberg,,0,</desc>
- <sym>Waypoint</sym>
+ <name>Leipzig/Thonberg</name>
+ <cmt>Orte</cmt>
+ <desc>bei D 04317</desc>
+ <sym>City (Small)</sym>
</rtept>
</rte>
</gpx>
[CLIENT]\r
REQUEST=TRUE\r
ROUTENAME=DE_Plauen-Leipzig\r
-DESCRIPTIONLINES=1\r
-DESCRIPTION1=\r
-STATION1=Standort,999999999\r
-STATION2=Standort,999999999\r
+DESCRIPTIONLINES=0\r
+STATION1=Town,999999999\r
+STATION2=AdrMon VORTE,999999999\r
STATION3=Standort,999999999\r
STATION4=Standort,999999999\r
STATION5=Standort,999999999\r
STATION6=Standort,999999999\r
STATION7=Standort,999999999\r
STATION8=Standort,999999999\r
-STATION9=Standort,999999999\r
+STATION9=Town,999999999\r
[COORDINATES]\r
STATION1=1346067,6524736\r
STATION2=1346265,6524980\r
STATION8=1377578,6656081\r
STATION9=1379831,6669676\r
[DESCRIPTION]\r
-STATION1=bei D 08527,Neundorf,,0,\r
-STATION2=bei D 08523,Plauen/Possig,,0,\r
-STATION3=bei D 08523,Plauen/Westend,,0,\r
-STATION4=bei D 08427,Fraureuth/Beiersdorf,,0,\r
-STATION5=bei D 04639,Ponitz/Merlach,,0,\r
-STATION6=bei D 04600,Altenburg/Paditz,,0,\r
-STATION7=bei D 04552,Borna/Gestewitz,,0,\r
-STATION8=bei D 04564,Boehlen/Grossdeuben,,0,\r
-STATION9=bei D 04317,Leipzig/Thonberg,,0,\r
+STATION1=bei D 08527,Neundorf,@,0\r
+STATION2=bei D 08523,Plauen/Possig,@,0\r
+STATION3=bei D 08523,Plauen/Westend,@,0\r
+STATION4=bei D 08427,Fraureuth/Beiersdorf,@,0\r
+STATION5=bei D 04639,Ponitz/Merlach,@,0\r
+STATION6=bei D 04600,Altenburg/Paditz,@,0\r
+STATION7=bei D 04552,Borna/Gestewitz,@,0\r
+STATION8=bei D 04564,Boehlen/Grossdeuben,@,0\r
+STATION9=bei D 04317,Leipzig/Thonberg,@,0\r
[ROUTE]\r
ROUTERECT=1346067,6669676,1389101,6524736\r
xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd">
<time>1970-01-01T00:00:00Z</time>
<bounds minlat="50.268830000" minlon="11.640990000" maxlat="50.756540000" maxlon="12.696920000"/>
-<wpt lat="50.362350000" lon="11.903730000">
- <name>in Zedtwitz halb rechts halten auf B2 Hofer Strasse</name>
- <cmt>B2 Hofer Strasse</cmt>
- <desc>B2 Hofer Strasse</desc>
+<wpt lat="50.326840000" lon="11.912930000">
+ <name>B2 Schleizer Strasse</name>
+ <cmt>bei D 95030 Hof/Innenstadt</cmt>
+ <desc>bei D 95030 Hof/Innenstadt</desc>
</wpt>
<wpt lat="50.393720000" lon="11.867560000">
- <name>bei D 95183 Töpen </name>
- <cmt>B2\Hofer Strasse</cmt>
- <desc>B2\Hofer Strasse</desc>
+ <name>B2\Hofer Strasse</name>
+ <cmt>bei D 95183 Töpen</cmt>
+ <desc>bei D 95183 Töpen</desc>
</wpt>
<wpt lat="50.457560000" lon="11.642810000">
- <name>bei D 07356 Lobenstein </name>
- <cmt>L1095\Strasse der Jugend</cmt>
- <desc>L1095\Strasse der Jugend</desc>
+ <name>L1095\Strasse der Jugend</name>
+ <cmt>bei D 07356 Lobenstein</cmt>
+ <desc>bei D 07356 Lobenstein</desc>
</wpt>
<wpt lat="50.507190000" lon="11.733460000">
- <name>bei D 07929 Saalburg-Ebersdorf/Saalburg </name>
- <cmt>L1095</cmt>
- <desc>L1095</desc>
+ <name>L1095</name>
+ <cmt>bei D 07929 Saalburg-Ebersdorf/Saalburg</cmt>
+ <desc>bei D 07929 Saalburg-Ebersdorf/Saalburg</desc>
</wpt>
<wpt lat="50.524670000" lon="11.714020000">
- <name>bei D07907 Burgk/Burgkhammer </name>
- <cmt>K550</cmt>
- <desc>K550</desc>
+ <name>K550</name>
+ <cmt>bei D07907 Burgk/Burgkhammer</cmt>
+ <desc>bei D07907 Burgk/Burgkhammer</desc>
</wpt>
<wpt lat="50.551440000" lon="11.719450000">
- <name>bei D 07907 Burgk/Burgkhammer </name>
- <cmt>Burgkhammer</cmt>
- <desc>Burgkhammer</desc>
+ <name>Burgkhammer</name>
+ <cmt>bei D 07907 Burgk/Burgkhammer</cmt>
+ <desc>bei D 07907 Burgk/Burgkhammer</desc>
</wpt>
<wpt lat="50.556270000" lon="11.719810000">
- <name>bei D 07907 Burgk </name>
- <cmt>L2357</cmt>
- <desc>L2357</desc>
+ <name>L2357</name>
+ <cmt>bei D 07907 Burgk</cmt>
+ <desc>bei D 07907 Burgk</desc>
</wpt>
<wpt lat="50.558740000" lon="11.736880000">
- <name>bei D 07907 Schleiz/Möschlitz </name>
- <cmt>L2357</cmt>
- <desc>L2357</desc>
+ <name>L2357</name>
+ <cmt>bei D 07907 Schleiz/Möschlitz</cmt>
+ <desc>bei D 07907 Schleiz/Möschlitz</desc>
</wpt>
<wpt lat="50.608090000" lon="11.653350000">
- <name>bei D 07924 Ziegenrück </name>
- <cmt>L2350\Plothental</cmt>
- <desc>L2350\Plothental</desc>
+ <name>L2350\Plothental</name>
+ <cmt>bei D 07924 Ziegenrück</cmt>
+ <desc>bei D 07924 Ziegenrück</desc>
</wpt>
<wpt lat="50.650840000" lon="11.722880000">
- <name>bei D 07389 Knau </name>
- <cmt>L2349\Hauptstrasse</cmt>
- <desc>L2349\Hauptstrasse</desc>
+ <name>L2349\Hauptstrasse</name>
+ <cmt>bei D 07389 Knau</cmt>
+ <desc>bei D 07389 Knau</desc>
</wpt>
<wpt lat="50.638840000" lon="11.773210000">
- <name>bei D 07907 Plothen </name>
- <cmt>L2349\Ortsstrasse</cmt>
- <desc>L2349\Ortsstrasse</desc>
+ <name>L2349\Ortsstrasse</name>
+ <cmt>bei D 07907 Plothen</cmt>
+ <desc>bei D 07907 Plothen</desc>
</wpt>
<wpt lat="50.568210000" lon="11.907330000">
- <name>bei D 07907 Schleiz/Langenbuch </name>
- <cmt>K304\Lössauer Strasse</cmt>
- <desc>K304\Lössauer Strasse</desc>
+ <name>K304\Lössauer Strasse</name>
+ <cmt>bei D 07907 Schleiz/Langenbuch</cmt>
+ <desc>bei D 07907 Schleiz/Langenbuch</desc>
</wpt>
<wpt lat="50.575210000" lon="11.991270000">
- <name>bei D 07952 Pausa/Oberreichenau </name>
- <cmt>S316\Am Mühlgraben</cmt>
- <desc>S316\Am Mühlgraben</desc>
+ <name>S316\Am Mühlgraben</name>
+ <cmt>bei D 07952 Pausa/Oberreichenau</cmt>
+ <desc>bei D 07952 Pausa/Oberreichenau</desc>
</wpt>
<wpt lat="50.541330000" lon="12.081960000">
- <name>bei D 08548 Syrau </name>
- <cmt>B282/E49\Hauptstrasse</cmt>
- <desc>B282/E49\Hauptstrasse</desc>
+ <name>B282/E49\Hauptstrasse</name>
+ <cmt>bei D 08548 Syrau</cmt>
+ <desc>bei D 08548 Syrau</desc>
</wpt>
<wpt lat="50.504660000" lon="12.142140000">
- <name>bei D 08525 Plauen/Preißelpöhl </name>
- <cmt>Martin-Luther-Strasse</cmt>
- <desc>Martin-Luther-Strasse</desc>
+ <name>Martin-Luther-Strasse</name>
+ <cmt>bei D 08525 Plauen/Preißelpöhl</cmt>
+ <desc>bei D 08525 Plauen/Preißelpöhl</desc>
</wpt>
<wpt lat="50.506320000" lon="12.227040000">
- <name>bei D 08541 Neuensalz </name>
- <cmt>B173\Hauptstrasse</cmt>
- <desc>B173\Hauptstrasse</desc>
+ <name>B173\Hauptstrasse</name>
+ <cmt>bei D 08541 Neuensalz</cmt>
+ <desc>bei D 08541 Neuensalz</desc>
</wpt>
<wpt lat="50.546070000" lon="12.218730000">
- <name>bei D 08543 Pöhl/Helmsgrün </name>
- <cmt>K7880\Helmsgrün-Dorfstrasse</cmt>
- <desc>K7880\Helmsgrün-Dorfstrasse</desc>
+ <name>K7880\Helmsgrün-Dorfstrasse</name>
+ <cmt>bei D 08543 Pöhl/Helmsgrün</cmt>
+ <desc>bei D 08543 Pöhl/Helmsgrün</desc>
</wpt>
<wpt lat="50.566740000" lon="12.226250000">
- <name>bei D 08543 Herlasgrün </name>
- <cmt>K7811\Herlasgrün-Dorfstrasse</cmt>
- <desc>K7811\Herlasgrün-Dorfstrasse</desc>
+ <name>K7811\Herlasgrün-Dorfstrasse</name>
+ <cmt>bei D 08543 Herlasgrün</cmt>
+ <desc>bei D 08543 Herlasgrün</desc>
</wpt>
<wpt lat="50.624630000" lon="12.202870000">
- <name>bei D 07985 Elsterberg/Reuth </name>
- <cmt>S296\Netzschkauer Strasse</cmt>
- <desc>S296\Netzschkauer Strasse</desc>
+ <name>S296\Netzschkauer Strasse</name>
+ <cmt>bei D 07985 Elsterberg/Reuth</cmt>
+ <desc>bei D 07985 Elsterberg/Reuth</desc>
</wpt>
<wpt lat="50.610360000" lon="12.242670000">
- <name>bei D 08491 Netzschkau </name>
- <cmt>S296\Elsterberger Strasse</cmt>
- <desc>S296\Elsterberger Strasse</desc>
+ <name>S296\Elsterberger Strasse</name>
+ <cmt>bei D 08491 Netzschkau</cmt>
+ <desc>bei D 08491 Netzschkau</desc>
</wpt>
<wpt lat="50.621930000" lon="12.257800000">
- <name>bei D 08499 Mylau/Obermylau </name>
- <cmt>B173\Netzschkauer Strasse</cmt>
- <desc>B173\Netzschkauer Strasse</desc>
+ <name>B173\Netzschkauer Strasse</name>
+ <cmt>bei D 08499 Mylau/Obermylau</cmt>
+ <desc>bei D 08499 Mylau/Obermylau</desc>
</wpt>
<wpt lat="50.620960000" lon="12.264180000">
- <name>bei D 08499 Mylau/Obermylau </name>
- <cmt>B173\Robert-Georgi-Weg</cmt>
- <desc>B173\Robert-Georgi-Weg</desc>
+ <name>B173\Robert-Georgi-Weg</name>
+ <cmt>bei D 08499 Mylau/Obermylau</cmt>
+ <desc>bei D 08499 Mylau/Obermylau</desc>
</wpt>
<wpt lat="50.627970000" lon="12.301540000">
- <name>bei D 08468 Reichenbach </name>
- <cmt>B173\Friedensstrasse</cmt>
- <desc>B173\Friedensstrasse</desc>
+ <name>B173\Friedensstrasse</name>
+ <cmt>bei D 08468 Reichenbach</cmt>
+ <desc>bei D 08468 Reichenbach</desc>
</wpt>
<wpt lat="50.652850000" lon="12.364860000">
- <name>bei D 08496 Neumark/Unterneumark </name>
- <cmt>B173</cmt>
- <desc>B173</desc>
+ <name>B173</name>
+ <cmt>bei D 08496 Neumark/Unterneumark</cmt>
+ <desc>bei D 08496 Neumark/Unterneumark</desc>
</wpt>
<wpt lat="50.676090000" lon="12.405090000">
- <name>D 08115 Schönfels </name>
- <cmt>K9351\Zwickauer Strasse</cmt>
- <desc>K9351\Zwickauer Strasse</desc>
+ <name>K9351\Zwickauer Strasse</name>
+ <cmt>D 08115 Schönfels</cmt>
+ <desc>D 08115 Schönfels</desc>
</wpt>
<wpt lat="50.713570000" lon="12.479620000">
- <name>bei D 08056 Zwickau/Bahnhofsvorstadt </name>
- <cmt>B173\Reichenbacher Strasse</cmt>
- <desc>B173\Reichenbacher Strasse</desc>
+ <name>B173\Reichenbacher Strasse</name>
+ <cmt>bei D 08056 Zwickau/Bahnhofsvorstadt</cmt>
+ <desc>bei D 08056 Zwickau/Bahnhofsvorstadt</desc>
</wpt>
<wpt lat="50.756270000" lon="12.630730000">
- <name>bei D 09350 Lichtenstein </name>
- <cmt>S255\Innere Zwickauer Strasse</cmt>
- <desc>S255\Innere Zwickauer Strasse</desc>
+ <name>S255\Innere Zwickauer Strasse</name>
+ <cmt>bei D 09350 Lichtenstein</cmt>
+ <desc>bei D 09350 Lichtenstein</desc>
</wpt>
<wpt lat="50.661500000" lon="12.671250000">
- <name>bei D 08118 Hartenstein </name>
- <cmt>S284\Bahnhofstrasse</cmt>
- <desc>S284\Bahnhofstrasse</desc>
+ <name>S284\Bahnhofstrasse</name>
+ <cmt>bei D 08118 Hartenstein</cmt>
+ <desc>bei D 08118 Hartenstein</desc>
</wpt>
<wpt lat="50.528900000" lon="12.401610000">
- <name>bei D 08228 Rodewisch </name>
- <cmt>B169\Lindenstrasse</cmt>
- <desc>B169\Lindenstrasse</desc>
+ <name>B169\Lindenstrasse</name>
+ <cmt>bei D 08228 Rodewisch</cmt>
+ <desc>bei D 08228 Rodewisch</desc>
</wpt>
<wpt lat="50.508270000" lon="12.397900000">
- <name>bei D 08209 Auerbach </name>
- <cmt>B169\Göltzschtalstrasse</cmt>
- <desc>B169\Göltzschtalstrasse</desc>
+ <name>B169\Göltzschtalstrasse</name>
+ <cmt>bei D 08209 Auerbach</cmt>
+ <desc>bei D 08209 Auerbach</desc>
</wpt>
<wpt lat="50.479200000" lon="12.424870000">
- <name>bei D 08209 Auerbach/Beerheide </name>
- <cmt>K7833\Rempesgrüner Strasse</cmt>
- <desc>K7833\Rempesgrüner Strasse</desc>
+ <name>K7833\Rempesgrüner Strasse</name>
+ <cmt>bei D 08209 Auerbach/Beerheide</cmt>
+ <desc>bei D 08209 Auerbach/Beerheide</desc>
</wpt>
<wpt lat="50.503030000" lon="12.533360000">
- <name>D 08304 Schönheide </name>
- <cmt>S278\Hauptstrasse</cmt>
- <desc>S278\Hauptstrasse</desc>
+ <name>S278\Hauptstrasse</name>
+ <cmt>D 08304 Schönheide</cmt>
+ <desc>D 08304 Schönheide</desc>
</wpt>
<wpt lat="50.458250000" lon="12.488440000">
- <name>bei D 08262 Tannenbergsthal/Jägersgrün </name>
- <cmt>B283\Schönheider Strasse</cmt>
- <desc>B283\Schönheider Strasse</desc>
+ <name>B283\Schönheider Strasse</name>
+ <cmt>bei D 08262 Tannenbergsthal/Jägersgrün</cmt>
+ <desc>bei D 08262 Tannenbergsthal/Jägersgrün</desc>
</wpt>
<wpt lat="50.434530000" lon="12.461120000">
- <name>bei D 08262 Tannenbergsthal </name>
- <cmt>B283\Klingenthaler Strasse</cmt>
- <desc>B283\Klingenthaler Strasse</desc>
+ <name>B283\Klingenthaler Strasse</name>
+ <cmt>bei D 08262 Tannenbergsthal</cmt>
+ <desc>bei D 08262 Tannenbergsthal</desc>
</wpt>
<wpt lat="50.384530000" lon="12.456220000">
- <name>bei D 08248 Klingenthal/Brunndöbra </name>
- <cmt>S304\Falkensteiner Strasse</cmt>
- <desc>S304\Falkensteiner Strasse</desc>
+ <name>S304\Falkensteiner Strasse</name>
+ <cmt>bei D 08248 Klingenthal/Brunndöbra</cmt>
+ <desc>bei D 08248 Klingenthal/Brunndöbra</desc>
</wpt>
<wpt lat="50.419640000" lon="12.399730000">
- <name>bei D 08223 Grünbach-Muldenberg </name>
- <cmt>S302/S304</cmt>
- <desc>S302/S304</desc>
+ <name>S302/S304</name>
+ <cmt>bei D 08223 Grünbach-Muldenberg</cmt>
+ <desc>bei D 08223 Grünbach-Muldenberg</desc>
</wpt>
<wpt lat="50.446180000" lon="12.364590000">
- <name>bei D 08223 Grünbach </name>
- <cmt>S304\Bahnhofstrasse</cmt>
- <desc>S304\Bahnhofstrasse</desc>
+ <name>S304\Bahnhofstrasse</name>
+ <cmt>bei D 08223 Grünbach</cmt>
+ <desc>bei D 08223 Grünbach</desc>
</wpt>
<wpt lat="50.400420000" lon="12.337200000">
- <name>bei D 08261 Schöneck </name>
- <cmt>S301</cmt>
- <desc>S301</desc>
+ <name>S301</name>
+ <cmt>bei D 08261 Schöneck</cmt>
+ <desc>bei D 08261 Schöneck</desc>
</wpt>
<wpt lat="50.328660000" lon="12.351510000">
- <name>bei D 08258 Markneukirchen/Friebus </name>
- <cmt>B283</cmt>
- <desc>B283</desc>
+ <name>B283</name>
+ <cmt>bei D 08258 Markneukirchen/Friebus</cmt>
+ <desc>bei D 08258 Markneukirchen/Friebus</desc>
</wpt>
<wpt lat="50.271540000" lon="12.321940000">
- <name>bei D 08258 Landwüst </name>
- <cmt>K7844\Rauner Strasse</cmt>
- <desc>K7844\Rauner Strasse</desc>
+ <name>K7844\Rauner Strasse</name>
+ <cmt>bei D 08258 Landwüst</cmt>
+ <desc>bei D 08258 Landwüst</desc>
</wpt>
<wpt lat="50.304990000" lon="12.252880000">
- <name>bei D 08626 Adorf/Jugelsburg </name>
- <cmt>B92/E49</cmt>
- <desc>B92/E49</desc>
+ <name>B92/E49</name>
+ <cmt>bei D 08626 Adorf/Jugelsburg</cmt>
+ <desc>bei D 08626 Adorf/Jugelsburg</desc>
</wpt>
<wpt lat="50.324370000" lon="12.257480000">
- <name>bei D 08626 Adorf </name>
- <cmt>B92/E49\Oelsnitzer Strasse</cmt>
- <desc>B92/E49\Oelsnitzer Strasse</desc>
+ <name>B92/E49\Oelsnitzer Strasse</name>
+ <cmt>bei D 08626 Adorf</cmt>
+ <desc>bei D 08626 Adorf</desc>
</wpt>
<wpt lat="50.420020000" lon="12.103010000">
- <name>bei D 08606 Planschwitz </name>
- <cmt>K7854\Oelsnitzer Strasse</cmt>
- <desc>K7854\Oelsnitzer Strasse</desc>
+ <name>K7854\Oelsnitzer Strasse</name>
+ <cmt>bei D 08606 Planschwitz</cmt>
+ <desc>bei D 08606 Planschwitz</desc>
</wpt>
<wpt lat="50.404490000" lon="12.063910000">
- <name>bei D 08538 Burgstein/Dröda </name>
- <cmt>S310\Bobenneukirchener Strasse</cmt>
- <desc>S310\Bobenneukirchener Strasse</desc>
+ <name>S310\Bobenneukirchener Strasse</name>
+ <cmt>bei D 08538 Burgstein/Dröda</cmt>
+ <desc>bei D 08538 Burgstein/Dröda</desc>
</wpt>
<wpt lat="50.429200000" lon="12.061160000">
- <name>bei D 08538 Burgstein/Pirk </name>
- <cmt>K7859</cmt>
- <desc>K7859</desc>
+ <name>K7859</name>
+ <cmt>bei D 08538 Burgstein/Pirk</cmt>
+ <desc>bei D 08538 Burgstein/Pirk</desc>
</wpt>
<wpt lat="50.429900000" lon="11.981960000">
- <name>bei D 08538 Burgstein/Kemnitz </name>
- <cmt>K7859</cmt>
- <desc>K7859</desc>
+ <name>K7859</name>
+ <cmt>bei D 08538 Burgstein/Kemnitz</cmt>
+ <desc>bei D 08538 Burgstein/Kemnitz</desc>
+</wpt>
+<wpt lat="50.326920000" lon="11.913060000">
+ <name>bei D95032 Hof</name>
+ <cmt>bei D95032 Hof</cmt>
+ <desc>bei D95032 Hof</desc>
</wpt>
<rte>
- <name>von bei D 95030 Hof/Innenstadt nach bei D95032 Hof </name>
+ <name>von bei D 95030 Hof/Innenstadt nach bei D95032 Hof</name>
<desc>MOTORRAD Tourenplaner 2005/2006 9.50</desc>
<rtept lat="50.326840000" lon="11.912930000">
- <name>bei D 95030 Hof/Innenstadt </name>
- <cmt>B2 Schleizer Strasse</cmt>
- <desc>B2 Schleizer Strasse</desc>
+ <name>B2 Schleizer Strasse</name>
+ <cmt>bei D 95030 Hof/Innenstadt</cmt>
+ <desc>bei D 95030 Hof/Innenstadt</desc>
</rtept>
<rtept lat="50.362350000" lon="11.903730000">
- <name>in Zedtwitz halb rechts halten auf B2 Hofer Strasse</name>
- <cmt>B2 Hofer Strasse</cmt>
- <desc>B2 Hofer Strasse</desc>
+ <name>B2 Hofer Strasse</name>
+ <desc>in Zedtwitz halb rechts halten auf B2 Hofer Strasse</desc>
</rtept>
<rtept lat="50.372360000" lon="11.891400000">
- <name>rechts abbiegen auf B2</name>
- <cmt>B2</cmt>
- <desc>B2</desc>
+ <name>B2</name>
+ <desc>rechts abbiegen auf B2</desc>
</rtept>
<rtept lat="50.393720000" lon="11.867560000">
- <name>bei D 95183 Töpen </name>
- <cmt>B2\Hofer Strasse</cmt>
- <desc>B2\Hofer Strasse</desc>
+ <name>B2\Hofer Strasse</name>
+ <cmt>bei D 95183 Töpen</cmt>
+ <desc>bei D 95183 Töpen</desc>
</rtept>
<rtept lat="50.442190000" lon="11.860640000">
- <name>in Gefell links abbiegen auf B90 Friedensstrasse</name>
- <cmt>B90 Friedensstrasse</cmt>
- <desc>B90 Friedensstrasse</desc>
+ <name>B90 Friedensstrasse</name>
+ <desc>in Gefell links abbiegen auf B90 Friedensstrasse</desc>
</rtept>
<rtept lat="50.450910000" lon="11.652160000">
- <name>in Lobenstein halb rechts halten auf B90 Hirschberger Strasse</name>
- <cmt>B90 Hirschberger Strasse</cmt>
- <desc>B90 Hirschberger Strasse</desc>
+ <name>B90 Hirschberger Strasse</name>
+ <desc>in Lobenstein halb rechts halten auf B90 Hirschberger Strasse</desc>
</rtept>
<rtept lat="50.451520000" lon="11.642930000">
- <name>geradeaus weiter auf Strasse der Jugend (L1095)</name>
- <cmt>Strasse der Jugend (L1095)</cmt>
- <desc>Strasse der Jugend (L1095)</desc>
+ <name>Strasse der Jugend (L1095)</name>
+ <desc>geradeaus weiter auf Strasse der Jugend (L1095)</desc>
</rtept>
<rtept lat="50.457560000" lon="11.642810000">
- <name>bei D 07356 Lobenstein </name>
- <cmt>L1095\Strasse der Jugend</cmt>
- <desc>L1095\Strasse der Jugend</desc>
+ <name>L1095\Strasse der Jugend</name>
+ <cmt>bei D 07356 Lobenstein</cmt>
+ <desc>bei D 07356 Lobenstein</desc>
</rtept>
<rtept lat="50.462250000" lon="11.648150000">
- <name>links abbiegen auf L1099</name>
- <cmt>L1099</cmt>
- <desc>L1099</desc>
+ <name>L1099</name>
+ <desc>links abbiegen auf L1099</desc>
</rtept>
<rtept lat="50.472270000" lon="11.640990000">
- <name>rechts abbiegen</name>
+ <name>RPT010</name>
+ <desc>rechts abbiegen</desc>
</rtept>
<rtept lat="50.475460000" lon="11.652270000">
- <name>in Schönbrunn links abbiegen auf Schönbrunn</name>
- <cmt>Schönbrunn</cmt>
- <desc>Schönbrunn</desc>
+ <name>Schönbrunn</name>
+ <desc>in Schönbrunn links abbiegen auf Schönbrunn</desc>
</rtept>
<rtept lat="50.475750000" lon="11.652890000">
- <name>links abbiegen auf Schönbrunn</name>
- <cmt>Schönbrunn</cmt>
- <desc>Schönbrunn</desc>
+ <name>Schönbrunn</name>
+ <desc>links abbiegen auf Schönbrunn</desc>
</rtept>
<rtept lat="50.476670000" lon="11.652930000">
- <name>halb rechts halten auf Schönbrunn</name>
- <cmt>Schönbrunn</cmt>
- <desc>Schönbrunn</desc>
+ <name>Schönbrunn</name>
+ <desc>halb rechts halten auf Schönbrunn</desc>
</rtept>
<rtept lat="50.477110000" lon="11.653620000">
- <name>geradeaus weiter auf L1095 </name>
- <cmt>L1095 </cmt>
- <desc>L1095 </desc>
+ <name>L1095</name>
+ <desc>geradeaus weiter auf L1095</desc>
</rtept>
<rtept lat="50.480800000" lon="11.661000000">
- <name>halb links halten auf L1095 </name>
- <cmt>L1095 </cmt>
- <desc>L1095 </desc>
+ <name>L1095</name>
+ <desc>halb links halten auf L1095</desc>
</rtept>
<rtept lat="50.481060000" lon="11.661630000">
- <name>in Bellevue links abbiegen auf L1095</name>
- <cmt>L1095</cmt>
- <desc>L1095</desc>
+ <name>L1095</name>
+ <desc>in Bellevue links abbiegen auf L1095</desc>
</rtept>
<rtept lat="50.499560000" lon="11.728450000">
- <name>in Saalburg geradeaus weiter auf L1095</name>
- <cmt>L1095</cmt>
- <desc>L1095</desc>
+ <name>L1095</name>
+ <desc>in Saalburg geradeaus weiter auf L1095</desc>
</rtept>
<rtept lat="50.500130000" lon="11.729100000">
- <name>geradeaus weiter auf L1095</name>
- <cmt>L1095</cmt>
- <desc>L1095</desc>
+ <name>L1095</name>
+ <desc>geradeaus weiter auf L1095</desc>
</rtept>
<rtept lat="50.502810000" lon="11.734100000">
- <name>links abbiegen auf L1095</name>
- <cmt>L1095</cmt>
- <desc>L1095</desc>
+ <name>L1095</name>
+ <desc>links abbiegen auf L1095</desc>
</rtept>
<rtept lat="50.503480000" lon="11.733400000">
- <name>rechts abbiegen auf Schleizer Strasse (L1095)</name>
- <cmt>Schleizer Strasse (L1095)</cmt>
- <desc>Schleizer Strasse (L1095)</desc>
+ <name>Schleizer Strasse (L1095)</name>
+ <desc>rechts abbiegen auf Schleizer Strasse (L1095)</desc>
</rtept>
<rtept lat="50.507190000" lon="11.733460000">
- <name>bei D 07929 Saalburg-Ebersdorf/Saalburg </name>
- <cmt>L1095</cmt>
- <desc>L1095</desc>
+ <name>L1095</name>
+ <cmt>bei D 07929 Saalburg-Ebersdorf/Saalburg</cmt>
+ <desc>bei D 07929 Saalburg-Ebersdorf/Saalburg</desc>
</rtept>
<rtept lat="50.523110000" lon="11.738670000">
- <name>geradeaus weiter auf L1095</name>
- <cmt>L1095</cmt>
- <desc>L1095</desc>
+ <name>L1095</name>
+ <desc>geradeaus weiter auf L1095</desc>
</rtept>
<rtept lat="50.527710000" lon="11.747960000">
- <name>links abbiegen</name>
+ <name>RPT023</name>
+ <desc>links abbiegen</desc>
</rtept>
<rtept lat="50.524670000" lon="11.714020000">
- <name>bei D07907 Burgk/Burgkhammer </name>
- <cmt>K550</cmt>
- <desc>K550</desc>
+ <name>K550</name>
+ <cmt>bei D07907 Burgk/Burgkhammer</cmt>
+ <desc>bei D07907 Burgk/Burgkhammer</desc>
</rtept>
<rtept lat="50.540680000" lon="11.707810000">
- <name>rechts abbiegen auf L1101</name>
- <cmt>L1101</cmt>
- <desc>L1101</desc>
+ <name>L1101</name>
+ <desc>rechts abbiegen auf L1101</desc>
</rtept>
<rtept lat="50.546710000" lon="11.724920000">
- <name>geradeaus weiter auf Burgkhammer </name>
- <cmt>Burgkhammer </cmt>
- <desc>Burgkhammer </desc>
+ <name>Burgkhammer</name>
+ <desc>geradeaus weiter auf Burgkhammer</desc>
</rtept>
<rtept lat="50.551440000" lon="11.719450000">
- <name>bei D 07907 Burgk/Burgkhammer </name>
- <cmt>Burgkhammer</cmt>
- <desc>Burgkhammer</desc>
+ <name>Burgkhammer</name>
+ <cmt>bei D 07907 Burgk/Burgkhammer</cmt>
+ <desc>bei D 07907 Burgk/Burgkhammer</desc>
</rtept>
<rtept lat="50.551630000" lon="11.719460000">
- <name>in Burgkhammer links abbiegen auf L1101 </name>
- <cmt>L1101 </cmt>
- <desc>L1101 </desc>
+ <name>L1101</name>
+ <desc>in Burgkhammer links abbiegen auf L1101</desc>
</rtept>
<rtept lat="50.540680000" lon="11.707810000">
- <name>links abbiegen</name>
+ <name>RPT029</name>
+ <desc>links abbiegen</desc>
</rtept>
<rtept lat="50.527710000" lon="11.747960000">
- <name>links abbiegen auf L1095</name>
- <cmt>L1095</cmt>
- <desc>L1095</desc>
+ <name>L1095</name>
+ <desc>links abbiegen auf L1095</desc>
</rtept>
<rtept lat="50.543020000" lon="11.772720000">
- <name>links abbiegen auf Burgker Chaussee (L1101)</name>
- <cmt>Burgker Chaussee (L1101)</cmt>
- <desc>Burgker Chaussee (L1101)</desc>
+ <name>Burgker Chaussee (L1101)</name>
+ <desc>links abbiegen auf Burgker Chaussee (L1101)</desc>
</rtept>
<rtept lat="50.555320000" lon="11.734230000">
- <name>links abbiegen auf Burgker Strasse (L1101)</name>
- <cmt>Burgker Strasse (L1101)</cmt>
- <desc>Burgker Strasse (L1101)</desc>
+ <name>Burgker Strasse (L1101)</name>
+ <desc>links abbiegen auf Burgker Strasse (L1101)</desc>
</rtept>
<rtept lat="50.555000000" lon="11.733890000">
- <name>halb rechts halten auf L2357</name>
- <cmt>L2357</cmt>
- <desc>L2357</desc>
+ <name>L2357</name>
+ <desc>halb rechts halten auf L2357</desc>
</rtept>
<rtept lat="50.556270000" lon="11.719810000">
- <name>bei D 07907 Burgk </name>
- <cmt>L2357</cmt>
- <desc>L2357</desc>
+ <name>L2357</name>
+ <cmt>bei D 07907 Burgk</cmt>
+ <desc>bei D 07907 Burgk</desc>
</rtept>
<rtept lat="50.555000000" lon="11.733890000">
- <name>geradeaus weiter auf Burgker Strasse (L1101)</name>
- <cmt>Burgker Strasse (L1101)</cmt>
- <desc>Burgker Strasse (L1101)</desc>
+ <name>Burgker Strasse (L1101)</name>
+ <desc>geradeaus weiter auf Burgker Strasse (L1101)</desc>
</rtept>
<rtept lat="50.555320000" lon="11.734230000">
- <name>geradeaus weiter auf L2357</name>
- <cmt>L2357</cmt>
- <desc>L2357</desc>
+ <name>L2357</name>
+ <desc>geradeaus weiter auf L2357</desc>
</rtept>
<rtept lat="50.558740000" lon="11.736880000">
- <name>bei D 07907 Schleiz/Möschlitz </name>
- <cmt>L2357</cmt>
- <desc>L2357</desc>
+ <name>L2357</name>
+ <cmt>bei D 07907 Schleiz/Möschlitz</cmt>
+ <desc>bei D 07907 Schleiz/Möschlitz</desc>
</rtept>
<rtept lat="50.560320000" lon="11.738180000">
- <name>links abbiegen</name>
+ <name>RPT038</name>
+ <desc>links abbiegen</desc>
</rtept>
<rtept lat="50.570230000" lon="11.729630000">
- <name>in Grochwitz halb rechts halten auf Mühlenstrasse</name>
- <cmt>Mühlenstrasse</cmt>
- <desc>Mühlenstrasse</desc>
+ <name>Mühlenstrasse</name>
+ <desc>in Grochwitz halb rechts halten auf Mühlenstrasse</desc>
</rtept>
<rtept lat="50.571140000" lon="11.730220000">
- <name>geradeaus weiter auf Sackgasse</name>
- <cmt>Sackgasse</cmt>
- <desc>Sackgasse</desc>
+ <name>Sackgasse</name>
+ <desc>geradeaus weiter auf Sackgasse</desc>
</rtept>
<rtept lat="50.572250000" lon="11.732300000">
- <name>geradeaus weiter </name>
+ <name>RPT041</name>
+ <desc>geradeaus weiter</desc>
</rtept>
<rtept lat="50.579640000" lon="11.750480000">
- <name>links abbiegen auf L1103 </name>
- <cmt>L1103 </cmt>
- <desc>L1103 </desc>
+ <name>L1103</name>
+ <desc>links abbiegen auf L1103</desc>
</rtept>
<rtept lat="50.589520000" lon="11.742120000">
- <name>links abbiegen auf L1103</name>
- <cmt>L1103</cmt>
- <desc>L1103</desc>
+ <name>L1103</name>
+ <desc>links abbiegen auf L1103</desc>
</rtept>
<rtept lat="50.592190000" lon="11.734450000">
- <name>in Crispendorf halb rechts halten auf Ortsstrasse (L1103)</name>
- <cmt>Ortsstrasse (L1103)</cmt>
- <desc>Ortsstrasse (L1103)</desc>
+ <name>Ortsstrasse (L1103)</name>
+ <desc>in Crispendorf halb rechts halten auf Ortsstrasse (L1103)</desc>
</rtept>
<rtept lat="50.590570000" lon="11.729760000">
- <name>halb rechts halten auf Ortsstrasse (L1103)</name>
- <cmt>Ortsstrasse (L1103)</cmt>
- <desc>Ortsstrasse (L1103)</desc>
+ <name>Ortsstrasse (L1103)</name>
+ <desc>halb rechts halten auf Ortsstrasse (L1103)</desc>
</rtept>
<rtept lat="50.592260000" lon="11.712030000">
- <name>halb rechts halten auf L1103</name>
- <cmt>L1103</cmt>
- <desc>L1103</desc>
+ <name>L1103</name>
+ <desc>halb rechts halten auf L1103</desc>
</rtept>
<rtept lat="50.605660000" lon="11.651000000">
- <name>in Ziegenrück halb links halten auf Schleizer Strasse (L1103)</name>
- <cmt>Schleizer Strasse (L1103)</cmt>
- <desc>Schleizer Strasse (L1103)</desc>
+ <name>Schleizer Strasse (L1103)</name>
+ <desc>in Ziegenrück halb links halten auf Schleizer Strasse (L1103)</desc>
</rtept>
<rtept lat="50.608740000" lon="11.649800000">
- <name>rechts abbiegen auf Plothental (L2350)</name>
- <cmt>Plothental (L2350)</cmt>
- <desc>Plothental (L2350)</desc>
+ <name>Plothental (L2350)</name>
+ <desc>rechts abbiegen auf Plothental (L2350)</desc>
</rtept>
<rtept lat="50.608090000" lon="11.653350000">
- <name>bei D 07924 Ziegenrück </name>
- <cmt>L2350\Plothental</cmt>
- <desc>L2350\Plothental</desc>
+ <name>L2350\Plothental</name>
+ <cmt>bei D 07924 Ziegenrück</cmt>
+ <desc>bei D 07924 Ziegenrück</desc>
</rtept>
<rtept lat="50.627150000" lon="11.693550000">
- <name>in Tausa halb links halten auf Tausa (L2350)</name>
- <cmt>Tausa (L2350)</cmt>
- <desc>Tausa (L2350)</desc>
+ <name>Tausa (L2350)</name>
+ <desc>in Tausa halb links halten auf Tausa (L2350)</desc>
</rtept>
<rtept lat="50.635050000" lon="11.706870000">
- <name>in Bucha links abbiegen auf Ortsstrasse (L2350)</name>
- <cmt>Ortsstrasse (L2350)</cmt>
- <desc>Ortsstrasse (L2350)</desc>
+ <name>Ortsstrasse (L2350)</name>
+ <desc>in Bucha links abbiegen auf Ortsstrasse (L2350)</desc>
</rtept>
<rtept lat="50.647380000" lon="11.703560000">
- <name>rechts abbiegen auf L2350</name>
- <cmt>L2350</cmt>
- <desc>L2350</desc>
+ <name>L2350</name>
+ <desc>rechts abbiegen auf L2350</desc>
</rtept>
<rtept lat="50.652220000" lon="11.719550000">
- <name>in Knau halb links halten auf Hauptstrasse (L2349)</name>
- <cmt>Hauptstrasse (L2349)</cmt>
- <desc>Hauptstrasse (L2349)</desc>
+ <name>Hauptstrasse (L2349)</name>
+ <desc>in Knau halb links halten auf Hauptstrasse (L2349)</desc>
</rtept>
<rtept lat="50.650840000" lon="11.722880000">
- <name>bei D 07389 Knau </name>
- <cmt>L2349\Hauptstrasse</cmt>
- <desc>L2349\Hauptstrasse</desc>
+ <name>L2349\Hauptstrasse</name>
+ <cmt>bei D 07389 Knau</cmt>
+ <desc>bei D 07389 Knau</desc>
</rtept>
<rtept lat="50.649250000" lon="11.725600000">
- <name>links abbiegen auf Hauptstrasse (L2349)</name>
- <cmt>Hauptstrasse (L2349)</cmt>
- <desc>Hauptstrasse (L2349)</desc>
+ <name>Hauptstrasse (L2349)</name>
+ <desc>links abbiegen auf Hauptstrasse (L2349)</desc>
</rtept>
<rtept lat="50.638840000" lon="11.773210000">
- <name>bei D 07907 Plothen </name>
- <cmt>L2349\Ortsstrasse</cmt>
- <desc>L2349\Ortsstrasse</desc>
+ <name>L2349\Ortsstrasse</name>
+ <cmt>bei D 07907 Plothen</cmt>
+ <desc>bei D 07907 Plothen</desc>
</rtept>
<rtept lat="50.643500000" lon="11.816310000">
- <name>in Dittersdorf rechts abbiegen auf L1077</name>
- <cmt>L1077</cmt>
- <desc>L1077</desc>
+ <name>L1077</name>
+ <desc>in Dittersdorf rechts abbiegen auf L1077</desc>
</rtept>
<rtept lat="50.610310000" lon="11.825020000">
- <name>rechts abbiegen auf Ziegelei</name>
- <cmt>Ziegelei</cmt>
- <desc>Ziegelei</desc>
+ <name>Ziegelei</name>
+ <desc>rechts abbiegen auf Ziegelei</desc>
</rtept>
<rtept lat="50.609550000" lon="11.825070000">
- <name>halb rechts halten auf B2</name>
- <cmt>B2</cmt>
- <desc>B2</desc>
+ <name>B2</name>
+ <desc>halb rechts halten auf B2</desc>
</rtept>
<rtept lat="50.603620000" lon="11.823910000">
- <name>in Oettersdorf links abbiegen auf Löhmaer Weg (K301)</name>
- <cmt>Löhmaer Weg (K301)</cmt>
- <desc>Löhmaer Weg (K301)</desc>
+ <name>Löhmaer Weg (K301)</name>
+ <desc>in Oettersdorf links abbiegen auf Löhmaer Weg (K301)</desc>
</rtept>
<rtept lat="50.604720000" lon="11.825820000">
- <name>rechts abbiegen auf Löhmaer Weg (K301)</name>
- <cmt>Löhmaer Weg (K301)</cmt>
- <desc>Löhmaer Weg (K301)</desc>
+ <name>Löhmaer Weg (K301)</name>
+ <desc>rechts abbiegen auf Löhmaer Weg (K301)</desc>
</rtept>
<rtept lat="50.602840000" lon="11.828100000">
- <name>links abbiegen auf Löhmaer Weg (K301)</name>
- <cmt>Löhmaer Weg (K301)</cmt>
- <desc>Löhmaer Weg (K301)</desc>
+ <name>Löhmaer Weg (K301)</name>
+ <desc>links abbiegen auf Löhmaer Weg (K301)</desc>
</rtept>
<rtept lat="50.614300000" lon="11.849910000">
- <name>rechts abbiegen</name>
+ <name>RPT063</name>
+ <desc>rechts abbiegen</desc>
</rtept>
<rtept lat="50.611660000" lon="11.851660000">
- <name>in Löhma links abbiegen auf Ortsstrasse</name>
- <cmt>Ortsstrasse</cmt>
- <desc>Ortsstrasse</desc>
+ <name>Ortsstrasse</name>
+ <desc>in Löhma links abbiegen auf Ortsstrasse</desc>
</rtept>
<rtept lat="50.611610000" lon="11.854620000">
- <name>geradeaus weiter </name>
+ <name>RPT065</name>
+ <desc>geradeaus weiter</desc>
</rtept>
<rtept lat="50.606090000" lon="11.883090000">
- <name>in Kirschkau geradeaus weiter auf Ortsstrasse</name>
- <cmt>Ortsstrasse</cmt>
- <desc>Ortsstrasse</desc>
+ <name>Ortsstrasse</name>
+ <desc>in Kirschkau geradeaus weiter auf Ortsstrasse</desc>
</rtept>
<rtept lat="50.604690000" lon="11.885940000">
- <name>rechts abbiegen auf Ortsstrasse</name>
- <cmt>Ortsstrasse</cmt>
- <desc>Ortsstrasse</desc>
+ <name>Ortsstrasse</name>
+ <desc>rechts abbiegen auf Ortsstrasse</desc>
</rtept>
<rtept lat="50.604130000" lon="11.885740000">
- <name>rechts abbiegen auf Ortsstrasse</name>
- <cmt>Ortsstrasse</cmt>
- <desc>Ortsstrasse</desc>
+ <name>Ortsstrasse</name>
+ <desc>rechts abbiegen auf Ortsstrasse</desc>
</rtept>
<rtept lat="50.603540000" lon="11.884620000">
- <name>links abbiegen auf Ortsstrasse</name>
- <cmt>Ortsstrasse</cmt>
- <desc>Ortsstrasse</desc>
+ <name>Ortsstrasse</name>
+ <desc>links abbiegen auf Ortsstrasse</desc>
</rtept>
<rtept lat="50.603310000" lon="11.885560000">
- <name>rechts abbiegen auf Ortsstrasse</name>
- <cmt>Ortsstrasse</cmt>
- <desc>Ortsstrasse</desc>
+ <name>Ortsstrasse</name>
+ <desc>rechts abbiegen auf Ortsstrasse</desc>
</rtept>
<rtept lat="50.602920000" lon="11.885410000">
- <name>geradeaus weiter auf B94 </name>
- <cmt>B94 </cmt>
- <desc>B94 </desc>
+ <name>B94</name>
+ <desc>geradeaus weiter auf B94</desc>
</rtept>
<rtept lat="50.594350000" lon="11.887760000">
- <name>rechts abbiegen auf B94</name>
- <cmt>B94</cmt>
- <desc>B94</desc>
+ <name>B94</name>
+ <desc>rechts abbiegen auf B94</desc>
</rtept>
<rtept lat="50.590560000" lon="11.884750000">
- <name>links abbiegen auf Dorfstrasse</name>
- <cmt>Dorfstrasse</cmt>
- <desc>Dorfstrasse</desc>
+ <name>Dorfstrasse</name>
+ <desc>links abbiegen auf Dorfstrasse</desc>
</rtept>
<rtept lat="50.587800000" lon="11.886210000">
- <name>in Lössau links abbiegen</name>
+ <name>RPT074</name>
+ <desc>in Lössau links abbiegen</desc>
</rtept>
<rtept lat="50.568210000" lon="11.907330000">
- <name>bei D 07907 Schleiz/Langenbuch </name>
- <cmt>K304\Lössauer Strasse</cmt>
- <desc>K304\Lössauer Strasse</desc>
+ <name>K304\Lössauer Strasse</name>
+ <cmt>bei D 07907 Schleiz/Langenbuch</cmt>
+ <desc>bei D 07907 Schleiz/Langenbuch</desc>
</rtept>
<rtept lat="50.566910000" lon="11.907870000">
- <name>in Langenbuch links abbiegen auf Thierbacher Strasse (L2348)</name>
- <cmt>Thierbacher Strasse (L2348)</cmt>
- <desc>Thierbacher Strasse (L2348)</desc>
+ <name>Thierbacher Strasse (L2348)</name>
+ <desc>in Langenbuch links abbiegen auf Thierbacher Strasse (L2348)</desc>
</rtept>
<rtept lat="50.575470000" lon="11.930590000">
- <name>geradeaus weiter</name>
+ <name>RPT077</name>
+ <desc>geradeaus weiter</desc>
</rtept>
<rtept lat="50.580230000" lon="11.991480000">
- <name>in Pausa/Vogtl. rechts abbiegen</name>
+ <name>RPT078</name>
+ <desc>in Pausa/Vogtl. rechts abbiegen</desc>
</rtept>
<rtept lat="50.578300000" lon="11.992490000">
- <name>rechts abbiegen auf Plauensche Strasse (S316)</name>
- <cmt>Plauensche Strasse (S316)</cmt>
- <desc>Plauensche Strasse (S316)</desc>
+ <name>Plauensche Strasse (S316)</name>
+ <desc>rechts abbiegen auf Plauensche Strasse (S316)</desc>
</rtept>
<rtept lat="50.576240000" lon="11.990570000">
- <name>in Oberreichenau halb links halten auf Am Mühlgraben (S316)</name>
- <cmt>Am Mühlgraben (S316)</cmt>
- <desc>Am Mühlgraben (S316)</desc>
+ <name>Am Mühlgraben (S316)</name>
+ <desc>in Oberreichenau halb links halten auf Am Mühlgraben (S316)</desc>
</rtept>
<rtept lat="50.575210000" lon="11.991270000">
- <name>bei D 07952 Pausa/Oberreichenau </name>
- <cmt>S316\Am Mühlgraben</cmt>
- <desc>S316\Am Mühlgraben</desc>
+ <name>S316\Am Mühlgraben</name>
+ <cmt>bei D 07952 Pausa/Oberreichenau</cmt>
+ <desc>bei D 07952 Pausa/Oberreichenau</desc>
</rtept>
<rtept lat="50.542020000" lon="12.081040000">
- <name>in Syrau halb rechts halten auf B282/E49 Hauptstrasse</name>
- <cmt>B282/E49 Hauptstrasse</cmt>
- <desc>B282/E49 Hauptstrasse</desc>
+ <name>B282/E49 Hauptstrasse</name>
+ <desc>in Syrau halb rechts halten auf B282/E49 Hauptstrasse</desc>
</rtept>
<rtept lat="50.541330000" lon="12.081960000">
- <name>bei D 08548 Syrau </name>
- <cmt>B282/E49\Hauptstrasse</cmt>
- <desc>B282/E49\Hauptstrasse</desc>
+ <name>B282/E49\Hauptstrasse</name>
+ <cmt>bei D 08548 Syrau</cmt>
+ <desc>bei D 08548 Syrau</desc>
</rtept>
<rtept lat="50.525500000" lon="12.110520000">
- <name>rechts abbiegen auf Pausaer Strasse</name>
- <cmt>Pausaer Strasse</cmt>
- <desc>Pausaer Strasse</desc>
+ <name>Pausaer Strasse</name>
+ <desc>rechts abbiegen auf Pausaer Strasse</desc>
</rtept>
<rtept lat="50.517180000" lon="12.120040000">
- <name>rechts abbiegen auf B92/E49 Pausaer Strasse</name>
- <cmt>B92/E49 Pausaer Strasse</cmt>
- <desc>B92/E49 Pausaer Strasse</desc>
+ <name>B92/E49 Pausaer Strasse</name>
+ <desc>rechts abbiegen auf B92/E49 Pausaer Strasse</desc>
</rtept>
<rtept lat="50.507510000" lon="12.129620000">
- <name>in Plauen links abbiegen auf Martin-Luther-Strasse</name>
- <cmt>Martin-Luther-Strasse</cmt>
- <desc>Martin-Luther-Strasse</desc>
+ <name>Martin-Luther-Strasse</name>
+ <desc>in Plauen links abbiegen auf Martin-Luther-Strasse</desc>
</rtept>
<rtept lat="50.504660000" lon="12.142140000">
- <name>bei D 08525 Plauen/Preißelpöhl </name>
- <cmt>Martin-Luther-Strasse</cmt>
- <desc>Martin-Luther-Strasse</desc>
+ <name>Martin-Luther-Strasse</name>
+ <cmt>bei D 08525 Plauen/Preißelpöhl</cmt>
+ <desc>bei D 08525 Plauen/Preißelpöhl</desc>
</rtept>
<rtept lat="50.502330000" lon="12.145030000">
- <name>links abbiegen auf Lessingstrasse</name>
- <cmt>Lessingstrasse</cmt>
- <desc>Lessingstrasse</desc>
+ <name>Lessingstrasse</name>
+ <desc>links abbiegen auf Lessingstrasse</desc>
</rtept>
<rtept lat="50.501780000" lon="12.151440000">
- <name>links abbiegen auf B173 Hammerstrasse</name>
- <cmt>B173 Hammerstrasse</cmt>
- <desc>B173 Hammerstrasse</desc>
+ <name>B173 Hammerstrasse</name>
+ <desc>links abbiegen auf B173 Hammerstrasse</desc>
</rtept>
<rtept lat="50.497700000" lon="12.182310000">
- <name>links abbiegen auf Voigtsgrüner Weg (K6605)</name>
- <cmt>Voigtsgrüner Weg (K6605)</cmt>
- <desc>Voigtsgrüner Weg (K6605)</desc>
+ <name>Voigtsgrüner Weg (K6605)</name>
+ <desc>links abbiegen auf Voigtsgrüner Weg (K6605)</desc>
</rtept>
<rtept lat="50.506420000" lon="12.194890000">
- <name>rechts abbiegen auf Zum Plom</name>
- <cmt>Zum Plom</cmt>
- <desc>Zum Plom</desc>
+ <name>Zum Plom</name>
+ <desc>rechts abbiegen auf Zum Plom</desc>
</rtept>
<rtept lat="50.507990000" lon="12.212220000">
- <name>rechts abbiegen</name>
+ <name>RPT092</name>
+ <desc>rechts abbiegen</desc>
</rtept>
<rtept lat="50.504010000" lon="12.218670000">
- <name>in Neuensalz links abbiegen auf B169</name>
- <cmt>B169</cmt>
- <desc>B169</desc>
+ <name>B169</name>
+ <desc>in Neuensalz links abbiegen auf B169</desc>
</rtept>
<rtept lat="50.503880000" lon="12.219540000">
- <name>links abbiegen auf B169 Alte Plauener Strasse</name>
- <cmt>B169 Alte Plauener Strasse</cmt>
- <desc>B169 Alte Plauener Strasse</desc>
+ <name>B169 Alte Plauener Strasse</name>
+ <desc>links abbiegen auf B169 Alte Plauener Strasse</desc>
</rtept>
<rtept lat="50.504570000" lon="12.220490000">
- <name>geradeaus weiter auf B173 Hauptstrasse</name>
- <cmt>B173 Hauptstrasse</cmt>
- <desc>B173 Hauptstrasse</desc>
+ <name>B173 Hauptstrasse</name>
+ <desc>geradeaus weiter auf B173 Hauptstrasse</desc>
</rtept>
<rtept lat="50.506320000" lon="12.227040000">
- <name>bei D 08541 Neuensalz </name>
- <cmt>B173\Hauptstrasse</cmt>
- <desc>B173\Hauptstrasse</desc>
+ <name>B173\Hauptstrasse</name>
+ <cmt>bei D 08541 Neuensalz</cmt>
+ <desc>bei D 08541 Neuensalz</desc>
</rtept>
<rtept lat="50.519140000" lon="12.242830000">
- <name>in Thossfell geradeaus weiter auf B173 Hauptstrasse</name>
- <cmt>B173 Hauptstrasse</cmt>
- <desc>B173 Hauptstrasse</desc>
+ <name>B173 Hauptstrasse</name>
+ <desc>in Thossfell geradeaus weiter auf B173 Hauptstrasse</desc>
</rtept>
<rtept lat="50.520430000" lon="12.243390000">
- <name>geradeaus weiter auf B173 Hauptstrasse</name>
- <cmt>B173 Hauptstrasse</cmt>
- <desc>B173 Hauptstrasse</desc>
+ <name>B173 Hauptstrasse</name>
+ <desc>geradeaus weiter auf B173 Hauptstrasse</desc>
</rtept>
<rtept lat="50.524530000" lon="12.244410000">
- <name>links abbiegen auf Gansgrüner Strasse (K7880)</name>
- <cmt>Gansgrüner Strasse (K7880)</cmt>
- <desc>Gansgrüner Strasse (K7880)</desc>
+ <name>Gansgrüner Strasse (K7880)</name>
+ <desc>links abbiegen auf Gansgrüner Strasse (K7880)</desc>
</rtept>
<rtept lat="50.524640000" lon="12.244230000">
- <name>links abbiegen auf Gansgrüner Strasse (K7880)</name>
- <cmt>Gansgrüner Strasse (K7880)</cmt>
- <desc>Gansgrüner Strasse (K7880)</desc>
+ <name>Gansgrüner Strasse (K7880)</name>
+ <desc>links abbiegen auf Gansgrüner Strasse (K7880)</desc>
</rtept>
<rtept lat="50.528170000" lon="12.221450000">
- <name>in Gansgrün links abbiegen auf Dorfstrasse</name>
- <cmt>Dorfstrasse</cmt>
- <desc>Dorfstrasse</desc>
+ <name>Dorfstrasse</name>
+ <desc>in Gansgrün links abbiegen auf Dorfstrasse</desc>
</rtept>
<rtept lat="50.528210000" lon="12.221250000">
- <name>rechts abbiegen auf Dorfstrasse (K7880)</name>
- <cmt>Dorfstrasse (K7880)</cmt>
- <desc>Dorfstrasse (K7880)</desc>
+ <name>Dorfstrasse (K7880)</name>
+ <desc>rechts abbiegen auf Dorfstrasse (K7880)</desc>
</rtept>
<rtept lat="50.528670000" lon="12.222680000">
- <name>halb rechts halten auf Dorfstrasse (K7880)</name>
- <cmt>Dorfstrasse (K7880)</cmt>
- <desc>Dorfstrasse (K7880)</desc>
+ <name>Dorfstrasse (K7880)</name>
+ <desc>halb rechts halten auf Dorfstrasse (K7880)</desc>
</rtept>
<rtept lat="50.528780000" lon="12.224090000">
- <name>halb links halten</name>
+ <name>RPT104</name>
+ <desc>halb links halten</desc>
</rtept>
<rtept lat="50.546070000" lon="12.218730000">
- <name>bei D 08543 Pöhl/Helmsgrün </name>
- <cmt>K7880\Helmsgrün-Dorfstrasse</cmt>
- <desc>K7880\Helmsgrün-Dorfstrasse</desc>
+ <name>K7880\Helmsgrün-Dorfstrasse</name>
+ <cmt>bei D 08543 Pöhl/Helmsgrün</cmt>
+ <desc>bei D 08543 Pöhl/Helmsgrün</desc>
</rtept>
<rtept lat="50.548640000" lon="12.219230000">
- <name>in Helmsgrün halb rechts halten</name>
+ <name>RPT106</name>
+ <desc>in Helmsgrün halb rechts halten</desc>
</rtept>
<rtept lat="50.566180000" lon="12.225640000">
- <name>in Herlasgrün rechts abbiegen auf Herlasgrün-Dorfstrasse (K7811)</name>
- <cmt>Herlasgrün-Dorfstrasse (K7811)</cmt>
- <desc>Herlasgrün-Dorfstrasse (K7811)</desc>
+ <name>Herlasgrün-Dorfstrasse (K7811)</name>
+ <desc>in Herlasgrün rechts abbiegen auf Herlasgrün-Dorfstrasse (K7811)</desc>
</rtept>
<rtept lat="50.566740000" lon="12.226250000">
- <name>bei D 08543 Herlasgrün </name>
- <cmt>K7811\Herlasgrün-Dorfstrasse</cmt>
- <desc>K7811\Herlasgrün-Dorfstrasse</desc>
+ <name>K7811\Herlasgrün-Dorfstrasse</name>
+ <cmt>bei D 08543 Herlasgrün</cmt>
+ <desc>bei D 08543 Herlasgrün</desc>
</rtept>
<rtept lat="50.567370000" lon="12.227000000">
- <name>links abbiegen auf Herlasgrün-Christgrüner Strasse</name>
- <cmt>Herlasgrün-Christgrüner Strasse</cmt>
- <desc>Herlasgrün-Christgrüner Strasse</desc>
+ <name>Herlasgrün-Christgrüner Strasse</name>
+ <desc>links abbiegen auf Herlasgrün-Christgrüner Strasse</desc>
</rtept>
<rtept lat="50.569600000" lon="12.224910000">
- <name>geradeaus weiter auf Christgrüner Strasse</name>
- <cmt>Christgrüner Strasse</cmt>
- <desc>Christgrüner Strasse</desc>
+ <name>Christgrüner Strasse</name>
+ <desc>geradeaus weiter auf Christgrüner Strasse</desc>
</rtept>
<rtept lat="50.575660000" lon="12.221830000">
- <name>rechts abbiegen auf Dreckschänke (S297)</name>
- <cmt>Dreckschänke (S297)</cmt>
- <desc>Dreckschänke (S297)</desc>
+ <name>Dreckschänke (S297)</name>
+ <desc>rechts abbiegen auf Dreckschänke (S297)</desc>
</rtept>
<rtept lat="50.578200000" lon="12.231830000">
- <name>links abbiegen auf S298</name>
- <cmt>S298</cmt>
- <desc>S298</desc>
+ <name>S298</name>
+ <desc>links abbiegen auf S298</desc>
</rtept>
<rtept lat="50.590870000" lon="12.216020000">
- <name>in Reimersgrün links abbiegen</name>
+ <name>RPT113</name>
+ <desc>in Reimersgrün links abbiegen</desc>
</rtept>
<rtept lat="50.598770000" lon="12.198880000">
- <name>halb rechts halten</name>
+ <name>RPT114</name>
+ <desc>halb rechts halten</desc>
</rtept>
<rtept lat="50.605680000" lon="12.187530000">
- <name>in Coschütz rechts abbiegen auf Friedensstrasse (K7887)</name>
- <cmt>Friedensstrasse (K7887)</cmt>
- <desc>Friedensstrasse (K7887)</desc>
+ <name>Friedensstrasse (K7887)</name>
+ <desc>in Coschütz rechts abbiegen auf Friedensstrasse (K7887)</desc>
</rtept>
<rtept lat="50.613500000" lon="12.194140000">
- <name>links abbiegen auf S298</name>
- <cmt>S298</cmt>
- <desc>S298</desc>
+ <name>S298</name>
+ <desc>links abbiegen auf S298</desc>
</rtept>
<rtept lat="50.624800000" lon="12.201270000">
- <name>rechts abbiegen auf Netzschkauer Strasse (S296)</name>
- <cmt>Netzschkauer Strasse (S296)</cmt>
- <desc>Netzschkauer Strasse (S296)</desc>
+ <name>Netzschkauer Strasse (S296)</name>
+ <desc>rechts abbiegen auf Netzschkauer Strasse (S296)</desc>
</rtept>
<rtept lat="50.624630000" lon="12.202870000">
- <name>bei D 07985 Elsterberg/Reuth </name>
- <cmt>S296\Netzschkauer Strasse</cmt>
- <desc>S296\Netzschkauer Strasse</desc>
+ <name>S296\Netzschkauer Strasse</name>
+ <cmt>bei D 07985 Elsterberg/Reuth</cmt>
+ <desc>bei D 07985 Elsterberg/Reuth</desc>
</rtept>
<rtept lat="50.610360000" lon="12.242670000">
- <name>bei D 08491 Netzschkau </name>
- <cmt>S296\Elsterberger Strasse</cmt>
- <desc>S296\Elsterberger Strasse</desc>
+ <name>S296\Elsterberger Strasse</name>
+ <cmt>bei D 08491 Netzschkau</cmt>
+ <desc>bei D 08491 Netzschkau</desc>
</rtept>
<rtept lat="50.610420000" lon="12.244010000">
- <name>in Netzschkau links abbiegen auf Elsterberger Strasse (S296)</name>
- <cmt>Elsterberger Strasse (S296)</cmt>
- <desc>Elsterberger Strasse (S296)</desc>
+ <name>Elsterberger Strasse (S296)</name>
+ <desc>in Netzschkau links abbiegen auf Elsterberger Strasse (S296)</desc>
</rtept>
<rtept lat="50.610910000" lon="12.244700000">
- <name>rechts abbiegen auf Strasse der Einheit (S296)</name>
- <cmt>Strasse der Einheit (S296)</cmt>
- <desc>Strasse der Einheit (S296)</desc>
+ <name>Strasse der Einheit (S296)</name>
+ <desc>rechts abbiegen auf Strasse der Einheit (S296)</desc>
</rtept>
<rtept lat="50.611020000" lon="12.246920000">
- <name>halb rechts halten auf Strasse der Einheit (S296)</name>
- <cmt>Strasse der Einheit (S296)</cmt>
- <desc>Strasse der Einheit (S296)</desc>
+ <name>Strasse der Einheit (S296)</name>
+ <desc>halb rechts halten auf Strasse der Einheit (S296)</desc>
</rtept>
<rtept lat="50.611980000" lon="12.248750000">
- <name>links abbiegen auf B173 Plauener Strasse</name>
- <cmt>B173 Plauener Strasse</cmt>
- <desc>B173 Plauener Strasse</desc>
+ <name>B173 Plauener Strasse</name>
+ <desc>links abbiegen auf B173 Plauener Strasse</desc>
</rtept>
<rtept lat="50.621930000" lon="12.257800000">
- <name>bei D 08499 Mylau/Obermylau </name>
- <cmt>B173\Netzschkauer Strasse</cmt>
- <desc>B173\Netzschkauer Strasse</desc>
+ <name>B173\Netzschkauer Strasse</name>
+ <cmt>bei D 08499 Mylau/Obermylau</cmt>
+ <desc>bei D 08499 Mylau/Obermylau</desc>
</rtept>
<rtept lat="50.620960000" lon="12.264180000">
- <name>bei D 08499 Mylau/Obermylau </name>
- <cmt>B173\Robert-Georgi-Weg</cmt>
- <desc>B173\Robert-Georgi-Weg</desc>
+ <name>B173\Robert-Georgi-Weg</name>
+ <cmt>bei D 08499 Mylau/Obermylau</cmt>
+ <desc>bei D 08499 Mylau/Obermylau</desc>
</rtept>
<rtept lat="50.619010000" lon="12.286640000">
- <name>in Reichenbach im Vogtland links abbiegen auf B173/B94 Klinkhardtstrasse</name>
- <cmt>B173/B94 Klinkhardtstrasse</cmt>
- <desc>B173/B94 Klinkhardtstrasse</desc>
+ <name>B173/B94 Klinkhardtstrasse</name>
+ <desc>in Reichenbach im Vogtland links abbiegen auf B173/B94 Klinkhardtstrasse</desc>
</rtept>
<rtept lat="50.624730000" lon="12.291980000">
- <name>links abbiegen auf B173/B94 Dr.-Külz-Strasse</name>
- <cmt>B173/B94 Dr.-Külz-Strasse</cmt>
- <desc>B173/B94 Dr.-Külz-Strasse</desc>
+ <name>B173/B94 Dr.-Külz-Strasse</name>
+ <desc>links abbiegen auf B173/B94 Dr.-Külz-Strasse</desc>
</rtept>
<rtept lat="50.628460000" lon="12.285400000">
- <name>rechts abbiegen auf B173 Friedensstrasse</name>
- <cmt>B173 Friedensstrasse</cmt>
- <desc>B173 Friedensstrasse</desc>
+ <name>B173 Friedensstrasse</name>
+ <desc>rechts abbiegen auf B173 Friedensstrasse</desc>
</rtept>
<rtept lat="50.627970000" lon="12.301540000">
- <name>bei D 08468 Reichenbach </name>
- <cmt>B173\Friedensstrasse</cmt>
- <desc>B173\Friedensstrasse</desc>
+ <name>B173\Friedensstrasse</name>
+ <cmt>bei D 08468 Reichenbach</cmt>
+ <desc>bei D 08468 Reichenbach</desc>
</rtept>
<rtept lat="50.646230000" lon="12.359220000">
- <name>in Neumark geradeaus weiter auf B173</name>
- <cmt>B173</cmt>
- <desc>B173</desc>
+ <name>B173</name>
+ <desc>in Neumark geradeaus weiter auf B173</desc>
</rtept>
<rtept lat="50.652080000" lon="12.364410000">
- <name>geradeaus weiter auf B173</name>
- <cmt>B173</cmt>
- <desc>B173</desc>
+ <name>B173</name>
+ <desc>geradeaus weiter auf B173</desc>
</rtept>
<rtept lat="50.652850000" lon="12.364860000">
- <name>bei D 08496 Neumark/Unterneumark </name>
- <cmt>B173</cmt>
- <desc>B173</desc>
+ <name>B173</name>
+ <cmt>bei D 08496 Neumark/Unterneumark</cmt>
+ <desc>bei D 08496 Neumark/Unterneumark</desc>
</rtept>
<rtept lat="50.676760000" lon="12.408650000">
- <name>in Schönfels links abbiegen auf Stenner Strasse</name>
- <cmt>Stenner Strasse</cmt>
- <desc>Stenner Strasse</desc>
+ <name>Stenner Strasse</name>
+ <desc>in Schönfels links abbiegen auf Stenner Strasse</desc>
</rtept>
<rtept lat="50.676360000" lon="12.405730000">
- <name>geradeaus weiter auf Zwickauer Strasse (K9351)</name>
- <cmt>Zwickauer Strasse (K9351)</cmt>
- <desc>Zwickauer Strasse (K9351)</desc>
+ <name>Zwickauer Strasse (K9351)</name>
+ <desc>geradeaus weiter auf Zwickauer Strasse (K9351)</desc>
</rtept>
<rtept lat="50.676090000" lon="12.405090000">
- <name>D 08115 Schönfels </name>
- <cmt>K9351\Zwickauer Strasse</cmt>
- <desc>K9351\Zwickauer Strasse</desc>
+ <name>K9351\Zwickauer Strasse</name>
+ <cmt>D 08115 Schönfels</cmt>
+ <desc>D 08115 Schönfels</desc>
</rtept>
<rtept lat="50.676360000" lon="12.405730000">
- <name>halb rechts halten auf Stenner Strasse</name>
- <cmt>Stenner Strasse</cmt>
- <desc>Stenner Strasse</desc>
+ <name>Stenner Strasse</name>
+ <desc>halb rechts halten auf Stenner Strasse</desc>
</rtept>
<rtept lat="50.676760000" lon="12.408650000">
- <name>links abbiegen auf B173 Neumarker Strasse</name>
- <cmt>B173 Neumarker Strasse</cmt>
- <desc>B173 Neumarker Strasse</desc>
+ <name>B173 Neumarker Strasse</name>
+ <desc>links abbiegen auf B173 Neumarker Strasse</desc>
</rtept>
<rtept lat="50.713570000" lon="12.479620000">
- <name>bei D 08056 Zwickau/Bahnhofsvorstadt </name>
- <cmt>B173\Reichenbacher Strasse</cmt>
- <desc>B173\Reichenbacher Strasse</desc>
+ <name>B173\Reichenbacher Strasse</name>
+ <cmt>bei D 08056 Zwickau/Bahnhofsvorstadt</cmt>
+ <desc>bei D 08056 Zwickau/Bahnhofsvorstadt</desc>
</rtept>
<rtept lat="50.718230000" lon="12.489810000">
- <name>in Zwickau rechts abbiegen auf B173 Humboldtstrasse</name>
- <cmt>B173 Humboldtstrasse</cmt>
- <desc>B173 Humboldtstrasse</desc>
+ <name>B173 Humboldtstrasse</name>
+ <desc>in Zwickau rechts abbiegen auf B173 Humboldtstrasse</desc>
</rtept>
<rtept lat="50.714260000" lon="12.493590000">
- <name>links abbiegen auf B173 Am Schwanenteich</name>
- <cmt>B173 Am Schwanenteich</cmt>
- <desc>B173 Am Schwanenteich</desc>
+ <name>B173 Am Schwanenteich</name>
+ <desc>links abbiegen auf B173 Am Schwanenteich</desc>
</rtept>
<rtept lat="50.714770000" lon="12.495420000">
- <name>rechts halten auf B173 Dr.-Friedrichs-Ring</name>
- <cmt>B173 Dr.-Friedrichs-Ring</cmt>
- <desc>B173 Dr.-Friedrichs-Ring</desc>
+ <name>B173 Dr.-Friedrichs-Ring</name>
+ <desc>rechts halten auf B173 Dr.-Friedrichs-Ring</desc>
</rtept>
<rtept lat="50.714820000" lon="12.499450000">
- <name>geradeaus weiter auf B173 Glück-Auf-Brücke/Äussere Dresdner Strasse</name>
- <cmt>B173 Glück-Auf-Brücke/Äussere Dresdner Strasse</cmt>
- <desc>B173 Glück-Auf-Brücke/Äussere Dresdner Strasse</desc>
+ <name>B173 Glück-Auf-Brücke/Äussere Dresdner Strasse</name>
+ <desc>geradeaus weiter auf B173 Glück-Auf-Brücke/Äussere Dresdner Strasse</desc>
</rtept>
<rtept lat="50.745140000" lon="12.596660000">
- <name>rechts abbiegen auf Dresdner Strasse</name>
- <cmt>Dresdner Strasse</cmt>
- <desc>Dresdner Strasse</desc>
+ <name>Dresdner Strasse</name>
+ <desc>rechts abbiegen auf Dresdner Strasse</desc>
</rtept>
<rtept lat="50.747100000" lon="12.606600000">
- <name>geradeaus weiter auf Äussere Zwickauer Strasse</name>
- <cmt>Äussere Zwickauer Strasse</cmt>
- <desc>Äussere Zwickauer Strasse</desc>
+ <name>Äussere Zwickauer Strasse</name>
+ <desc>geradeaus weiter auf Äussere Zwickauer Strasse</desc>
</rtept>
<rtept lat="50.754700000" lon="12.626850000">
- <name>in Lichtenstein/Sa. geradeaus weiter auf Innere Zwickauer Strasse</name>
- <cmt>Innere Zwickauer Strasse</cmt>
- <desc>Innere Zwickauer Strasse</desc>
+ <name>Innere Zwickauer Strasse</name>
+ <desc>in Lichtenstein/Sa. geradeaus weiter auf Innere Zwickauer Strasse</desc>
</rtept>
<rtept lat="50.756270000" lon="12.630730000">
- <name>bei D 09350 Lichtenstein </name>
- <cmt>S255\Innere Zwickauer Strasse</cmt>
- <desc>S255\Innere Zwickauer Strasse</desc>
+ <name>S255\Innere Zwickauer Strasse</name>
+ <cmt>bei D 09350 Lichtenstein</cmt>
+ <desc>bei D 09350 Lichtenstein</desc>
</rtept>
<rtept lat="50.756540000" lon="12.631750000">
- <name>rechts abbiegen auf Hartensteiner Strasse (S255)</name>
- <cmt>Hartensteiner Strasse (S255)</cmt>
- <desc>Hartensteiner Strasse (S255)</desc>
+ <name>Hartensteiner Strasse (S255)</name>
+ <desc>rechts abbiegen auf Hartensteiner Strasse (S255)</desc>
</rtept>
<rtept lat="50.755020000" lon="12.633250000">
- <name>rechts abbiegen auf Hartensteiner Strasse (S255)</name>
- <cmt>Hartensteiner Strasse (S255)</cmt>
- <desc>Hartensteiner Strasse (S255)</desc>
+ <name>Hartensteiner Strasse (S255)</name>
+ <desc>rechts abbiegen auf Hartensteiner Strasse (S255)</desc>
</rtept>
<rtept lat="50.750240000" lon="12.635920000">
- <name>rechts abbiegen auf Hartensteiner Strasse (S255)</name>
- <cmt>Hartensteiner Strasse (S255)</cmt>
- <desc>Hartensteiner Strasse (S255)</desc>
+ <name>Hartensteiner Strasse (S255)</name>
+ <desc>rechts abbiegen auf Hartensteiner Strasse (S255)</desc>
</rtept>
<rtept lat="50.749980000" lon="12.635800000">
- <name>halb links halten auf Hartensteiner Strasse (S255)</name>
- <cmt>Hartensteiner Strasse (S255)</cmt>
- <desc>Hartensteiner Strasse (S255)</desc>
+ <name>Hartensteiner Strasse (S255)</name>
+ <desc>halb links halten auf Hartensteiner Strasse (S255)</desc>
</rtept>
<rtept lat="50.659650000" lon="12.696920000">
- <name>geradeaus weiter auf S283</name>
- <cmt>S283</cmt>
- <desc>S283</desc>
+ <name>S283</name>
+ <desc>geradeaus weiter auf S283</desc>
</rtept>
<rtept lat="50.656440000" lon="12.694480000">
- <name>rechts abbiegen auf S283</name>
- <cmt>S283</cmt>
- <desc>S283</desc>
+ <name>S283</name>
+ <desc>rechts abbiegen auf S283</desc>
</rtept>
<rtept lat="50.663330000" lon="12.674480000">
- <name>in Hartenstein links abbiegen auf August-Bebel-Strasse (S283)</name>
- <cmt>August-Bebel-Strasse (S283)</cmt>
- <desc>August-Bebel-Strasse (S283)</desc>
+ <name>August-Bebel-Strasse (S283)</name>
+ <desc>in Hartenstein links abbiegen auf August-Bebel-Strasse (S283)</desc>
</rtept>
<rtept lat="50.661550000" lon="12.671280000">
- <name>geradeaus weiter auf Bahnhofstrasse (S284)</name>
- <cmt>Bahnhofstrasse (S284)</cmt>
- <desc>Bahnhofstrasse (S284)</desc>
+ <name>Bahnhofstrasse (S284)</name>
+ <desc>geradeaus weiter auf Bahnhofstrasse (S284)</desc>
</rtept>
<rtept lat="50.661500000" lon="12.671250000">
- <name>bei D 08118 Hartenstein </name>
- <cmt>S284\Bahnhofstrasse</cmt>
- <desc>S284\Bahnhofstrasse</desc>
+ <name>S284\Bahnhofstrasse</name>
+ <cmt>bei D 08118 Hartenstein</cmt>
+ <desc>bei D 08118 Hartenstein</desc>
</rtept>
<rtept lat="50.652280000" lon="12.663720000">
- <name>rechts abbiegen</name>
+ <name>RPT156</name>
+ <desc>rechts abbiegen</desc>
</rtept>
<rtept lat="50.651940000" lon="12.661090000">
- <name>links abbiegen</name>
+ <name>RPT157</name>
+ <desc>links abbiegen</desc>
</rtept>
<rtept lat="50.650900000" lon="12.661430000">
- <name>in Stein rechts abbiegen auf Langenbacher Strasse (K9309)</name>
- <cmt>Langenbacher Strasse (K9309)</cmt>
- <desc>Langenbacher Strasse (K9309)</desc>
+ <name>Langenbacher Strasse (K9309)</name>
+ <desc>in Stein rechts abbiegen auf Langenbacher Strasse (K9309)</desc>
</rtept>
<rtept lat="50.650240000" lon="12.660000000">
- <name>halb links halten auf Wildbacher Strasse (K9309)</name>
- <cmt>Wildbacher Strasse (K9309)</cmt>
- <desc>Wildbacher Strasse (K9309)</desc>
+ <name>Wildbacher Strasse (K9309)</name>
+ <desc>halb links halten auf Wildbacher Strasse (K9309)</desc>
</rtept>
<rtept lat="50.639360000" lon="12.651730000">
- <name>geradeaus weiter</name>
+ <name>RPT160</name>
+ <desc>geradeaus weiter</desc>
</rtept>
<rtept lat="50.638200000" lon="12.653400000">
- <name>halb rechts halten auf Hartensteiner Strasse (K9109)</name>
- <cmt>Hartensteiner Strasse (K9109)</cmt>
- <desc>Hartensteiner Strasse (K9109)</desc>
+ <name>Hartensteiner Strasse (K9109)</name>
+ <desc>halb rechts halten auf Hartensteiner Strasse (K9109)</desc>
</rtept>
<rtept lat="50.628530000" lon="12.645540000">
- <name>in Wildbach rechts abbiegen auf Hartensteiner Strasse (K9109)</name>
- <cmt>Hartensteiner Strasse (K9109)</cmt>
- <desc>Hartensteiner Strasse (K9109)</desc>
+ <name>Hartensteiner Strasse (K9109)</name>
+ <desc>in Wildbach rechts abbiegen auf Hartensteiner Strasse (K9109)</desc>
</rtept>
<rtept lat="50.613360000" lon="12.641420000">
- <name>links abbiegen auf Silberbachstrasse</name>
- <cmt>Silberbachstrasse</cmt>
- <desc>Silberbachstrasse</desc>
+ <name>Silberbachstrasse</name>
+ <desc>links abbiegen auf Silberbachstrasse</desc>
</rtept>
<rtept lat="50.610720000" lon="12.646900000">
- <name>geradeaus weiter auf Zechenplatz </name>
- <cmt>Zechenplatz </cmt>
- <desc>Zechenplatz </desc>
+ <name>Zechenplatz</name>
+ <desc>geradeaus weiter auf Zechenplatz</desc>
</rtept>
<rtept lat="50.601390000" lon="12.655020000">
- <name>in Schlema geradeaus weiter auf Schneeberger Weg</name>
- <cmt>Schneeberger Weg</cmt>
- <desc>Schneeberger Weg</desc>
+ <name>Schneeberger Weg</name>
+ <desc>in Schlema geradeaus weiter auf Schneeberger Weg</desc>
</rtept>
<rtept lat="50.601140000" lon="12.654880000">
- <name>links abbiegen auf Zechenplatz</name>
- <cmt>Zechenplatz</cmt>
- <desc>Zechenplatz</desc>
+ <name>Zechenplatz</name>
+ <desc>links abbiegen auf Zechenplatz</desc>
</rtept>
<rtept lat="50.600740000" lon="12.655420000">
- <name>rechts abbiegen auf Friedensstrasse</name>
- <cmt>Friedensstrasse</cmt>
- <desc>Friedensstrasse</desc>
+ <name>Friedensstrasse</name>
+ <desc>rechts abbiegen auf Friedensstrasse</desc>
</rtept>
<rtept lat="50.598610000" lon="12.650890000">
- <name>rechts abbiegen auf B169 Kobaltstrasse/Auer Strasse</name>
- <cmt>B169 Kobaltstrasse/Auer Strasse</cmt>
- <desc>B169 Kobaltstrasse/Auer Strasse</desc>
+ <name>B169 Kobaltstrasse/Auer Strasse</name>
+ <desc>rechts abbiegen auf B169 Kobaltstrasse/Auer Strasse</desc>
</rtept>
<rtept lat="50.589690000" lon="12.643190000">
- <name>in Schneeberg rechts abbiegen auf B169 Kobaltstrasse</name>
- <cmt>B169 Kobaltstrasse</cmt>
- <desc>B169 Kobaltstrasse</desc>
+ <name>B169 Kobaltstrasse</name>
+ <desc>in Schneeberg rechts abbiegen auf B169 Kobaltstrasse</desc>
</rtept>
<rtept lat="50.546590000" lon="12.576330000">
- <name>in Hundshübel halb rechts halten auf B169 Hauptstrasse</name>
- <cmt>B169 Hauptstrasse</cmt>
- <desc>B169 Hauptstrasse</desc>
+ <name>B169 Hauptstrasse</name>
+ <desc>in Hundshübel halb rechts halten auf B169 Hauptstrasse</desc>
</rtept>
<rtept lat="50.533910000" lon="12.527210000">
- <name>in Stützengrün rechts abbiegen auf B169 Auerbacher Strasse</name>
- <cmt>B169 Auerbacher Strasse</cmt>
- <desc>B169 Auerbacher Strasse</desc>
+ <name>B169 Auerbacher Strasse</name>
+ <desc>in Stützengrün rechts abbiegen auf B169 Auerbacher Strasse</desc>
</rtept>
<rtept lat="50.531180000" lon="12.405660000">
- <name>in Rodewisch rechts abbiegen auf B169 Postplatz</name>
- <cmt>B169 Postplatz</cmt>
- <desc>B169 Postplatz</desc>
+ <name>B169 Postplatz</name>
+ <desc>in Rodewisch rechts abbiegen auf B169 Postplatz</desc>
</rtept>
<rtept lat="50.532110000" lon="12.403920000">
- <name>links abbiegen auf B169 Postplatz</name>
- <cmt>B169 Postplatz</cmt>
- <desc>B169 Postplatz</desc>
+ <name>B169 Postplatz</name>
+ <desc>links abbiegen auf B169 Postplatz</desc>
</rtept>
<rtept lat="50.528900000" lon="12.401610000">
- <name>bei D 08228 Rodewisch </name>
- <cmt>B169\Lindenstrasse</cmt>
- <desc>B169\Lindenstrasse</desc>
+ <name>B169\Lindenstrasse</name>
+ <cmt>bei D 08228 Rodewisch</cmt>
+ <desc>bei D 08228 Rodewisch</desc>
</rtept>
<rtept lat="50.508270000" lon="12.397900000">
- <name>bei D 08209 Auerbach </name>
- <cmt>B169\Göltzschtalstrasse</cmt>
- <desc>B169\Göltzschtalstrasse</desc>
+ <name>B169\Göltzschtalstrasse</name>
+ <cmt>bei D 08209 Auerbach</cmt>
+ <desc>bei D 08209 Auerbach</desc>
</rtept>
<rtept lat="50.502860000" lon="12.397930000">
- <name>in Auerbach/Vogtl. links abbiegen auf B169 Göltzschtalstrasse</name>
- <cmt>B169 Göltzschtalstrasse</cmt>
- <desc>B169 Göltzschtalstrasse</desc>
+ <name>B169 Göltzschtalstrasse</name>
+ <desc>in Auerbach/Vogtl. links abbiegen auf B169 Göltzschtalstrasse</desc>
</rtept>
<rtept lat="50.489000000" lon="12.393790000">
- <name>in Ellefeld links abbiegen auf Neuberg</name>
- <cmt>Neuberg</cmt>
- <desc>Neuberg</desc>
+ <name>Neuberg</name>
+ <desc>in Ellefeld links abbiegen auf Neuberg</desc>
</rtept>
<rtept lat="50.489800000" lon="12.396290000">
- <name>rechts abbiegen auf Neuberg</name>
- <cmt>Neuberg</cmt>
- <desc>Neuberg</desc>
+ <name>Neuberg</name>
+ <desc>rechts abbiegen auf Neuberg</desc>
</rtept>
<rtept lat="50.493660000" lon="12.405330000">
- <name>rechts abbiegen auf Beerheider Strasse (K7833)</name>
- <cmt>Beerheider Strasse (K7833)</cmt>
- <desc>Beerheider Strasse (K7833)</desc>
+ <name>Beerheider Strasse (K7833)</name>
+ <desc>rechts abbiegen auf Beerheider Strasse (K7833)</desc>
</rtept>
<rtept lat="50.487180000" lon="12.421360000">
- <name>rechts abbiegen auf Beerheider Strasse (K7833)</name>
- <cmt>Beerheider Strasse (K7833)</cmt>
- <desc>Beerheider Strasse (K7833)</desc>
+ <name>Beerheider Strasse (K7833)</name>
+ <desc>rechts abbiegen auf Beerheider Strasse (K7833)</desc>
</rtept>
<rtept lat="50.479200000" lon="12.424870000">
- <name>bei D 08209 Auerbach/Beerheide </name>
- <cmt>K7833\Rempesgrüner Strasse</cmt>
- <desc>K7833\Rempesgrüner Strasse</desc>
+ <name>K7833\Rempesgrüner Strasse</name>
+ <cmt>bei D 08209 Auerbach/Beerheide</cmt>
+ <desc>bei D 08209 Auerbach/Beerheide</desc>
</rtept>
<rtept lat="50.478470000" lon="12.425460000">
- <name>in Beerheide links abbiegen auf Strasse des Friedens (K7826)</name>
- <cmt>Strasse des Friedens (K7826)</cmt>
- <desc>Strasse des Friedens (K7826)</desc>
+ <name>Strasse des Friedens (K7826)</name>
+ <desc>in Beerheide links abbiegen auf Strasse des Friedens (K7826)</desc>
</rtept>
<rtept lat="50.485670000" lon="12.433050000">
- <name>in Hohengrün rechts abbiegen auf Klingenthaler Strasse (S300)</name>
- <cmt>Klingenthaler Strasse (S300)</cmt>
- <desc>Klingenthaler Strasse (S300)</desc>
+ <name>Klingenthaler Strasse (S300)</name>
+ <desc>in Hohengrün rechts abbiegen auf Klingenthaler Strasse (S300)</desc>
</rtept>
<rtept lat="50.481160000" lon="12.433910000">
- <name>links abbiegen</name>
+ <name>RPT184</name>
+ <desc>links abbiegen</desc>
</rtept>
<rtept lat="50.479840000" lon="12.435860000">
- <name>links abbiegen auf Schallerbachstrasse (K7822)</name>
- <cmt>Schallerbachstrasse (K7822)</cmt>
- <desc>Schallerbachstrasse (K7822)</desc>
+ <name>Schallerbachstrasse (K7822)</name>
+ <desc>links abbiegen auf Schallerbachstrasse (K7822)</desc>
</rtept>
<rtept lat="50.500210000" lon="12.435830000">
- <name>in Brunn rechts abbiegen auf Schönheider Strasse (S278)</name>
- <cmt>Schönheider Strasse (S278)</cmt>
- <desc>Schönheider Strasse (S278)</desc>
+ <name>Schönheider Strasse (S278)</name>
+ <desc>in Brunn rechts abbiegen auf Schönheider Strasse (S278)</desc>
</rtept>
<rtept lat="50.505090000" lon="12.522040000">
- <name>in Schönheide halb rechts halten auf Hauptstrasse (S278)</name>
- <cmt>Hauptstrasse (S278)</cmt>
- <desc>Hauptstrasse (S278)</desc>
+ <name>Hauptstrasse (S278)</name>
+ <desc>in Schönheide halb rechts halten auf Hauptstrasse (S278)</desc>
</rtept>
<rtept lat="50.503030000" lon="12.533360000">
- <name>D 08304 Schönheide </name>
- <cmt>S278\Hauptstrasse</cmt>
- <desc>S278\Hauptstrasse</desc>
+ <name>S278\Hauptstrasse</name>
+ <cmt>D 08304 Schönheide</cmt>
+ <desc>D 08304 Schönheide</desc>
</rtept>
<rtept lat="50.504610000" lon="12.539940000">
- <name>halb links halten auf Hauptstrasse (S278)</name>
- <cmt>Hauptstrasse (S278)</cmt>
- <desc>Hauptstrasse (S278)</desc>
+ <name>Hauptstrasse (S278)</name>
+ <desc>halb links halten auf Hauptstrasse (S278)</desc>
</rtept>
<rtept lat="50.505590000" lon="12.541190000">
- <name>geradeaus weiter auf Eibenstocker Strasse (S277)</name>
- <cmt>Eibenstocker Strasse (S277)</cmt>
- <desc>Eibenstocker Strasse (S277)</desc>
+ <name>Eibenstocker Strasse (S277)</name>
+ <desc>geradeaus weiter auf Eibenstocker Strasse (S277)</desc>
</rtept>
<rtept lat="50.504570000" lon="12.557440000">
- <name>rechts abbiegen auf B283 Muldenstrasse</name>
- <cmt>B283 Muldenstrasse</cmt>
- <desc>B283 Muldenstrasse</desc>
+ <name>B283 Muldenstrasse</name>
+ <desc>rechts abbiegen auf B283 Muldenstrasse</desc>
</rtept>
<rtept lat="50.467820000" lon="12.495110000">
- <name>halb rechts halten auf Am Filz</name>
- <cmt>Am Filz</cmt>
- <desc>Am Filz</desc>
+ <name>Am Filz</name>
+ <desc>halb rechts halten auf Am Filz</desc>
</rtept>
<rtept lat="50.462790000" lon="12.490730000">
- <name>geradeaus weiter auf B283 Schönheider Strasse</name>
- <cmt>B283 Schönheider Strasse</cmt>
- <desc>B283 Schönheider Strasse</desc>
+ <name>B283 Schönheider Strasse</name>
+ <desc>geradeaus weiter auf B283 Schönheider Strasse</desc>
</rtept>
<rtept lat="50.458250000" lon="12.488440000">
- <name>bei D 08262 Tannenbergsthal/Jägersgrün </name>
- <cmt>B283\Schönheider Strasse</cmt>
- <desc>B283\Schönheider Strasse</desc>
+ <name>B283\Schönheider Strasse</name>
+ <cmt>bei D 08262 Tannenbergsthal/Jägersgrün</cmt>
+ <desc>bei D 08262 Tannenbergsthal/Jägersgrün</desc>
</rtept>
<rtept lat="50.434530000" lon="12.461120000">
- <name>bei D 08262 Tannenbergsthal </name>
- <cmt>B283\Klingenthaler Strasse</cmt>
- <desc>B283\Klingenthaler Strasse</desc>
+ <name>B283\Klingenthaler Strasse</name>
+ <cmt>bei D 08262 Tannenbergsthal</cmt>
+ <desc>bei D 08262 Tannenbergsthal</desc>
</rtept>
<rtept lat="50.385760000" lon="12.481900000">
- <name>in Klingenthal/Sa. links abbiegen auf B283 Auerbacher Strasse</name>
- <cmt>B283 Auerbacher Strasse</cmt>
- <desc>B283 Auerbacher Strasse</desc>
+ <name>B283 Auerbacher Strasse</name>
+ <desc>in Klingenthal/Sa. links abbiegen auf B283 Auerbacher Strasse</desc>
</rtept>
<rtept lat="50.375370000" lon="12.476030000">
- <name>rechts abbiegen auf Mittelbergstrasse</name>
- <cmt>Mittelbergstrasse</cmt>
- <desc>Mittelbergstrasse</desc>
+ <name>Mittelbergstrasse</name>
+ <desc>rechts abbiegen auf Mittelbergstrasse</desc>
</rtept>
<rtept lat="50.372770000" lon="12.469460000">
- <name>rechts abbiegen auf Falkensteiner Strasse (S304)</name>
- <cmt>Falkensteiner Strasse (S304)</cmt>
- <desc>Falkensteiner Strasse (S304)</desc>
+ <name>Falkensteiner Strasse (S304)</name>
+ <desc>rechts abbiegen auf Falkensteiner Strasse (S304)</desc>
</rtept>
<rtept lat="50.384530000" lon="12.456220000">
- <name>bei D 08248 Klingenthal/Brunndöbra </name>
- <cmt>S304\Falkensteiner Strasse</cmt>
- <desc>S304\Falkensteiner Strasse</desc>
+ <name>S304\Falkensteiner Strasse</name>
+ <cmt>bei D 08248 Klingenthal/Brunndöbra</cmt>
+ <desc>bei D 08248 Klingenthal/Brunndöbra</desc>
</rtept>
<rtept lat="50.419640000" lon="12.399730000">
- <name>bei D 08223 Grünbach-Muldenberg </name>
- <cmt>S302/S304</cmt>
- <desc>S302/S304</desc>
+ <name>S302/S304</name>
+ <cmt>bei D 08223 Grünbach-Muldenberg</cmt>
+ <desc>bei D 08223 Grünbach-Muldenberg</desc>
</rtept>
<rtept lat="50.423220000" lon="12.397740000">
- <name>halb links halten auf S304</name>
- <cmt>S304</cmt>
- <desc>S304</desc>
+ <name>S304</name>
+ <desc>halb links halten auf S304</desc>
</rtept>
<rtept lat="50.446180000" lon="12.364590000">
- <name>bei D 08223 Grünbach </name>
- <cmt>S304\Bahnhofstrasse</cmt>
- <desc>S304\Bahnhofstrasse</desc>
+ <name>S304\Bahnhofstrasse</name>
+ <cmt>bei D 08223 Grünbach</cmt>
+ <desc>bei D 08223 Grünbach</desc>
</rtept>
<rtept lat="50.449330000" lon="12.362170000">
- <name>in Grünbach links abbiegen auf Neustädter Strasse (K7835)</name>
- <cmt>Neustädter Strasse (K7835)</cmt>
- <desc>Neustädter Strasse (K7835)</desc>
+ <name>Neustädter Strasse (K7835)</name>
+ <desc>in Grünbach links abbiegen auf Neustädter Strasse (K7835)</desc>
</rtept>
<rtept lat="50.449520000" lon="12.361460000">
- <name>links abbiegen auf Siehdichfürer Strasse (K7835)</name>
- <cmt>Siehdichfürer Strasse (K7835)</cmt>
- <desc>Siehdichfürer Strasse (K7835)</desc>
+ <name>Siehdichfürer Strasse (K7835)</name>
+ <desc>links abbiegen auf Siehdichfürer Strasse (K7835)</desc>
</rtept>
<rtept lat="50.442120000" lon="12.331960000">
- <name>in Neudorf links abbiegen auf Schönecker Strasse (S301)</name>
- <cmt>Schönecker Strasse (S301)</cmt>
- <desc>Schönecker Strasse (S301)</desc>
+ <name>Schönecker Strasse (S301)</name>
+ <desc>in Neudorf links abbiegen auf Schönecker Strasse (S301)</desc>
</rtept>
<rtept lat="50.438410000" lon="12.333160000">
- <name>links abbiegen auf Schönecker Strasse (S301)</name>
- <cmt>Schönecker Strasse (S301)</cmt>
- <desc>Schönecker Strasse (S301)</desc>
+ <name>Schönecker Strasse (S301)</name>
+ <desc>links abbiegen auf Schönecker Strasse (S301)</desc>
</rtept>
<rtept lat="50.400420000" lon="12.337200000">
- <name>bei D 08261 Schöneck </name>
- <cmt>S301</cmt>
- <desc>S301</desc>
+ <name>S301</name>
+ <cmt>bei D 08261 Schöneck</cmt>
+ <desc>bei D 08261 Schöneck</desc>
</rtept>
<rtept lat="50.396910000" lon="12.337530000">
- <name>in Schöneck/Vogtl. rechts abbiegen auf Falkensteiner Strasse (S301/S302)</name>
- <cmt>Falkensteiner Strasse (S301/S302)</cmt>
- <desc>Falkensteiner Strasse (S301/S302)</desc>
+ <name>Falkensteiner Strasse (S301/S302)</name>
+ <desc>in Schöneck/Vogtl. rechts abbiegen auf Falkensteiner Strasse (S301/S302)</desc>
</rtept>
<rtept lat="50.396810000" lon="12.337350000">
- <name>links abbiegen auf Albertplatz/Falkensteiner Strasse (S301/S302)</name>
- <cmt>Albertplatz/Falkensteiner Strasse (S301/S302)</cmt>
- <desc>Albertplatz/Falkensteiner Strasse (S301/S302)</desc>
+ <name>Albertplatz/Falkensteiner Strasse (S301/S302)</name>
+ <desc>links abbiegen auf Albertplatz/Falkensteiner Strasse (S301/S302)</desc>
</rtept>
<rtept lat="50.393440000" lon="12.343620000">
- <name>rechts abbiegen auf Klingenthaler Strasse (S301)</name>
- <cmt>Klingenthaler Strasse (S301)</cmt>
- <desc>Klingenthaler Strasse (S301)</desc>
+ <name>Klingenthaler Strasse (S301)</name>
+ <desc>rechts abbiegen auf Klingenthaler Strasse (S301)</desc>
</rtept>
<rtept lat="50.389690000" lon="12.349500000">
- <name>einfahren in Kreisverkehr </name>
+ <name>RPT211</name>
+ <desc>einfahren in Kreisverkehr</desc>
</rtept>
<rtept lat="50.389490000" lon="12.349660000">
- <name>2. Möglichkeit aus Kreisverkehr ausfahren auf Kärnerstrasse (S305)</name>
- <cmt>Kärnerstrasse (S305)</cmt>
- <desc>Kärnerstrasse (S305)</desc>
+ <name>Kärnerstrasse (S305)</name>
+ <desc>2. Möglichkeit aus Kreisverkehr ausfahren auf Kärnerstrasse (S305)</desc>
</rtept>
<rtept lat="50.343070000" lon="12.370580000">
- <name>rechts abbiegen auf B283</name>
- <cmt>B283</cmt>
- <desc>B283</desc>
+ <name>B283</name>
+ <desc>rechts abbiegen auf B283</desc>
</rtept>
<rtept lat="50.328660000" lon="12.351510000">
- <name>bei D 08258 Markneukirchen/Friebus </name>
- <cmt>B283</cmt>
- <desc>B283</desc>
+ <name>B283</name>
+ <cmt>bei D 08258 Markneukirchen/Friebus</cmt>
+ <desc>bei D 08258 Markneukirchen/Friebus</desc>
</rtept>
<rtept lat="50.309690000" lon="12.307080000">
- <name>rechts abbiegen auf B283</name>
- <cmt>B283</cmt>
- <desc>B283</desc>
+ <name>B283</name>
+ <desc>rechts abbiegen auf B283</desc>
</rtept>
<rtept lat="50.308960000" lon="12.305950000">
- <name>in Siebenbrunn geradeaus weiter auf Am Bahnhof </name>
- <cmt>Am Bahnhof </cmt>
- <desc>Am Bahnhof </desc>
+ <name>Am Bahnhof</name>
+ <desc>in Siebenbrunn geradeaus weiter auf Am Bahnhof</desc>
</rtept>
<rtept lat="50.307980000" lon="12.302170000">
- <name>links abbiegen auf Strässler Berg</name>
- <cmt>Strässler Berg</cmt>
- <desc>Strässler Berg</desc>
+ <name>Strässler Berg</name>
+ <desc>links abbiegen auf Strässler Berg</desc>
</rtept>
<rtept lat="50.304230000" lon="12.298880000">
- <name>geradeaus weiter auf Siebenbrunner Strasse</name>
- <cmt>Siebenbrunner Strasse</cmt>
- <desc>Siebenbrunner Strasse</desc>
+ <name>Siebenbrunner Strasse</name>
+ <desc>geradeaus weiter auf Siebenbrunner Strasse</desc>
</rtept>
<rtept lat="50.298960000" lon="12.297280000">
- <name>in Strässel links abbiegen auf Böhmische Strasse (K7846)</name>
- <cmt>Böhmische Strasse (K7846)</cmt>
- <desc>Böhmische Strasse (K7846)</desc>
+ <name>Böhmische Strasse (K7846)</name>
+ <desc>in Strässel links abbiegen auf Böhmische Strasse (K7846)</desc>
</rtept>
<rtept lat="50.284250000" lon="12.313970000">
- <name>in Schönlind rechts abbiegen auf Markneukirchner Strasse (K7843)</name>
- <cmt>Markneukirchner Strasse (K7843)</cmt>
- <desc>Markneukirchner Strasse (K7843)</desc>
+ <name>Markneukirchner Strasse (K7843)</name>
+ <desc>in Schönlind rechts abbiegen auf Markneukirchner Strasse (K7843)</desc>
</rtept>
<rtept lat="50.284020000" lon="12.314200000">
- <name>links abbiegen auf Landwüster Strasse (K7846)</name>
- <cmt>Landwüster Strasse (K7846)</cmt>
- <desc>Landwüster Strasse (K7846)</desc>
+ <name>Landwüster Strasse (K7846)</name>
+ <desc>links abbiegen auf Landwüster Strasse (K7846)</desc>
</rtept>
<rtept lat="50.271330000" lon="12.328640000">
- <name>in Landwüst halb rechts halten auf Schönlinder Strasse (K7844)</name>
- <cmt>Schönlinder Strasse (K7844)</cmt>
- <desc>Schönlinder Strasse (K7844)</desc>
+ <name>Schönlinder Strasse (K7844)</name>
+ <desc>in Landwüst halb rechts halten auf Schönlinder Strasse (K7844)</desc>
</rtept>
<rtept lat="50.271090000" lon="12.328480000">
- <name>rechts abbiegen auf Rauner Strasse (K7844)</name>
- <cmt>Rauner Strasse (K7844)</cmt>
- <desc>Rauner Strasse (K7844)</desc>
+ <name>Rauner Strasse (K7844)</name>
+ <desc>rechts abbiegen auf Rauner Strasse (K7844)</desc>
</rtept>
<rtept lat="50.271540000" lon="12.321940000">
- <name>bei D 08258 Landwüst </name>
- <cmt>K7844\Rauner Strasse</cmt>
- <desc>K7844\Rauner Strasse</desc>
+ <name>K7844\Rauner Strasse</name>
+ <cmt>bei D 08258 Landwüst</cmt>
+ <desc>bei D 08258 Landwüst</desc>
</rtept>
<rtept lat="50.268830000" lon="12.299750000">
- <name>geradeaus weiter auf B92/E49</name>
- <cmt>B92/E49</cmt>
- <desc>B92/E49</desc>
+ <name>B92/E49</name>
+ <desc>geradeaus weiter auf B92/E49</desc>
</rtept>
<rtept lat="50.304990000" lon="12.252880000">
- <name>bei D 08626 Adorf/Jugelsburg </name>
- <cmt>B92/E49</cmt>
- <desc>B92/E49</desc>
+ <name>B92/E49</name>
+ <cmt>bei D 08626 Adorf/Jugelsburg</cmt>
+ <desc>bei D 08626 Adorf/Jugelsburg</desc>
</rtept>
<rtept lat="50.324370000" lon="12.257480000">
- <name>bei D 08626 Adorf </name>
- <cmt>B92/E49\Oelsnitzer Strasse</cmt>
- <desc>B92/E49\Oelsnitzer Strasse</desc>
+ <name>B92/E49\Oelsnitzer Strasse</name>
+ <cmt>bei D 08626 Adorf</cmt>
+ <desc>bei D 08626 Adorf</desc>
</rtept>
<rtept lat="50.366630000" lon="12.216240000">
- <name>halb links halten</name>
+ <name>RPT228</name>
+ <desc>halb links halten</desc>
</rtept>
<rtept lat="50.367860000" lon="12.214720000">
- <name>geradeaus weiter auf B92/E49 Adorfer Strasse</name>
- <cmt>B92/E49 Adorfer Strasse</cmt>
- <desc>B92/E49 Adorfer Strasse</desc>
+ <name>B92/E49 Adorfer Strasse</name>
+ <desc>geradeaus weiter auf B92/E49 Adorfer Strasse</desc>
</rtept>
<rtept lat="50.371970000" lon="12.208900000">
- <name>halb links halten</name>
+ <name>RPT230</name>
+ <desc>halb links halten</desc>
</rtept>
<rtept lat="50.372620000" lon="12.207490000">
- <name>rechts abbiegen</name>
+ <name>RPT231</name>
+ <desc>rechts abbiegen</desc>
</rtept>
<rtept lat="50.374280000" lon="12.206760000">
- <name>links abbiegen auf B92/E49 Adorfer Strasse</name>
- <cmt>B92/E49 Adorfer Strasse</cmt>
- <desc>B92/E49 Adorfer Strasse</desc>
+ <name>B92/E49 Adorfer Strasse</name>
+ <desc>links abbiegen auf B92/E49 Adorfer Strasse</desc>
</rtept>
<rtept lat="50.416260000" lon="12.173500000">
- <name>in Oelsnitz links abbiegen auf Rosa-Luxemburg-Strasse (S311)</name>
- <cmt>Rosa-Luxemburg-Strasse (S311)</cmt>
- <desc>Rosa-Luxemburg-Strasse (S311)</desc>
+ <name>Rosa-Luxemburg-Strasse (S311)</name>
+ <desc>in Oelsnitz links abbiegen auf Rosa-Luxemburg-Strasse (S311)</desc>
</rtept>
<rtept lat="50.416790000" lon="12.172210000">
- <name>links abbiegen auf Grabenstrasse (S311)</name>
- <cmt>Grabenstrasse (S311)</cmt>
- <desc>Grabenstrasse (S311)</desc>
+ <name>Grabenstrasse (S311)</name>
+ <desc>links abbiegen auf Grabenstrasse (S311)</desc>
</rtept>
<rtept lat="50.415480000" lon="12.169330000">
- <name>links abbiegen auf Kirchplatz (S311)</name>
- <cmt>Kirchplatz (S311)</cmt>
- <desc>Kirchplatz (S311)</desc>
+ <name>Kirchplatz (S311)</name>
+ <desc>links abbiegen auf Kirchplatz (S311)</desc>
</rtept>
<rtept lat="50.414790000" lon="12.168470000">
- <name>rechts abbiegen auf Heppeplatz (S311)</name>
- <cmt>Heppeplatz (S311)</cmt>
- <desc>Heppeplatz (S311)</desc>
+ <name>Heppeplatz (S311)</name>
+ <desc>rechts abbiegen auf Heppeplatz (S311)</desc>
</rtept>
<rtept lat="50.415410000" lon="12.167330000">
- <name>links abbiegen auf Bahnhofstrasse (S307)</name>
- <cmt>Bahnhofstrasse (S307)</cmt>
- <desc>Bahnhofstrasse (S307)</desc>
+ <name>Bahnhofstrasse (S307)</name>
+ <desc>links abbiegen auf Bahnhofstrasse (S307)</desc>
</rtept>
<rtept lat="50.412260000" lon="12.161490000">
- <name>rechts abbiegen auf Talsperrenstrasse (S310)</name>
- <cmt>Talsperrenstrasse (S310)</cmt>
- <desc>Talsperrenstrasse (S310)</desc>
+ <name>Talsperrenstrasse (S310)</name>
+ <desc>rechts abbiegen auf Talsperrenstrasse (S310)</desc>
</rtept>
<rtept lat="50.413130000" lon="12.149220000">
- <name>rechts abbiegen auf Talsperrenstrasse (K7854)</name>
- <cmt>Talsperrenstrasse (K7854)</cmt>
- <desc>Talsperrenstrasse (K7854)</desc>
+ <name>Talsperrenstrasse (K7854)</name>
+ <desc>rechts abbiegen auf Talsperrenstrasse (K7854)</desc>
</rtept>
<rtept lat="50.420020000" lon="12.103010000">
- <name>bei D 08606 Planschwitz </name>
- <cmt>K7854\Oelsnitzer Strasse</cmt>
- <desc>K7854\Oelsnitzer Strasse</desc>
+ <name>K7854\Oelsnitzer Strasse</name>
+ <cmt>bei D 08606 Planschwitz</cmt>
+ <desc>bei D 08606 Planschwitz</desc>
</rtept>
<rtept lat="50.420170000" lon="12.102340000">
- <name>in Planschwitz links abbiegen auf Talsperrenstrasse (K7854)</name>
- <cmt>Talsperrenstrasse (K7854)</cmt>
- <desc>Talsperrenstrasse (K7854)</desc>
+ <name>Talsperrenstrasse (K7854)</name>
+ <desc>in Planschwitz links abbiegen auf Talsperrenstrasse (K7854)</desc>
</rtept>
<rtept lat="50.418860000" lon="12.098760000">
- <name>links abbiegen</name>
+ <name>RPT242</name>
+ <desc>links abbiegen</desc>
</rtept>
<rtept lat="50.399460000" lon="12.095840000">
- <name>in Bösenbrunn rechts abbiegen auf S310</name>
- <cmt>S310</cmt>
- <desc>S310</desc>
+ <name>S310</name>
+ <desc>in Bösenbrunn rechts abbiegen auf S310</desc>
</rtept>
<rtept lat="50.402680000" lon="12.091080000">
- <name>links abbiegen auf S310</name>
- <cmt>S310</cmt>
- <desc>S310</desc>
+ <name>S310</name>
+ <desc>links abbiegen auf S310</desc>
</rtept>
<rtept lat="50.402190000" lon="12.064050000">
- <name>in Dröda rechts abbiegen auf Hauptstrasse/Bobenneukirchener Strasse (S310)</name>
- <cmt>Hauptstrasse/Bobenneukirchener Strasse (S310)</cmt>
- <desc>Hauptstrasse/Bobenneukirchener Strasse (S310)</desc>
+ <name>Hauptstrasse/Bobenneukirchener Strasse (S310)</name>
+ <desc>in Dröda rechts abbiegen auf Hauptstrasse/Bobenneukirchener Strasse (S310)</desc>
</rtept>
<rtept lat="50.402690000" lon="12.063550000">
- <name>halb rechts halten auf Bobenneukirchener Strasse (S310)</name>
- <cmt>Bobenneukirchener Strasse (S310)</cmt>
- <desc>Bobenneukirchener Strasse (S310)</desc>
+ <name>Bobenneukirchener Strasse (S310)</name>
+ <desc>halb rechts halten auf Bobenneukirchener Strasse (S310)</desc>
</rtept>
<rtept lat="50.404490000" lon="12.063910000">
- <name>bei D 08538 Burgstein/Dröda </name>
- <cmt>S310\Bobenneukirchener Strasse</cmt>
- <desc>S310\Bobenneukirchener Strasse</desc>
+ <name>S310\Bobenneukirchener Strasse</name>
+ <cmt>bei D 08538 Burgstein/Dröda</cmt>
+ <desc>bei D 08538 Burgstein/Dröda</desc>
</rtept>
<rtept lat="50.424620000" lon="12.066970000">
- <name>in Pirk rechts abbiegen auf B173 Hofer Strasse</name>
- <cmt>B173 Hofer Strasse</cmt>
- <desc>B173 Hofer Strasse</desc>
+ <name>B173 Hofer Strasse</name>
+ <desc>in Pirk rechts abbiegen auf B173 Hofer Strasse</desc>
</rtept>
<rtept lat="50.427520000" lon="12.070870000">
- <name>links abbiegen auf Zur Pirkmühle (K7859)</name>
- <cmt>Zur Pirkmühle (K7859)</cmt>
- <desc>Zur Pirkmühle (K7859)</desc>
+ <name>Zur Pirkmühle (K7859)</name>
+ <desc>links abbiegen auf Zur Pirkmühle (K7859)</desc>
</rtept>
<rtept lat="50.429200000" lon="12.061160000">
- <name>bei D 08538 Burgstein/Pirk </name>
- <cmt>K7859</cmt>
- <desc>K7859</desc>
+ <name>K7859</name>
+ <cmt>bei D 08538 Burgstein/Pirk</cmt>
+ <desc>bei D 08538 Burgstein/Pirk</desc>
</rtept>
<rtept lat="50.429140000" lon="12.032920000">
- <name>in Geilsdorf links abbiegen auf Winkel (K7859)</name>
- <cmt>Winkel (K7859)</cmt>
- <desc>Winkel (K7859)</desc>
+ <name>Winkel (K7859)</name>
+ <desc>in Geilsdorf links abbiegen auf Winkel (K7859)</desc>
</rtept>
<rtept lat="50.434110000" lon="12.008480000">
- <name>in Schwand links abbiegen auf Weischlitzer Strasse (K7859)</name>
- <cmt>Weischlitzer Strasse (K7859)</cmt>
- <desc>Weischlitzer Strasse (K7859)</desc>
+ <name>Weischlitzer Strasse (K7859)</name>
+ <desc>in Schwand links abbiegen auf Weischlitzer Strasse (K7859)</desc>
</rtept>
<rtept lat="50.432550000" lon="12.007660000">
- <name>halb rechts halten auf Weischlitzer Strasse (K7859)</name>
- <cmt>Weischlitzer Strasse (K7859)</cmt>
- <desc>Weischlitzer Strasse (K7859)</desc>
+ <name>Weischlitzer Strasse (K7859)</name>
+ <desc>halb rechts halten auf Weischlitzer Strasse (K7859)</desc>
</rtept>
<rtept lat="50.429900000" lon="11.981960000">
- <name>bei D 08538 Burgstein/Kemnitz </name>
- <cmt>K7859</cmt>
- <desc>K7859</desc>
+ <name>K7859</name>
+ <cmt>bei D 08538 Burgstein/Kemnitz</cmt>
+ <desc>bei D 08538 Burgstein/Kemnitz</desc>
</rtept>
<rtept lat="50.427600000" lon="11.976500000">
- <name>links abbiegen auf Kemnitzer Strasse </name>
- <cmt>Kemnitzer Strasse </cmt>
- <desc>Kemnitzer Strasse </desc>
+ <name>Kemnitzer Strasse</name>
+ <desc>links abbiegen auf Kemnitzer Strasse</desc>
</rtept>
<rtept lat="50.418390000" lon="11.985720000">
- <name>in Krebes rechts abbiegen auf Burgsteinstrasse (K7860)</name>
- <cmt>Burgsteinstrasse (K7860)</cmt>
- <desc>Burgsteinstrasse (K7860)</desc>
+ <name>Burgsteinstrasse (K7860)</name>
+ <desc>in Krebes rechts abbiegen auf Burgsteinstrasse (K7860)</desc>
</rtept>
<rtept lat="50.415470000" lon="11.979040000">
- <name>geradeaus weiter</name>
+ <name>RPT257</name>
+ <desc>geradeaus weiter</desc>
</rtept>
<rtept lat="50.410280000" lon="11.969940000">
- <name>links abbiegen</name>
+ <name>RPT258</name>
+ <desc>links abbiegen</desc>
</rtept>
<rtept lat="50.388740000" lon="11.996920000">
- <name>in Heinersgrün halb links halten auf An der Kapelle (K7855)</name>
- <cmt>An der Kapelle (K7855)</cmt>
- <desc>An der Kapelle (K7855)</desc>
+ <name>An der Kapelle (K7855)</name>
+ <desc>in Heinersgrün halb links halten auf An der Kapelle (K7855)</desc>
</rtept>
<rtept lat="50.378030000" lon="12.016060000">
- <name>rechts abbiegen</name>
+ <name>RPT260</name>
+ <desc>rechts abbiegen</desc>
</rtept>
<rtept lat="50.375530000" lon="12.011930000">
- <name>geradeaus weiter auf B173</name>
- <cmt>B173</cmt>
- <desc>B173</desc>
+ <name>B173</name>
+ <desc>geradeaus weiter auf B173</desc>
</rtept>
<rtept lat="50.326920000" lon="11.913060000">
- <name>bei D95032 Hof </name>
+ <name>bei D95032 Hof</name>
+ <cmt>bei D95032 Hof</cmt>
+ <desc>bei D95032 Hof</desc>
</rtept>
</rte>
</gpx>
--- /dev/null
+4243095|-7110763|BELLEVUE|0\r
+4243124|-7110924|GATE6|0\r
+4243498|-7110994|PANTHRCAVE|0\r
+4243676|-7111322|6014MEADOW|0\r
+4243902|-7111446|6006|0\r
+4243859|-7111480|6006BLUE|0\r
+4243892|-7111615|5096|0\r
+4243888|-7111928|5066|0\r
+4243923|-7111969|5067|0\r
+4243999|-7112092|5058ROAD|0\r
+4244173|-7112168|5150TANK|0\r
+4244390|-7112204|5142|0\r
+4244536|-7112284|5144SUMMIT|0\r
+4244730|-7112145|5156|0\r
+4244976|-7112232|5148NANEPA|0\r
+4245144|-7112175|5258|0\r
+4245326|-7112121|5252PURPLE|0\r
+4245625|-7111936|527631|0\r
+4245659|-7111968|527614|0\r
+4245739|-7111984|5267OBSTAC|0\r
+4245815|-7111914|5278|0\r
+4245938|-7111769|5289|0\r
+4246418|-7111983|5374FIRE|0\r
+4246565|-7111940|5376|0\r
+4246591|-7111933|5376STREAM|0\r
+4246711|-7111357|6328|0\r
+4246646|-7111007|635722|0\r
+4246656|-7110941|635783|0\r
+4246350|-7110712|6373|0\r
+4246569|-7110736|BEAR HILL|0\r
+4245999|-7110617|6289|0\r
+4245762|-7110512|6297|0\r
+4245384|-7110521|6283|0\r
+4245143|-7110541|6280|0\r
+4244845|-7110616|6177|0\r
+4244780|-7110662|6176|0\r
+4244477|-7110888|6153|0\r
+4244359|-7110630|6171|0\r
+4244298|-7111144|6131|0\r
+4244220|-7111098|6130|0\r
+4244175|-7111322|6029|0\r
+4243902|-7111446|6006|0\r
+4243676|-7111322|6014MEADOW|0\r
+4243498|-7110994|PANTHRCAVE|0\r
+4243124|-7110924|GATE6|0\r
+4243095|-7110763|BELLEVUE|0\r
--- /dev/null
+ TomTom Navigator Places of Interest\r
+ GPSBabel- ASCII Export\r
+ Points\r
+ Created at: Thu Jan 01 00:00:00 1970\r
+-71.119277,42.438878,"5066"\r
+-71.119689,42.439227,"5067"\r
+-71.116146,42.438917,"5096"\r
+-71.122044,42.443904,"5142"\r
+-71.121447,42.447298,"5156"\r
+-71.125094,42.454873,"5224"\r
+-71.124988,42.459079,"5229"\r
+-71.124474,42.456979,"5237"\r
+-71.120990,42.454401,"5254"\r
+-71.121746,42.451442,"5258"\r
+-71.120660,42.454404,"5264"\r
+-71.121045,42.457761,"526708"\r
+-71.120313,42.457089,"526750"\r
+-71.119676,42.456592,"527614"\r
+-71.119356,42.456252,"527631"\r
+-71.119135,42.458148,"5278"\r
+-71.117693,42.459377,"5289"\r
+-71.119828,42.464183,"5374FIRE"\r
+-71.119399,42.465650,"5376"\r
+-71.114456,42.439018,"6006"\r
+-71.114803,42.438594,"6006BLUE"\r
+-71.113223,42.436757,"6014MEADOW"\r
+-71.113220,42.441754,"6029"\r
+-71.109075,42.436243,"6053"\r
+-71.107500,42.439250,"6066"\r
+-71.107582,42.439764,"6067"\r
+-71.105874,42.434766,"6071"\r
+-71.106599,42.433304,"6073"\r
+-71.104772,42.437338,"6084"\r
+-71.110975,42.442196,"6130"\r
+-71.111441,42.442981,"6131"\r
+-71.108882,42.444773,"6153"\r
+-71.106301,42.443592,"6171"\r
+-71.106624,42.447804,"6176"\r
+-71.106158,42.448448,"6177"\r
+-71.106783,42.453415,"6272"\r
+-71.107253,42.453434,"6272"\r
+-71.106771,42.458298,"6278"\r
+-71.105413,42.451430,"6280"\r
+-71.105206,42.453845,"6283"\r
+-71.106170,42.459986,"6289"\r
+-71.105116,42.457616,"6297"\r
+-71.113574,42.467110,"6328"\r
+-71.109863,42.464202,"6354"\r
+-71.110067,42.466459,"635722"\r
+-71.109410,42.466557,"635783"\r
+-71.107117,42.463495,"6373"\r
+-71.110241,42.401051,"6634"\r
+-71.106532,42.432621,"6979"\r
+-71.107883,42.431033,"6997"\r
+-71.107360,42.465687,"BEAR HILL"\r
+-71.107628,42.430950,"BELLEVUE"\r
+-71.114079,42.438666,"6016"\r
+-71.124651,42.456469,"5236BRIDGE"\r
+-71.119815,42.465759,"5376BRIDGE"\r
+-71.105878,42.442993,"6181CROSS"\r
+-71.109664,42.435472,"6042CROSS"\r
+-71.103646,42.458516,"DARKHOLLPO"\r
+-71.112675,42.443109,"6121DEAD"\r
+-71.119298,42.449866,"5179DEAD"\r
+-71.116524,42.459629,"5299DEAD"\r
+-71.119148,42.465485,"5376DEAD"\r
+-71.109986,42.462776,"6353DEAD"\r
+-71.108784,42.446793,"6155DEAD"\r
+-71.126602,42.451204,"GATE14"\r
+-71.122078,42.458499,"GATE16"\r
+-71.119238,42.459376,"GATE17"\r
+-71.119240,42.466353,"GATE19"\r
+-71.107697,42.468655,"GATE21"\r
+-71.102973,42.456718,"GATE24"\r
+-71.107690,42.430847,"GATE5"\r
+-71.109236,42.431240,"GATE6"\r
+-71.106556,42.439502,"6077LOGS"\r
+-71.122320,42.449765,"5148NANEPA"\r
+-71.119845,42.457388,"5267OBSTAC"\r
+-71.109942,42.434980,"PANTHRCAVE"\r
+-71.121211,42.453256,"5252PURPLE"\r
+-71.117481,42.457734,"5287WATER"\r
+-71.124574,42.459278,"5239ROAD"\r
+-71.118991,42.458782,"5278ROAD"\r
+-71.120925,42.439993,"5058ROAD"\r
+-71.106782,42.453415,"SHEEPFOLD"\r
+-71.107483,42.455956,"SOAPBOX"\r
+-71.119328,42.465913,"5376STREAM"\r
+-71.122845,42.445359,"5144SUMMIT"\r
+-71.121676,42.441727,"5150TANK"\r
H COORDINATE SYSTEM
U LAT LON DM
+
+
+H TN meridian
H LATITUDE LONGITUDE DATE TIME ALT ;track
T N3003.73100 W09136.62100 25-MAY-02 17:06:21 1
T N3003.76700 W09136.63400 25-MAY-02 17:09:55 0
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<gpx
+ version="1.0"
+creator="GPSBabel - http://www.gpsbabel.org"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xmlns="http://www.topografix.com/GPX/1/0"
+xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd">
+<time>2007-02-14T15:55:51Z</time>
+<bounds minlat="50.492618900" minlon="12.105448700" maxlat="51.314520700" maxlon="12.435919300"/>
+<wpt lat="50.492618900" lon="12.105448700">
+<time>2005-09-03T00:00:00.900Z</time>
+ <name>NARVA</name>
+ <cmt>NARVA</cmt>
+ <desc>NARVA</desc>
+</wpt>
+<wpt lat="50.493836900" lon="12.106101000">
+<time>2005-09-03T00:00:00.900Z</time>
+ <name>Liebknechtstras</name>
+ <cmt>Liebknechtstras</cmt>
+ <desc>Liebknechtstras</desc>
+</wpt>
+<wpt lat="50.493662800" lon="12.107152400">
+<time>2005-09-03T00:00:00.900Z</time>
+ <name>Jahnstrasse11</name>
+ <cmt>Jahnstrasse11</cmt>
+ <desc>Jahnstrasse11</desc>
+</wpt>
+<wpt lat="50.610795200" lon="12.173802200">
+<time>2005-09-03T00:00:00.900Z</time>
+ <name>Elsterberg</name>
+ <cmt>Elsterberg</cmt>
+ <desc>Elsterberg</desc>
+</wpt>
+<wpt lat="50.654763000" lon="12.204956700">
+<time>2005-09-03T00:00:00.900Z</time>
+ <name>Greiz</name>
+ <cmt>Greiz</cmt>
+ <desc>Greiz</desc>
+</wpt>
+<wpt lat="50.844125600" lon="12.408757200">
+<time>2005-09-03T00:00:00.900Z</time>
+ <name>Gosel</name>
+ <cmt>Gosel</cmt>
+ <desc>Gosel</desc>
+</wpt>
+<wpt lat="50.877340500" lon="12.433888700">
+<time>2005-09-03T00:00:00.900Z</time>
+ <name>3</name>
+ <cmt>3</cmt>
+ <desc>3</desc>
+</wpt>
+<wpt lat="50.964955100" lon="12.435919300">
+<time>2005-09-03T00:00:00.900Z</time>
+ <name>Altenburg-Umgehung</name>
+ <cmt>Altenburg-Umgehung</cmt>
+ <desc>Altenburg-Umgehung</desc>
+</wpt>
+<wpt lat="51.314520700" lon="12.409143300">
+<time>2005-09-03T00:00:00.900Z</time>
+ <name>Völkerschlachtdenkmal</name>
+ <cmt>Völkerschlachtdenkmal</cmt>
+ <desc>Völkerschlachtdenkmal</desc>
+</wpt>
+</gpx>
-$FRSPD,0.04*65\r
+$FRSPD,0.02*63\r
$FRWPT,3003.73100,N,09136.62100,W,1.0,250502,170621*63\r
-$FRSPD,1.24*66\r
+$FRSPD,0.64*63\r
$FRWPT,3003.76700,N,09136.63400,W,0.0,250502,170955*69\r
-$FRSPD,6.70*60\r
+$FRSPD,3.45*63\r
$FRWPT,3003.76200,N,09136.49600,W,0.0,250502,171200*6C\r
-$FRSPD,7.43*61\r
+$FRSPD,3.82*68\r
$FRWPT,3003.74000,N,09136.44300,W,0.0,250502,171248*68\r
-$FRSPD,7.39*6C\r
+$FRSPD,3.80*6A\r
$FRWPT,3003.69200,N,09136.31700,W,0.0,250502,171441*6F\r
-$FRSPD,14.61*53\r
+$FRSPD,7.52*61\r
$FRWPT,3003.58700,N,09135.96400,W,0.0,250502,171716*64\r
-$FRSPD,43.13*54\r
+$FRSPD,22.19*59\r
$FRWPT,3003.46800,N,09135.80100,W,0.0,250502,171746*63\r
-$FRSPD,35.48*5B\r
+$FRSPD,18.25*5F\r
$FRWPT,3003.32300,N,09135.69400,W,0.0,250502,171820*66\r
-$FRSPD,25.45*57\r
+$FRSPD,13.09*5A\r
$FRWPT,3003.23300,N,09135.55700,W,0.0,250502,171901*68\r
-$FRSPD,19.37*5D\r
+$FRSPD,9.96*67\r
$FRWPT,3002.98400,N,09135.38500,W,0.0,250502,172046*6E\r
-$FRSPD,12.72*57\r
+$FRSPD,6.54*66\r
$FRWPT,3002.94100,N,09135.39300,W,0.0,250502,172110*62\r
-$FRSPD,27.18*5D\r
+$FRSPD,13.98*52\r
$FRWPT,3002.92800,N,09135.57600,W,0.0,250502,172151*65\r
-$FRSPD,38.06*5C\r
+$FRSPD,19.58*54\r
$FRWPT,3002.77400,N,09135.78700,W,0.0,250502,172235*6F\r
-$FRSPD,26.63*50\r
+$FRSPD,13.70*54\r
$FRWPT,3002.73100,N,09135.92300,W,0.0,250502,172308*61\r
-$FRSPD,0.38*6A\r
+$FRSPD,0.20*63\r
$FRWPT,3002.83800,N,09136.01600,W,0.0,250502,180423*68\r
-$FRSPD,2.60*65\r
+$FRSPD,1.34*67\r
$FRWPT,3002.82000,N,09135.97800,W,2.0,250502,180604*66\r
-$FRSPD,3.97*6C\r
+$FRSPD,2.04*67\r
$FRWPT,3002.78600,N,09135.96800,W,0.0,250502,180706*65\r
-$FRSPD,2.95*6F\r
+$FRSPD,1.52*67\r
$FRWPT,3002.77200,N,09135.93700,W,1.0,250502,180818*65\r
-$FRSPD,3.68*6C\r
+$FRSPD,1.89*61\r
$FRWPT,3002.78200,N,09135.86400,W,0.0,250502,181020*6E\r
-$FRSPD,4.21*66\r
+$FRSPD,2.17*65\r
$FRWPT,3002.78100,N,09135.83000,W,0.0,250502,181109*66\r
-$FRSPD,5.13*66\r
+$FRSPD,2.64*61\r
$FRWPT,3002.80700,N,09135.78000,W,0.0,250502,181218*60\r
-$FRSPD,4.02*67\r
+$FRSPD,2.07*64\r
$FRWPT,3002.84700,N,09135.71200,W,0.0,250502,181422*60\r
-$FRSPD,5.14*61\r
+$FRSPD,2.64*61\r
$FRWPT,3002.86800,N,09135.68600,W,2.0,250502,181504*66\r
-$FRSPD,4.47*66\r
+$FRSPD,2.30*60\r
$FRWPT,3002.89500,N,09135.64500,W,1.0,250502,181614*6A\r
-$FRSPD,4.46*67\r
+$FRSPD,2.29*68\r
$FRWPT,3002.92100,N,09135.62800,W,1.0,250502,181701*6A\r
-$FRSPD,4.26*61\r
+$FRSPD,2.19*6B\r
$FRWPT,3002.96100,N,09135.63100,W,0.0,250502,181807*6E\r
-$FRSPD,3.94*6F\r
+$FRSPD,2.03*60\r
$FRWPT,3003.01900,N,09135.63900,W,2.0,250502,181951*61\r
-$FRSPD,4.21*66\r
+$FRSPD,2.17*65\r
$FRWPT,3003.04700,N,09135.64700,W,0.0,250502,182039*65\r
-$FRSPD,4.67*64\r
+$FRSPD,2.40*67\r
$FRWPT,3003.07400,N,09135.66200,W,0.0,250502,182124*6F\r
-$FRSPD,4.50*60\r
+$FRSPD,2.31*61\r
$FRWPT,3003.10800,N,09135.66200,W,0.0,250502,182217*66\r
-$FRSPD,3.39*68\r
+$FRSPD,1.74*63\r
$FRWPT,3003.13300,N,09135.68000,W,0.0,250502,182318*6C\r
-$FRSPD,4.26*61\r
+$FRSPD,2.19*6B\r
$FRWPT,3003.18100,N,09135.68100,W,0.0,250502,182437*6E\r
-$FRSPD,3.71*64\r
+$FRSPD,1.91*68\r
$FRWPT,3003.29200,N,09135.71200,W,6.0,250502,182813*68\r
-$FRSPD,2.40*67\r
+$FRSPD,1.23*61\r
$FRWPT,3003.22400,N,09135.69600,W,2.0,250502,183136*63\r
-$FRSPD,2.97*6D\r
+$FRSPD,1.53*66\r
$FRWPT,3003.19100,N,09135.68700,W,0.0,250502,183256*69\r
-$FRSPD,3.52*65\r
+$FRSPD,1.81*69\r
$FRWPT,3003.15800,N,09135.69000,W,0.0,250502,183402*6D\r
-$FRSPD,1.91*68\r
+$FRSPD,0.98*60\r
$FRWPT,3003.14700,N,09135.72600,W,0.0,250502,183603*6C\r
-$FRSPD,4.33*65\r
+$FRSPD,2.23*62\r
$FRWPT,3003.14900,N,09135.75800,W,0.0,250502,183648*64\r
-$FRSPD,4.77*65\r
+$FRSPD,2.46*61\r
$FRWPT,3003.15900,N,09135.80700,W,1.0,250502,183752*6B\r
-$FRSPD,5.10*65\r
+$FRSPD,2.62*67\r
$FRWPT,3003.18800,N,09135.87100,W,0.0,250502,183918*67\r
-$FRSPD,3.64*60\r
+$FRSPD,1.87*6F\r
$FRWPT,3003.21700,N,09135.87800,W,0.0,250502,184015*68\r
-$FRSPD,2.35*65\r
+$FRSPD,1.21*63\r
$FRWPT,3003.23800,N,09135.86600,W,6.0,250502,184125*6E\r
-$FRSPD,2.60*65\r
+$FRSPD,1.34*67\r
$FRWPT,3003.21700,N,09135.88500,W,0.0,250502,184237*68\r
-$FRSPD,2.21*60\r
+$FRSPD,1.14*65\r
$FRWPT,3003.19200,N,09135.87500,W,0.0,250502,184401*6A\r
-$FRSPD,1.94*6D\r
+$FRSPD,1.00*60\r
$FRWPT,3003.16900,N,09135.85100,W,0.0,250502,184553*6E\r
-$FRSPD,3.89*63\r
+$FRSPD,2.00*63\r
$FRWPT,3003.15400,N,09135.81600,W,0.0,250502,184654*67\r
-$FRSPD,4.31*67\r
+$FRSPD,2.22*63\r
$FRWPT,3003.14000,N,09135.78600,W,0.0,250502,184742*62\r
-$FRSPD,4.67*64\r
+$FRSPD,2.40*67\r
$FRWPT,3003.13500,N,09135.74100,W,0.0,250502,184841*67\r
-$FRSPD,3.42*64\r
+$FRSPD,1.76*61\r
$FRWPT,3003.13300,N,09135.70100,W,0.0,250502,184952*66\r
-$FRSPD,3.18*6B\r
+$FRSPD,1.64*62\r
$FRWPT,3003.11300,N,09135.68200,W,0.0,250502,185049*6C\r
-$FRSPD,4.32*64\r
+$FRSPD,2.22*63\r
$FRWPT,3003.06300,N,09135.66400,W,0.0,250502,185214*68\r
-$FRSPD,5.05*61\r
+$FRSPD,2.60*65\r
$FRWPT,3003.03400,N,09135.65400,W,0.0,250502,185256*6F\r
-$FRSPD,4.01*64\r
+$FRSPD,2.06*65\r
$FRWPT,3003.01100,N,09135.64600,W,0.0,250502,185338*62\r
-$FRSPD,5.12*67\r
+$FRSPD,2.64*61\r
$FRWPT,3002.94600,N,09135.62300,W,0.0,250502,185511*66\r
-$FRSPD,4.14*60\r
+$FRSPD,2.13*61\r
$FRWPT,3002.90700,N,09135.65500,W,0.0,250502,185632*60\r
-$FRSPD,4.59*69\r
+$FRSPD,2.36*66\r
$FRWPT,3002.88500,N,09135.68500,W,0.0,250502,185724*60\r
-$FRSPD,4.66*65\r
+$FRSPD,2.39*69\r
$FRWPT,3002.85000,N,09135.72700,W,7.0,250502,185840*6B\r
-$FRSPD,5.64*66\r
+$FRSPD,2.90*6A\r
$FRWPT,3002.82400,N,09135.76000,W,0.0,250502,185928*63\r
-$FRSPD,5.27*61\r
+$FRSPD,2.71*65\r
$FRWPT,3002.79800,N,09135.79600,W,0.0,250502,190022*65\r
-$FRSPD,5.00*64\r
+$FRSPD,2.57*61\r
$FRWPT,3002.78400,N,09135.85900,W,0.0,250502,190141*60\r
-$FRSPD,4.56*66\r
+$FRSPD,2.35*65\r
$FRWPT,3002.77400,N,09135.90800,W,0.0,250502,190248*60\r
-$FRSPD,3.37*66\r
+$FRSPD,1.73*64\r
$FRWPT,3002.77900,N,09135.93800,W,0.0,250502,190343*64\r
-$FRSPD,3.45*63\r
+$FRSPD,1.77*60\r
$FRWPT,3002.80700,N,09135.95700,W,0.0,250502,190449*66\r
-$FRSPD,2.98*62\r
+$FRSPD,1.53*66\r
$FRWPT,3002.82800,N,09135.98000,W,0.0,250502,190557*6F\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<gpx
+ version="1.0"
+creator="GPSBabel - http://www.gpsbabel.org"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xmlns="http://www.topografix.com/GPX/1/0"
+xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd">
+<time>1970-01-01T00:00:00Z</time>
+<bounds minlat="40.238290000" minlon="-74.668921600" maxlat="40.243300000" maxlon="-74.654053300"/>
+<trk>
+<trkseg>
+<trkpt lat="40.240390000" lon="-74.664573300">
+ <ele>-0.800000</ele>
+<time>2007-03-10T19:02:21Z</time>
+</trkpt>
+<trkpt lat="40.240393300" lon="-74.664563300">
+ <ele>-0.100000</ele>
+<time>2007-03-10T19:02:22Z</time>
+</trkpt>
+<trkpt lat="40.240398300" lon="-74.664553300">
+ <ele>1.600000</ele>
+<time>2007-03-10T19:02:23Z</time>
+</trkpt>
+<trkpt lat="40.240405000" lon="-74.664541600">
+ <ele>2.600000</ele>
+<time>2007-03-10T19:02:24Z</time>
+</trkpt>
+<trkpt lat="40.240415000" lon="-74.664523300">
+ <ele>3.000000</ele>
+<time>2007-03-10T19:02:25Z</time>
+</trkpt>
+<trkpt lat="40.240425000" lon="-74.664505000">
+ <ele>4.400000</ele>
+<time>2007-03-10T19:02:26Z</time>
+</trkpt>
+<trkpt lat="40.240430000" lon="-74.664486600">
+ <ele>4.600000</ele>
+<time>2007-03-10T19:02:27Z</time>
+</trkpt>
+<trkpt lat="40.240435000" lon="-74.664468300">
+ <ele>4.700000</ele>
+<time>2007-03-10T19:02:28Z</time>
+</trkpt>
+<trkpt lat="40.240438300" lon="-74.664450000">
+ <ele>4.900000</ele>
+<time>2007-03-10T19:02:29Z</time>
+</trkpt>
+<trkpt lat="40.240446650" lon="-74.664435000">
+ <ele>7.900000</ele>
+<time>2007-03-10T19:02:30Z</time>
+</trkpt>
+<trkpt lat="40.240453300" lon="-74.664428300">
+ <ele>10.900000</ele>
+<time>2007-03-10T19:02:31Z</time>
+</trkpt>
+<trkpt lat="40.240455000" lon="-74.664415000">
+ <ele>11.900000</ele>
+<time>2007-03-10T19:02:32Z</time>
+</trkpt>
+<trkpt lat="40.240456650" lon="-74.664403300">
+ <ele>13.600000</ele>
+<time>2007-03-10T19:02:33Z</time>
+</trkpt>
+<trkpt lat="40.240455000" lon="-74.664386600">
+ <ele>15.100000</ele>
+<time>2007-03-10T19:02:34Z</time>
+</trkpt>
+<trkpt lat="40.240460000" lon="-74.664368300">
+ <ele>15.700000</ele>
+<time>2007-03-10T19:02:35Z</time>
+</trkpt>
+<trkpt lat="40.240463300" lon="-74.664348300">
+ <ele>14.100000</ele>
+<time>2007-03-10T19:02:36Z</time>
+</trkpt>
+<trkpt lat="40.240468300" lon="-74.664330000">
+ <ele>13.900000</ele>
+<time>2007-03-10T19:02:37Z</time>
+</trkpt>
+<trkpt lat="40.240476650" lon="-74.664311600">
+ <ele>12.600000</ele>
+<time>2007-03-10T19:02:38Z</time>
+</trkpt>
+<trkpt lat="40.240491650" lon="-74.664285000">
+ <ele>11.400000</ele>
+<time>2007-03-10T19:02:39Z</time>
+</trkpt>
+<trkpt lat="40.240503300" lon="-74.664263300">
+ <ele>10.000000</ele>
+<time>2007-03-10T19:02:40Z</time>
+</trkpt>
+<trkpt lat="40.240513300" lon="-74.664246600">
+ <ele>10.300000</ele>
+<time>2007-03-10T19:02:41Z</time>
+</trkpt>
+<trkpt lat="40.240525000" lon="-74.664226600">
+ <ele>9.800000</ele>
+<time>2007-03-10T19:02:42Z</time>
+</trkpt>
+<trkpt lat="40.240543300" lon="-74.664206600">
+ <ele>8.900000</ele>
+<time>2007-03-10T19:02:43Z</time>
+</trkpt>
+<trkpt lat="40.240561650" lon="-74.664193300">
+ <ele>6.900000</ele>
+<time>2007-03-10T19:02:44Z</time>
+</trkpt>
+<trkpt lat="40.240575000" lon="-74.664191600">
+ <ele>6.500000</ele>
+<time>2007-03-10T19:02:45Z</time>
+</trkpt>
+<trkpt lat="40.240593300" lon="-74.664191600">
+ <ele>5.900000</ele>
+<time>2007-03-10T19:02:46Z</time>
+</trkpt>
+<trkpt lat="40.240605000" lon="-74.664183300">
+ <ele>4.000000</ele>
+<time>2007-03-10T19:02:47Z</time>
+</trkpt>
+<trkpt lat="40.240615000" lon="-74.664175000">
+ <ele>4.600000</ele>
+<time>2007-03-10T19:02:48Z</time>
+</trkpt>
+<trkpt lat="40.240628300" lon="-74.664170000">
+ <ele>4.200000</ele>
+<time>2007-03-10T19:02:49Z</time>
+</trkpt>
+<trkpt lat="40.240643300" lon="-74.664156600">
+ <ele>3.500000</ele>
+<time>2007-03-10T19:02:50Z</time>
+</trkpt>
+<trkpt lat="40.240660000" lon="-74.664140000">
+ <ele>2.000000</ele>
+<time>2007-03-10T19:02:51Z</time>
+</trkpt>
+<trkpt lat="40.240671650" lon="-74.664125000">
+ <ele>1.100000</ele>
+<time>2007-03-10T19:02:52Z</time>
+</trkpt>
+<trkpt lat="40.240686650" lon="-74.664111600">
+ <ele>-0.200000</ele>
+<time>2007-03-10T19:02:53Z</time>
+</trkpt>
+<trkpt lat="40.240696650" lon="-74.664096600">
+ <ele>-0.500000</ele>
+<time>2007-03-10T19:02:54Z</time>
+</trkpt>
+<trkpt lat="40.240705000" lon="-74.664083300">
+ <ele>-1.300000</ele>
+<time>2007-03-10T19:02:55Z</time>
+</trkpt>
+<trkpt lat="40.240708300" lon="-74.664070000">
+ <ele>-1.500000</ele>
+<time>2007-03-10T19:02:56Z</time>
+</trkpt>
+<trkpt lat="40.240708300" lon="-74.664055000">
+ <ele>-3.300000</ele>
+<time>2007-03-10T19:02:57Z</time>
+</trkpt>
+<trkpt lat="40.240716650" lon="-74.664041600">
+ <ele>-4.800000</ele>
+<time>2007-03-10T19:02:58Z</time>
+</trkpt>
+<trkpt lat="40.240731650" lon="-74.664030000">
+ <ele>-5.100000</ele>
+<time>2007-03-10T19:02:59Z</time>
+</trkpt>
+<trkpt lat="40.240740000" lon="-74.664013300">
+ <ele>-5.300000</ele>
+<time>2007-03-10T19:03:00Z</time>
+</trkpt>
+<trkpt lat="40.240748300" lon="-74.663988300">
+ <ele>-4.900000</ele>
+<time>2007-03-10T19:03:01Z</time>
+</trkpt>
+<trkpt lat="40.240750000" lon="-74.663960000">
+ <ele>-4.500000</ele>
+<time>2007-03-10T19:03:02Z</time>
+</trkpt>
+<trkpt lat="40.240758300" lon="-74.663936600">
+ <ele>-4.200000</ele>
+<time>2007-03-10T19:03:03Z</time>
+</trkpt>
+<trkpt lat="40.240763300" lon="-74.663911600">
+ <ele>-5.200000</ele>
+<time>2007-03-10T19:03:04Z</time>
+</trkpt>
+<trkpt lat="40.240771650" lon="-74.663888300">
+ <ele>-6.300000</ele>
+<time>2007-03-10T19:03:05Z</time>
+</trkpt>
+<trkpt lat="40.240783300" lon="-74.663871600">
+ <ele>-6.800000</ele>
+<time>2007-03-10T19:03:06Z</time>
+</trkpt>
+<trkpt lat="40.240798300" lon="-74.663851600">
+ <ele>-7.100000</ele>
+<time>2007-03-10T19:03:07Z</time>
+</trkpt>
+<trkpt lat="40.240811650" lon="-74.663833300">
+ <ele>-9.800000</ele>
+<time>2007-03-10T19:03:08Z</time>
+</trkpt>
+<trkpt lat="40.240816650" lon="-74.663808300">
+ <ele>-10.000000</ele>
+<time>2007-03-10T19:03:09Z</time>
+</trkpt>
+<trkpt lat="40.240820000" lon="-74.663785000">
+ <ele>-12.000000</ele>
+<time>2007-03-10T19:03:10Z</time>
+</trkpt>
+<trkpt lat="40.240815000" lon="-74.663763300">
+ <ele>-12.400000</ele>
+<time>2007-03-10T19:03:11Z</time>
+</trkpt>
+<trkpt lat="40.240801650" lon="-74.663745000">
+ <ele>-11.300000</ele>
+<time>2007-03-10T19:03:12Z</time>
+</trkpt>
+<trkpt lat="40.240783300" lon="-74.663730000">
+ <ele>-11.300000</ele>
+<time>2007-03-10T19:03:13Z</time>
+</trkpt>
+<trkpt lat="40.240768300" lon="-74.663720000">
+ <ele>-10.900000</ele>
+<time>2007-03-10T19:03:14Z</time>
+</trkpt>
+<trkpt lat="40.240758300" lon="-74.663711600">
+ <ele>-8.800000</ele>
+<time>2007-03-10T19:03:15Z</time>
+</trkpt>
+<trkpt lat="40.240756650" lon="-74.663703300">
+ <ele>-8.100000</ele>
+<time>2007-03-10T19:03:16Z</time>
+</trkpt>
+<trkpt lat="40.240750000" lon="-74.663691600">
+ <ele>-6.700000</ele>
+<time>2007-03-10T19:03:17Z</time>
+</trkpt>
+<trkpt lat="40.240755000" lon="-74.663688300">
+ <ele>-5.700000</ele>
+<time>2007-03-10T19:03:18Z</time>
+</trkpt>
+<trkpt lat="40.240750000" lon="-74.663681600">
+ <ele>-3.200000</ele>
+<time>2007-03-10T19:03:19Z</time>
+</trkpt>
+<trkpt lat="40.240746650" lon="-74.663673300">
+ <ele>-0.800000</ele>
+<time>2007-03-10T19:03:20Z</time>
+</trkpt>
+<trkpt lat="40.240728300" lon="-74.663650000">
+ <ele>2.600000</ele>
+<time>2007-03-10T19:03:21Z</time>
+</trkpt>
+<trkpt lat="40.240706650" lon="-74.663630000">
+ <ele>7.000000</ele>
+<time>2007-03-10T19:03:22Z</time>
+</trkpt>
+<trkpt lat="40.240680000" lon="-74.663605000">
+ <ele>11.900000</ele>
+<time>2007-03-10T19:03:23Z</time>
+</trkpt>
+<trkpt lat="40.240661650" lon="-74.663576600">
+ <ele>15.300000</ele>
+<time>2007-03-10T19:03:24Z</time>
+</trkpt>
+<trkpt lat="40.240651650" lon="-74.663548300">
+ <ele>17.700001</ele>
+<time>2007-03-10T19:03:25Z</time>
+</trkpt>
+<trkpt lat="40.240633300" lon="-74.663516600">
+ <ele>21.700001</ele>
+<time>2007-03-10T19:03:26Z</time>
+</trkpt>
+<trkpt lat="40.240615000" lon="-74.663485000">
+ <ele>26.200001</ele>
+<time>2007-03-10T19:03:27Z</time>
+</trkpt>
+<trkpt lat="40.240598300" lon="-74.663460000">
+ <ele>29.900000</ele>
+<time>2007-03-10T19:03:28Z</time>
+</trkpt>
+<trkpt lat="40.240590000" lon="-74.663431600">
+ <ele>35.500000</ele>
+<time>2007-03-10T19:03:29Z</time>
+</trkpt>
+<trkpt lat="40.240576650" lon="-74.663401600">
+ <ele>40.200001</ele>
+<time>2007-03-10T19:03:30Z</time>
+</trkpt>
+<trkpt lat="40.240558300" lon="-74.663380000">
+ <ele>42.700001</ele>
+<time>2007-03-10T19:03:31Z</time>
+</trkpt>
+<trkpt lat="40.240548300" lon="-74.663360000">
+ <ele>45.900002</ele>
+<time>2007-03-10T19:03:32Z</time>
+</trkpt>
+<trkpt lat="40.240545000" lon="-74.663345000">
+ <ele>44.700001</ele>
+<time>2007-03-10T19:03:33Z</time>
+</trkpt>
+<trkpt lat="40.240543300" lon="-74.663328300">
+ <ele>44.099998</ele>
+<time>2007-03-10T19:03:34Z</time>
+</trkpt>
+<trkpt lat="40.240546650" lon="-74.663308300">
+ <ele>45.200001</ele>
+<time>2007-03-10T19:03:35Z</time>
+</trkpt>
+<trkpt lat="40.240543300" lon="-74.663285000">
+ <ele>44.200001</ele>
+<time>2007-03-10T19:03:36Z</time>
+</trkpt>
+<trkpt lat="40.240526650" lon="-74.663258300">
+ <ele>47.000000</ele>
+<time>2007-03-10T19:03:37Z</time>
+</trkpt>
+<trkpt lat="40.240510000" lon="-74.663235000">
+ <ele>50.200001</ele>
+<time>2007-03-10T19:03:38Z</time>
+</trkpt>
+<trkpt lat="40.240500000" lon="-74.663214900">
+ <ele>54.500000</ele>
+<time>2007-03-10T19:03:39Z</time>
+</trkpt>
+<trkpt lat="40.240485000" lon="-74.663198300">
+ <ele>58.200001</ele>
+<time>2007-03-10T19:03:40Z</time>
+</trkpt>
+<trkpt lat="40.240473300" lon="-74.663168300">
+ <ele>60.099998</ele>
+<time>2007-03-10T19:03:41Z</time>
+</trkpt>
+<trkpt lat="40.240460000" lon="-74.663143300">
+ <ele>64.800003</ele>
+<time>2007-03-10T19:03:42Z</time>
+</trkpt>
+<trkpt lat="40.240445000" lon="-74.663126600">
+ <ele>69.400002</ele>
+<time>2007-03-10T19:03:43Z</time>
+</trkpt>
+<trkpt lat="40.240430000" lon="-74.663115000">
+ <ele>75.199997</ele>
+<time>2007-03-10T19:03:44Z</time>
+</trkpt>
+<trkpt lat="40.240413300" lon="-74.663106600">
+ <ele>78.500000</ele>
+<time>2007-03-10T19:03:45Z</time>
+</trkpt>
+<trkpt lat="40.240393300" lon="-74.663095000">
+ <ele>78.099998</ele>
+<time>2007-03-10T19:03:46Z</time>
+</trkpt>
+<trkpt lat="40.240380000" lon="-74.663093300">
+ <ele>77.099998</ele>
+<time>2007-03-10T19:03:47Z</time>
+</trkpt>
+<trkpt lat="40.240363300" lon="-74.663090000">
+ <ele>74.900002</ele>
+<time>2007-03-10T19:03:48Z</time>
+</trkpt>
+<trkpt lat="40.240346650" lon="-74.663085000">
+ <ele>68.599998</ele>
+<time>2007-03-10T19:03:49Z</time>
+</trkpt>
+<trkpt lat="40.240333300" lon="-74.663088300">
+ <ele>69.099998</ele>
+<time>2007-03-10T19:03:50Z</time>
+</trkpt>
+<trkpt lat="40.240306650" lon="-74.663086600">
+ <ele>69.400002</ele>
+<time>2007-03-10T19:03:51Z</time>
+</trkpt>
+<trkpt lat="40.240285000" lon="-74.663086600">
+ <ele>68.099998</ele>
+<time>2007-03-10T19:03:52Z</time>
+</trkpt>
+<trkpt lat="40.240270000" lon="-74.663088300">
+ <ele>66.500000</ele>
+<time>2007-03-10T19:03:53Z</time>
+</trkpt>
+<trkpt lat="40.240255000" lon="-74.663090000">
+ <ele>64.000000</ele>
+<time>2007-03-10T19:03:54Z</time>
+</trkpt>
+<trkpt lat="40.240243300" lon="-74.663095000">
+ <ele>58.400002</ele>
+<time>2007-03-10T19:03:55Z</time>
+</trkpt>
+<trkpt lat="40.240231650" lon="-74.663105000">
+ <ele>56.900002</ele>
+<time>2007-03-10T19:03:56Z</time>
+</trkpt>
+<trkpt lat="40.240218300" lon="-74.663121600">
+ <ele>52.099998</ele>
+<time>2007-03-10T19:03:57Z</time>
+</trkpt>
+<trkpt lat="40.240195000" lon="-74.663131600">
+ <ele>48.799999</ele>
+<time>2007-03-10T19:03:58Z</time>
+</trkpt>
+<trkpt lat="40.240168300" lon="-74.663130000">
+ <ele>46.500000</ele>
+<time>2007-03-10T19:03:59Z</time>
+</trkpt>
+<trkpt lat="40.240146650" lon="-74.663128300">
+ <ele>50.599998</ele>
+<time>2007-03-10T19:04:00Z</time>
+</trkpt>
+<trkpt lat="40.240125000" lon="-74.663124900">
+ <ele>52.400002</ele>
+<time>2007-03-10T19:04:01Z</time>
+</trkpt>
+<trkpt lat="40.240101650" lon="-74.663120000">
+ <ele>54.000000</ele>
+<time>2007-03-10T19:04:02Z</time>
+</trkpt>
+<trkpt lat="40.240068300" lon="-74.663108300">
+ <ele>49.200001</ele>
+<time>2007-03-10T19:04:03Z</time>
+</trkpt>
+<trkpt lat="40.240031650" lon="-74.663093300">
+ <ele>43.700001</ele>
+<time>2007-03-10T19:04:04Z</time>
+</trkpt>
+<trkpt lat="40.240004950" lon="-74.663090000">
+ <ele>37.900002</ele>
+<time>2007-03-10T19:04:05Z</time>
+</trkpt>
+<trkpt lat="40.239976650" lon="-74.663081600">
+ <ele>32.200001</ele>
+<time>2007-03-10T19:04:06Z</time>
+</trkpt>
+<trkpt lat="40.239946650" lon="-74.663071600">
+ <ele>24.400000</ele>
+<time>2007-03-10T19:04:07Z</time>
+</trkpt>
+<trkpt lat="40.239923300" lon="-74.663071600">
+ <ele>18.100000</ele>
+<time>2007-03-10T19:04:08Z</time>
+</trkpt>
+<trkpt lat="40.239900000" lon="-74.663070000">
+ <ele>9.700000</ele>
+<time>2007-03-10T19:04:09Z</time>
+</trkpt>
+<trkpt lat="40.239880000" lon="-74.663070000">
+ <ele>0.500000</ele>
+<time>2007-03-10T19:04:10Z</time>
+</trkpt>
+<trkpt lat="40.239861650" lon="-74.663073300">
+ <ele>-3.700000</ele>
+<time>2007-03-10T19:04:11Z</time>
+</trkpt>
+<trkpt lat="40.239840000" lon="-74.663071600">
+ <ele>-7.900000</ele>
+<time>2007-03-10T19:04:12Z</time>
+</trkpt>
+<trkpt lat="40.239825000" lon="-74.663061600">
+ <ele>-6.900000</ele>
+<time>2007-03-10T19:04:13Z</time>
+</trkpt>
+<trkpt lat="40.239811650" lon="-74.663053300">
+ <ele>-4.400000</ele>
+<time>2007-03-10T19:04:14Z</time>
+</trkpt>
+<trkpt lat="40.239800000" lon="-74.663048300">
+ <ele>1.600000</ele>
+<time>2007-03-10T19:04:15Z</time>
+</trkpt>
+<trkpt lat="40.239795000" lon="-74.663046600">
+ <ele>9.400000</ele>
+<time>2007-03-10T19:04:16Z</time>
+</trkpt>
+<trkpt lat="40.239790000" lon="-74.663050000">
+ <ele>14.900000</ele>
+<time>2007-03-10T19:04:17Z</time>
+</trkpt>
+<trkpt lat="40.239785000" lon="-74.663046600">
+ <ele>20.500000</ele>
+<time>2007-03-10T19:04:18Z</time>
+</trkpt>
+<trkpt lat="40.239773300" lon="-74.663043300">
+ <ele>22.799999</ele>
+<time>2007-03-10T19:04:19Z</time>
+</trkpt>
+<trkpt lat="40.239758300" lon="-74.663056600">
+ <ele>22.600000</ele>
+<time>2007-03-10T19:04:20Z</time>
+</trkpt>
+<trkpt lat="40.239745000" lon="-74.663068300">
+ <ele>21.000000</ele>
+<time>2007-03-10T19:04:21Z</time>
+</trkpt>
+<trkpt lat="40.239733300" lon="-74.663081600">
+ <ele>13.700000</ele>
+<time>2007-03-10T19:04:22Z</time>
+</trkpt>
+<trkpt lat="40.239714950" lon="-74.663095000">
+ <ele>10.500000</ele>
+<time>2007-03-10T19:04:23Z</time>
+</trkpt>
+<trkpt lat="40.239706650" lon="-74.663108300">
+ <ele>6.400000</ele>
+<time>2007-03-10T19:04:24Z</time>
+</trkpt>
+<trkpt lat="40.239693300" lon="-74.663121600">
+ <ele>1.000000</ele>
+<time>2007-03-10T19:04:25Z</time>
+</trkpt>
+<trkpt lat="40.239678300" lon="-74.663135000">
+ <ele>-3.600000</ele>
+<time>2007-03-10T19:04:26Z</time>
+</trkpt>
+<trkpt lat="40.239668300" lon="-74.663143300">
+ <ele>-10.100000</ele>
+<time>2007-03-10T19:04:27Z</time>
+</trkpt>
+<trkpt lat="40.239661650" lon="-74.663153300">
+ <ele>-15.400000</ele>
+<time>2007-03-10T19:04:28Z</time>
+</trkpt>
+<trkpt lat="40.239655000" lon="-74.663163300">
+ <ele>-17.500000</ele>
+<time>2007-03-10T19:04:29Z</time>
+</trkpt>
+<trkpt lat="40.239638300" lon="-74.663171600">
+ <ele>-17.400000</ele>
+<time>2007-03-10T19:04:30Z</time>
+</trkpt>
+<trkpt lat="40.239621650" lon="-74.663181600">
+ <ele>-18.600000</ele>
+<time>2007-03-10T19:04:31Z</time>
+</trkpt>
+<trkpt lat="40.239600000" lon="-74.663195000">
+ <ele>-19.200001</ele>
+<time>2007-03-10T19:04:32Z</time>
+</trkpt>
+<trkpt lat="40.239571650" lon="-74.663214900">
+ <ele>-21.299999</ele>
+<time>2007-03-10T19:04:33Z</time>
+</trkpt>
+<trkpt lat="40.239546650" lon="-74.663238300">
+ <ele>-22.400000</ele>
+<time>2007-03-10T19:04:34Z</time>
+</trkpt>
+<trkpt lat="40.239533300" lon="-74.663263300">
+ <ele>-25.799999</ele>
+<time>2007-03-10T19:04:35Z</time>
+</trkpt>
+<trkpt lat="40.239516650" lon="-74.663285000">
+ <ele>-26.100000</ele>
+<time>2007-03-10T19:04:36Z</time>
+</trkpt>
+<trkpt lat="40.239505000" lon="-74.663301600">
+ <ele>-25.600000</ele>
+<time>2007-03-10T19:04:37Z</time>
+</trkpt>
+<trkpt lat="40.239498300" lon="-74.663318300">
+ <ele>-24.400000</ele>
+<time>2007-03-10T19:04:38Z</time>
+</trkpt>
+<trkpt lat="40.239488300" lon="-74.663333300">
+ <ele>-26.000000</ele>
+<time>2007-03-10T19:04:39Z</time>
+</trkpt>
+<trkpt lat="40.239476650" lon="-74.663348300">
+ <ele>-28.700001</ele>
+<time>2007-03-10T19:04:40Z</time>
+</trkpt>
+<trkpt lat="40.239465000" lon="-74.663365000">
+ <ele>-32.400002</ele>
+<time>2007-03-10T19:04:41Z</time>
+</trkpt>
+<trkpt lat="40.239453300" lon="-74.663381600">
+ <ele>-35.599998</ele>
+<time>2007-03-10T19:04:42Z</time>
+</trkpt>
+<trkpt lat="40.239446650" lon="-74.663401600">
+ <ele>-36.900002</ele>
+<time>2007-03-10T19:04:43Z</time>
+</trkpt>
+<trkpt lat="40.239438300" lon="-74.663416600">
+ <ele>-38.200001</ele>
+<time>2007-03-10T19:04:44Z</time>
+</trkpt>
+<trkpt lat="40.239428300" lon="-74.663425000">
+ <ele>-38.799999</ele>
+<time>2007-03-10T19:04:45Z</time>
+</trkpt>
+<trkpt lat="40.239416650" lon="-74.663425000">
+ <ele>-37.099998</ele>
+<time>2007-03-10T19:04:46Z</time>
+</trkpt>
+<trkpt lat="40.239405000" lon="-74.663431600">
+ <ele>-37.599998</ele>
+<time>2007-03-10T19:04:47Z</time>
+</trkpt>
+<trkpt lat="40.239401650" lon="-74.663448300">
+ <ele>-37.400002</ele>
+<time>2007-03-10T19:04:48Z</time>
+</trkpt>
+<trkpt lat="40.239396650" lon="-74.663465000">
+ <ele>-42.200001</ele>
+<time>2007-03-10T19:04:49Z</time>
+</trkpt>
+<trkpt lat="40.239388300" lon="-74.663480000">
+ <ele>-41.900002</ele>
+<time>2007-03-10T19:04:50Z</time>
+</trkpt>
+<trkpt lat="40.239373300" lon="-74.663496600">
+ <ele>-40.799999</ele>
+<time>2007-03-10T19:04:51Z</time>
+</trkpt>
+<trkpt lat="40.239355000" lon="-74.663515000">
+ <ele>-40.900002</ele>
+<time>2007-03-10T19:04:52Z</time>
+</trkpt>
+<trkpt lat="40.239333300" lon="-74.663531600">
+ <ele>-39.599998</ele>
+<time>2007-03-10T19:04:53Z</time>
+</trkpt>
+<trkpt lat="40.239316650" lon="-74.663550000">
+ <ele>-40.599998</ele>
+<time>2007-03-10T19:04:54Z</time>
+</trkpt>
+<trkpt lat="40.239301650" lon="-74.663569900">
+ <ele>-41.000000</ele>
+<time>2007-03-10T19:04:55Z</time>
+</trkpt>
+<trkpt lat="40.239283300" lon="-74.663585000">
+ <ele>-40.099998</ele>
+<time>2007-03-10T19:04:56Z</time>
+</trkpt>
+<trkpt lat="40.239268300" lon="-74.663598300">
+ <ele>-35.799999</ele>
+<time>2007-03-10T19:04:57Z</time>
+</trkpt>
+<trkpt lat="40.239256650" lon="-74.663613300">
+ <ele>-32.900002</ele>
+<time>2007-03-10T19:04:58Z</time>
+</trkpt>
+<trkpt lat="40.239244950" lon="-74.663623300">
+ <ele>-33.000000</ele>
+<time>2007-03-10T19:04:59Z</time>
+</trkpt>
+<trkpt lat="40.239231650" lon="-74.663635000">
+ <ele>-31.500000</ele>
+<time>2007-03-10T19:05:00Z</time>
+</trkpt>
+<trkpt lat="40.239216650" lon="-74.663646600">
+ <ele>-29.299999</ele>
+<time>2007-03-10T19:05:01Z</time>
+</trkpt>
+<trkpt lat="40.239203300" lon="-74.663656600">
+ <ele>-28.400000</ele>
+<time>2007-03-10T19:05:02Z</time>
+</trkpt>
+<trkpt lat="40.239191650" lon="-74.663665000">
+ <ele>-29.500000</ele>
+<time>2007-03-10T19:05:03Z</time>
+</trkpt>
+<trkpt lat="40.239180000" lon="-74.663673300">
+ <ele>-30.200001</ele>
+<time>2007-03-10T19:05:04Z</time>
+</trkpt>
+<trkpt lat="40.239173300" lon="-74.663685000">
+ <ele>-30.100000</ele>
+<time>2007-03-10T19:05:05Z</time>
+</trkpt>
+<trkpt lat="40.239168300" lon="-74.663696600">
+ <ele>-31.100000</ele>
+<time>2007-03-10T19:05:06Z</time>
+</trkpt>
+<trkpt lat="40.239158300" lon="-74.663703300">
+ <ele>-34.299999</ele>
+<time>2007-03-10T19:05:07Z</time>
+</trkpt>
+<trkpt lat="40.239140000" lon="-74.663708300">
+ <ele>-33.599998</ele>
+<time>2007-03-10T19:05:08Z</time>
+</trkpt>
+<trkpt lat="40.239116650" lon="-74.663708300">
+ <ele>-31.500000</ele>
+<time>2007-03-10T19:05:09Z</time>
+</trkpt>
+<trkpt lat="40.239098300" lon="-74.663706600">
+ <ele>-27.400000</ele>
+<time>2007-03-10T19:05:10Z</time>
+</trkpt>
+<trkpt lat="40.239080000" lon="-74.663701600">
+ <ele>-24.600000</ele>
+<time>2007-03-10T19:05:11Z</time>
+</trkpt>
+<trkpt lat="40.239070000" lon="-74.663698300">
+ <ele>-17.200001</ele>
+<time>2007-03-10T19:05:12Z</time>
+</trkpt>
+<trkpt lat="40.239063300" lon="-74.663698300">
+ <ele>-13.400000</ele>
+<time>2007-03-10T19:05:13Z</time>
+</trkpt>
+<trkpt lat="40.239056650" lon="-74.663696600">
+ <ele>-8.000000</ele>
+<time>2007-03-10T19:05:14Z</time>
+</trkpt>
+<trkpt lat="40.239050000" lon="-74.663683300">
+ <ele>-4.300000</ele>
+<time>2007-03-10T19:05:15Z</time>
+</trkpt>
+<trkpt lat="40.239045000" lon="-74.663680000">
+ <ele>-0.900000</ele>
+<time>2007-03-10T19:05:16Z</time>
+</trkpt>
+<trkpt lat="40.239050000" lon="-74.663675000">
+ <ele>3.000000</ele>
+<time>2007-03-10T19:05:17Z</time>
+</trkpt>
+<trkpt lat="40.239058300" lon="-74.663666600">
+ <ele>8.100000</ele>
+<time>2007-03-10T19:05:18Z</time>
+</trkpt>
+<trkpt lat="40.239063300" lon="-74.663651600">
+ <ele>11.200000</ele>
+<time>2007-03-10T19:05:19Z</time>
+</trkpt>
+<trkpt lat="40.239068300" lon="-74.663638300">
+ <ele>14.600000</ele>
+<time>2007-03-10T19:05:20Z</time>
+</trkpt>
+<trkpt lat="40.239068300" lon="-74.663630000">
+ <ele>17.200001</ele>
+<time>2007-03-10T19:05:21Z</time>
+</trkpt>
+<trkpt lat="40.239071650" lon="-74.663621600">
+ <ele>17.299999</ele>
+<time>2007-03-10T19:05:22Z</time>
+</trkpt>
+<trkpt lat="40.239075000" lon="-74.663611600">
+ <ele>20.500000</ele>
+<time>2007-03-10T19:05:23Z</time>
+</trkpt>
+<trkpt lat="40.239070000" lon="-74.663600000">
+ <ele>21.799999</ele>
+<time>2007-03-10T19:05:24Z</time>
+</trkpt>
+<trkpt lat="40.239064950" lon="-74.663590000">
+ <ele>22.900000</ele>
+<time>2007-03-10T19:05:25Z</time>
+</trkpt>
+<trkpt lat="40.239055000" lon="-74.663580000">
+ <ele>22.799999</ele>
+<time>2007-03-10T19:05:26Z</time>
+</trkpt>
+<trkpt lat="40.239055000" lon="-74.663573300">
+ <ele>23.100000</ele>
+<time>2007-03-10T19:05:27Z</time>
+</trkpt>
+<trkpt lat="40.239056650" lon="-74.663561600">
+ <ele>23.000000</ele>
+<time>2007-03-10T19:05:28Z</time>
+</trkpt>
+<trkpt lat="40.239061650" lon="-74.663551600">
+ <ele>22.200001</ele>
+<time>2007-03-10T19:05:29Z</time>
+</trkpt>
+<trkpt lat="40.239063300" lon="-74.663540000">
+ <ele>21.900000</ele>
+<time>2007-03-10T19:05:30Z</time>
+</trkpt>
+<trkpt lat="40.239064950" lon="-74.663530000">
+ <ele>23.100000</ele>
+<time>2007-03-10T19:05:31Z</time>
+</trkpt>
+<trkpt lat="40.239064950" lon="-74.663516600">
+ <ele>24.299999</ele>
+<time>2007-03-10T19:05:32Z</time>
+</trkpt>
+<trkpt lat="40.239066650" lon="-74.663508300">
+ <ele>27.900000</ele>
+<time>2007-03-10T19:05:33Z</time>
+</trkpt>
+<trkpt lat="40.239070000" lon="-74.663501600">
+ <ele>27.799999</ele>
+<time>2007-03-10T19:05:34Z</time>
+</trkpt>
+<trkpt lat="40.239070000" lon="-74.663493300">
+ <ele>25.299999</ele>
+<time>2007-03-10T19:05:35Z</time>
+</trkpt>
+<trkpt lat="40.239066650" lon="-74.663481600">
+ <ele>26.299999</ele>
+<time>2007-03-10T19:05:36Z</time>
+</trkpt>
+<trkpt lat="40.239058300" lon="-74.663465000">
+ <ele>29.200001</ele>
+<time>2007-03-10T19:05:37Z</time>
+</trkpt>
+<trkpt lat="40.239056650" lon="-74.663453300">
+ <ele>31.200001</ele>
+<time>2007-03-10T19:05:38Z</time>
+</trkpt>
+<trkpt lat="40.239061650" lon="-74.663436600">
+ <ele>30.100000</ele>
+<time>2007-03-10T19:05:39Z</time>
+</trkpt>
+<trkpt lat="40.239063300" lon="-74.663420000">
+ <ele>32.400002</ele>
+<time>2007-03-10T19:05:40Z</time>
+</trkpt>
+<trkpt lat="40.239063300" lon="-74.663411600">
+ <ele>34.700001</ele>
+<time>2007-03-10T19:05:41Z</time>
+</trkpt>
+<trkpt lat="40.239061650" lon="-74.663395000">
+ <ele>37.099998</ele>
+<time>2007-03-10T19:05:42Z</time>
+</trkpt>
+<trkpt lat="40.239053300" lon="-74.663376600">
+ <ele>38.200001</ele>
+<time>2007-03-10T19:05:43Z</time>
+</trkpt>
+<trkpt lat="40.239053300" lon="-74.663361600">
+ <ele>39.599998</ele>
+<time>2007-03-10T19:05:44Z</time>
+</trkpt>
+<trkpt lat="40.239055000" lon="-74.663338300">
+ <ele>38.299999</ele>
+<time>2007-03-10T19:05:45Z</time>
+</trkpt>
+<trkpt lat="40.239056650" lon="-74.663320000">
+ <ele>38.200001</ele>
+<time>2007-03-10T19:05:46Z</time>
+</trkpt>
+<trkpt lat="40.239058300" lon="-74.663308300">
+ <ele>37.299999</ele>
+<time>2007-03-10T19:05:47Z</time>
+</trkpt>
+<trkpt lat="40.239060000" lon="-74.663293300">
+ <ele>35.700001</ele>
+<time>2007-03-10T19:05:48Z</time>
+</trkpt>
+<trkpt lat="40.239068300" lon="-74.663281600">
+ <ele>34.400002</ele>
+<time>2007-03-10T19:05:49Z</time>
+</trkpt>
+<trkpt lat="40.239085000" lon="-74.663273300">
+ <ele>30.400000</ele>
+<time>2007-03-10T19:05:50Z</time>
+</trkpt>
+<trkpt lat="40.239093300" lon="-74.663256600">
+ <ele>29.400000</ele>
+<time>2007-03-10T19:05:51Z</time>
+</trkpt>
+<trkpt lat="40.239103300" lon="-74.663240000">
+ <ele>28.600000</ele>
+<time>2007-03-10T19:05:52Z</time>
+</trkpt>
+<trkpt lat="40.239111650" lon="-74.663223300">
+ <ele>27.299999</ele>
+<time>2007-03-10T19:05:53Z</time>
+</trkpt>
+<trkpt lat="40.239118300" lon="-74.663206600">
+ <ele>27.000000</ele>
+<time>2007-03-10T19:05:54Z</time>
+</trkpt>
+<trkpt lat="40.239121650" lon="-74.663188300">
+ <ele>27.900000</ele>
+<time>2007-03-10T19:05:55Z</time>
+</trkpt>
+<trkpt lat="40.239123300" lon="-74.663173300">
+ <ele>27.900000</ele>
+<time>2007-03-10T19:05:56Z</time>
+</trkpt>
+<trkpt lat="40.239128300" lon="-74.663156600">
+ <ele>26.100000</ele>
+<time>2007-03-10T19:05:57Z</time>
+</trkpt>
+<trkpt lat="40.239128300" lon="-74.663133300">
+ <ele>25.299999</ele>
+<time>2007-03-10T19:05:58Z</time>
+</trkpt>
+<trkpt lat="40.239130000" lon="-74.663111600">
+ <ele>25.400000</ele>
+<time>2007-03-10T19:05:59Z</time>
+</trkpt>
+<trkpt lat="40.239136650" lon="-74.663083300">
+ <ele>25.200001</ele>
+<time>2007-03-10T19:06:00Z</time>
+</trkpt>
+<trkpt lat="40.239146650" lon="-74.663060000">
+ <ele>23.799999</ele>
+<time>2007-03-10T19:06:01Z</time>
+</trkpt>
+<trkpt lat="40.239158300" lon="-74.663040000">
+ <ele>22.799999</ele>
+<time>2007-03-10T19:06:02Z</time>
+</trkpt>
+<trkpt lat="40.239178300" lon="-74.663023300">
+ <ele>21.100000</ele>
+<time>2007-03-10T19:06:03Z</time>
+</trkpt>
+<trkpt lat="40.239186650" lon="-74.663000000">
+ <ele>20.200001</ele>
+<time>2007-03-10T19:06:04Z</time>
+</trkpt>
+<trkpt lat="40.239185000" lon="-74.662968300">
+ <ele>20.200001</ele>
+<time>2007-03-10T19:06:05Z</time>
+</trkpt>
+<trkpt lat="40.239185000" lon="-74.662944900">
+ <ele>18.900000</ele>
+<time>2007-03-10T19:06:06Z</time>
+</trkpt>
+<trkpt lat="40.239188300" lon="-74.662928300">
+ <ele>19.000000</ele>
+<time>2007-03-10T19:06:07Z</time>
+</trkpt>
+<trkpt lat="40.239195000" lon="-74.662915000">
+ <ele>18.100000</ele>
+<time>2007-03-10T19:06:08Z</time>
+</trkpt>
+<trkpt lat="40.239206650" lon="-74.662901600">
+ <ele>16.400000</ele>
+<time>2007-03-10T19:06:09Z</time>
+</trkpt>
+<trkpt lat="40.239215000" lon="-74.662886600">
+ <ele>14.600000</ele>
+<time>2007-03-10T19:06:10Z</time>
+</trkpt>
+<trkpt lat="40.239221650" lon="-74.662863300">
+ <ele>12.400000</ele>
+<time>2007-03-10T19:06:11Z</time>
+</trkpt>
+<trkpt lat="40.239228300" lon="-74.662841600">
+ <ele>11.900000</ele>
+<time>2007-03-10T19:06:12Z</time>
+</trkpt>
+<trkpt lat="40.239228300" lon="-74.662820000">
+ <ele>9.400000</ele>
+<time>2007-03-10T19:06:13Z</time>
+</trkpt>
+<trkpt lat="40.239230000" lon="-74.662796600">
+ <ele>8.300000</ele>
+<time>2007-03-10T19:06:14Z</time>
+</trkpt>
+<trkpt lat="40.239240000" lon="-74.662780000">
+ <ele>5.700000</ele>
+<time>2007-03-10T19:06:15Z</time>
+</trkpt>
+<trkpt lat="40.239243300" lon="-74.662760000">
+ <ele>6.800000</ele>
+<time>2007-03-10T19:06:16Z</time>
+</trkpt>
+<trkpt lat="40.239244950" lon="-74.662751600">
+ <ele>7.500000</ele>
+<time>2007-03-10T19:06:17Z</time>
+</trkpt>
+<trkpt lat="40.239248300" lon="-74.662741600">
+ <ele>5.100000</ele>
+<time>2007-03-10T19:06:18Z</time>
+</trkpt>
+<trkpt lat="40.239248300" lon="-74.662731600">
+ <ele>3.700000</ele>
+<time>2007-03-10T19:06:19Z</time>
+</trkpt>
+<trkpt lat="40.239255000" lon="-74.662718300">
+ <ele>2.900000</ele>
+<time>2007-03-10T19:06:20Z</time>
+</trkpt>
+<trkpt lat="40.239261650" lon="-74.662700000">
+ <ele>0.300000</ele>
+<time>2007-03-10T19:06:21Z</time>
+</trkpt>
+<trkpt lat="40.239268300" lon="-74.662685000">
+ <ele>0.300000</ele>
+<time>2007-03-10T19:06:22Z</time>
+</trkpt>
+<trkpt lat="40.239276650" lon="-74.662661600">
+ <ele>-3.600000</ele>
+<time>2007-03-10T19:06:23Z</time>
+</trkpt>
+<trkpt lat="40.239285000" lon="-74.662640000">
+ <ele>-5.900000</ele>
+<time>2007-03-10T19:06:24Z</time>
+</trkpt>
+<trkpt lat="40.239293300" lon="-74.662620000">
+ <ele>-8.800000</ele>
+<time>2007-03-10T19:06:25Z</time>
+</trkpt>
+<trkpt lat="40.239296650" lon="-74.662600000">
+ <ele>-8.700000</ele>
+<time>2007-03-10T19:06:26Z</time>
+</trkpt>
+<trkpt lat="40.239296650" lon="-74.662580000">
+ <ele>-9.200000</ele>
+<time>2007-03-10T19:06:27Z</time>
+</trkpt>
+<trkpt lat="40.239308300" lon="-74.662568300">
+ <ele>-9.900000</ele>
+<time>2007-03-10T19:06:28Z</time>
+</trkpt>
+<trkpt lat="40.239325000" lon="-74.662555000">
+ <ele>-10.600000</ele>
+<time>2007-03-10T19:06:29Z</time>
+</trkpt>
+<trkpt lat="40.239334950" lon="-74.662540000">
+ <ele>-10.700000</ele>
+<time>2007-03-10T19:06:30Z</time>
+</trkpt>
+<trkpt lat="40.239355000" lon="-74.662530000">
+ <ele>-10.900000</ele>
+<time>2007-03-10T19:06:31Z</time>
+</trkpt>
+<trkpt lat="40.239368300" lon="-74.662511600">
+ <ele>-10.800000</ele>
+<time>2007-03-10T19:06:32Z</time>
+</trkpt>
+<trkpt lat="40.239373300" lon="-74.662493300">
+ <ele>-11.800000</ele>
+<time>2007-03-10T19:06:33Z</time>
+</trkpt>
+<trkpt lat="40.239380000" lon="-74.662476600">
+ <ele>-13.100000</ele>
+<time>2007-03-10T19:06:34Z</time>
+</trkpt>
+<trkpt lat="40.239386650" lon="-74.662458300">
+ <ele>-15.300000</ele>
+<time>2007-03-10T19:06:35Z</time>
+</trkpt>
+<trkpt lat="40.239400000" lon="-74.662436600">
+ <ele>-14.500000</ele>
+<time>2007-03-10T19:06:36Z</time>
+</trkpt>
+<trkpt lat="40.239415000" lon="-74.662416600">
+ <ele>-14.600000</ele>
+<time>2007-03-10T19:06:37Z</time>
+</trkpt>
+<trkpt lat="40.239433300" lon="-74.662398300">
+ <ele>-14.700000</ele>
+<time>2007-03-10T19:06:38Z</time>
+</trkpt>
+<trkpt lat="40.239448300" lon="-74.662380000">
+ <ele>-15.600000</ele>
+<time>2007-03-10T19:06:39Z</time>
+</trkpt>
+<trkpt lat="40.239458300" lon="-74.662356600">
+ <ele>-19.500000</ele>
+<time>2007-03-10T19:06:40Z</time>
+</trkpt>
+<trkpt lat="40.239473300" lon="-74.662340000">
+ <ele>-22.400000</ele>
+<time>2007-03-10T19:06:41Z</time>
+</trkpt>
+<trkpt lat="40.239488300" lon="-74.662325000">
+ <ele>-20.600000</ele>
+<time>2007-03-10T19:06:42Z</time>
+</trkpt>
+<trkpt lat="40.239503300" lon="-74.662306600">
+ <ele>-20.000000</ele>
+<time>2007-03-10T19:06:43Z</time>
+</trkpt>
+<trkpt lat="40.239521650" lon="-74.662288300">
+ <ele>-20.100000</ele>
+<time>2007-03-10T19:06:44Z</time>
+</trkpt>
+<trkpt lat="40.239543300" lon="-74.662274900">
+ <ele>-20.600000</ele>
+<time>2007-03-10T19:06:45Z</time>
+</trkpt>
+<trkpt lat="40.239560000" lon="-74.662260000">
+ <ele>-20.900000</ele>
+<time>2007-03-10T19:06:46Z</time>
+</trkpt>
+<trkpt lat="40.239576650" lon="-74.662243300">
+ <ele>-21.799999</ele>
+<time>2007-03-10T19:06:47Z</time>
+</trkpt>
+<trkpt lat="40.239576650" lon="-74.662228300">
+ <ele>-25.500000</ele>
+<time>2007-03-10T19:06:48Z</time>
+</trkpt>
+<trkpt lat="40.239579950" lon="-74.662223300">
+ <ele>-26.100000</ele>
+<time>2007-03-10T19:06:49Z</time>
+</trkpt>
+<trkpt lat="40.239593300" lon="-74.662221600">
+ <ele>-25.500000</ele>
+<time>2007-03-10T19:06:50Z</time>
+</trkpt>
+<trkpt lat="40.239608300" lon="-74.662211600">
+ <ele>-24.500000</ele>
+<time>2007-03-10T19:06:51Z</time>
+</trkpt>
+<trkpt lat="40.239618300" lon="-74.662196600">
+ <ele>-25.000000</ele>
+<time>2007-03-10T19:06:52Z</time>
+</trkpt>
+<trkpt lat="40.239624950" lon="-74.662176600">
+ <ele>-24.900000</ele>
+<time>2007-03-10T19:06:53Z</time>
+</trkpt>
+<trkpt lat="40.239633300" lon="-74.662155000">
+ <ele>-23.299999</ele>
+<time>2007-03-10T19:06:54Z</time>
+</trkpt>
+<trkpt lat="40.239641650" lon="-74.662141600">
+ <ele>-23.100000</ele>
+<time>2007-03-10T19:06:55Z</time>
+</trkpt>
+<trkpt lat="40.239650000" lon="-74.662131600">
+ <ele>-20.700001</ele>
+<time>2007-03-10T19:06:56Z</time>
+</trkpt>
+<trkpt lat="40.239660000" lon="-74.662118300">
+ <ele>-17.799999</ele>
+<time>2007-03-10T19:06:57Z</time>
+</trkpt>
+<trkpt lat="40.239676650" lon="-74.662108300">
+ <ele>-15.600000</ele>
+<time>2007-03-10T19:06:58Z</time>
+</trkpt>
+<trkpt lat="40.239685000" lon="-74.662088300">
+ <ele>-14.700000</ele>
+<time>2007-03-10T19:06:59Z</time>
+</trkpt>
+<trkpt lat="40.239705000" lon="-74.662075000">
+ <ele>-14.100000</ele>
+<time>2007-03-10T19:07:00Z</time>
+</trkpt>
+<trkpt lat="40.239710000" lon="-74.662049900">
+ <ele>-11.500000</ele>
+<time>2007-03-10T19:07:01Z</time>
+</trkpt>
+<trkpt lat="40.239720000" lon="-74.662025000">
+ <ele>-12.500000</ele>
+<time>2007-03-10T19:07:02Z</time>
+</trkpt>
+<trkpt lat="40.239731650" lon="-74.661998300">
+ <ele>-12.200000</ele>
+<time>2007-03-10T19:07:03Z</time>
+</trkpt>
+<trkpt lat="40.239736650" lon="-74.661975000">
+ <ele>-12.500000</ele>
+<time>2007-03-10T19:07:04Z</time>
+</trkpt>
+<trkpt lat="40.239735000" lon="-74.661953300">
+ <ele>-11.800000</ele>
+<time>2007-03-10T19:07:05Z</time>
+</trkpt>
+<trkpt lat="40.239736650" lon="-74.661935000">
+ <ele>-10.600000</ele>
+<time>2007-03-10T19:07:06Z</time>
+</trkpt>
+<trkpt lat="40.239741650" lon="-74.661911600">
+ <ele>-8.000000</ele>
+<time>2007-03-10T19:07:07Z</time>
+</trkpt>
+<trkpt lat="40.239750000" lon="-74.661888300">
+ <ele>-5.600000</ele>
+<time>2007-03-10T19:07:08Z</time>
+</trkpt>
+<trkpt lat="40.239756650" lon="-74.661863300">
+ <ele>-4.600000</ele>
+<time>2007-03-10T19:07:09Z</time>
+</trkpt>
+<trkpt lat="40.239761650" lon="-74.661850000">
+ <ele>-3.900000</ele>
+<time>2007-03-10T19:07:10Z</time>
+</trkpt>
+<trkpt lat="40.239768300" lon="-74.661845000">
+ <ele>-1.800000</ele>
+<time>2007-03-10T19:07:11Z</time>
+</trkpt>
+<trkpt lat="40.239770000" lon="-74.661841600">
+ <ele>-0.100000</ele>
+<time>2007-03-10T19:07:12Z</time>
+</trkpt>
+<trkpt lat="40.239763300" lon="-74.661826600">
+ <ele>0.100000</ele>
+<time>2007-03-10T19:07:13Z</time>
+</trkpt>
+<trkpt lat="40.239756650" lon="-74.661815000">
+ <ele>1.000000</ele>
+<time>2007-03-10T19:07:14Z</time>
+</trkpt>
+<trkpt lat="40.239746650" lon="-74.661793300">
+ <ele>1.000000</ele>
+<time>2007-03-10T19:07:16Z</time>
+</trkpt>
+<trkpt lat="40.239751650" lon="-74.661771600">
+ <ele>1.800000</ele>
+<time>2007-03-10T19:07:17Z</time>
+</trkpt>
+<trkpt lat="40.239765000" lon="-74.661756600">
+ <ele>2.200000</ele>
+<time>2007-03-10T19:07:18Z</time>
+</trkpt>
+<trkpt lat="40.239770000" lon="-74.661740000">
+ <ele>3.800000</ele>
+<time>2007-03-10T19:07:19Z</time>
+</trkpt>
+<trkpt lat="40.239773300" lon="-74.661720000">
+ <ele>5.000000</ele>
+<time>2007-03-10T19:07:20Z</time>
+</trkpt>
+<trkpt lat="40.239775000" lon="-74.661695000">
+ <ele>6.300000</ele>
+<time>2007-03-10T19:07:21Z</time>
+</trkpt>
+<trkpt lat="40.239773300" lon="-74.661675000">
+ <ele>6.800000</ele>
+<time>2007-03-10T19:07:22Z</time>
+</trkpt>
+<trkpt lat="40.239770000" lon="-74.661655000">
+ <ele>8.400000</ele>
+<time>2007-03-10T19:07:23Z</time>
+</trkpt>
+<trkpt lat="40.239766650" lon="-74.661631600">
+ <ele>9.400000</ele>
+<time>2007-03-10T19:07:24Z</time>
+</trkpt>
+<trkpt lat="40.239761650" lon="-74.661605000">
+ <ele>10.300000</ele>
+<time>2007-03-10T19:07:25Z</time>
+</trkpt>
+<trkpt lat="40.239750000" lon="-74.661575000">
+ <ele>11.300000</ele>
+<time>2007-03-10T19:07:26Z</time>
+</trkpt>
+<trkpt lat="40.239741650" lon="-74.661551600">
+ <ele>13.700000</ele>
+<time>2007-03-10T19:07:27Z</time>
+</trkpt>
+<trkpt lat="40.239733300" lon="-74.661533300">
+ <ele>15.600000</ele>
+<time>2007-03-10T19:07:28Z</time>
+</trkpt>
+<trkpt lat="40.239726650" lon="-74.661510000">
+ <ele>19.000000</ele>
+<time>2007-03-10T19:07:29Z</time>
+</trkpt>
+<trkpt lat="40.239721650" lon="-74.661490000">
+ <ele>19.299999</ele>
+<time>2007-03-10T19:07:30Z</time>
+</trkpt>
+<trkpt lat="40.239716650" lon="-74.661473300">
+ <ele>20.500000</ele>
+<time>2007-03-10T19:07:31Z</time>
+</trkpt>
+<trkpt lat="40.239714950" lon="-74.661466600">
+ <ele>21.400000</ele>
+<time>2007-03-10T19:07:32Z</time>
+</trkpt>
+<trkpt lat="40.239713300" lon="-74.661456600">
+ <ele>23.000000</ele>
+<time>2007-03-10T19:07:33Z</time>
+</trkpt>
+<trkpt lat="40.239706650" lon="-74.661445000">
+ <ele>24.200001</ele>
+<time>2007-03-10T19:07:34Z</time>
+</trkpt>
+<trkpt lat="40.239708300" lon="-74.661426600">
+ <ele>28.799999</ele>
+<time>2007-03-10T19:07:36Z</time>
+</trkpt>
+<trkpt lat="40.239714950" lon="-74.661411600">
+ <ele>31.100000</ele>
+<time>2007-03-10T19:07:37Z</time>
+</trkpt>
+<trkpt lat="40.239714950" lon="-74.661396600">
+ <ele>35.099998</ele>
+<time>2007-03-10T19:07:38Z</time>
+</trkpt>
+<trkpt lat="40.239708300" lon="-74.661376600">
+ <ele>39.799999</ele>
+<time>2007-03-10T19:07:39Z</time>
+</trkpt>
+<trkpt lat="40.239695000" lon="-74.661351600">
+ <ele>46.200001</ele>
+<time>2007-03-10T19:07:40Z</time>
+</trkpt>
+<trkpt lat="40.239678300" lon="-74.661334900">
+ <ele>51.000000</ele>
+<time>2007-03-10T19:07:41Z</time>
+</trkpt>
+<trkpt lat="40.239660000" lon="-74.661325000">
+ <ele>52.799999</ele>
+<time>2007-03-10T19:07:42Z</time>
+</trkpt>
+<trkpt lat="40.239640000" lon="-74.661311600">
+ <ele>53.900002</ele>
+<time>2007-03-10T19:07:43Z</time>
+</trkpt>
+<trkpt lat="40.239616650" lon="-74.661293300">
+ <ele>58.500000</ele>
+<time>2007-03-10T19:07:44Z</time>
+</trkpt>
+<trkpt lat="40.239591650" lon="-74.661275000">
+ <ele>63.400002</ele>
+<time>2007-03-10T19:07:45Z</time>
+</trkpt>
+<trkpt lat="40.239568300" lon="-74.661255000">
+ <ele>66.599998</ele>
+<time>2007-03-10T19:07:46Z</time>
+</trkpt>
+<trkpt lat="40.239553300" lon="-74.661231600">
+ <ele>70.099998</ele>
+<time>2007-03-10T19:07:47Z</time>
+</trkpt>
+<trkpt lat="40.239541650" lon="-74.661206600">
+ <ele>74.099998</ele>
+<time>2007-03-10T19:07:48Z</time>
+</trkpt>
+<trkpt lat="40.239533300" lon="-74.661178300">
+ <ele>77.400002</ele>
+<time>2007-03-10T19:07:49Z</time>
+</trkpt>
+<trkpt lat="40.239521650" lon="-74.661158300">
+ <ele>81.599998</ele>
+<time>2007-03-10T19:07:50Z</time>
+</trkpt>
+<trkpt lat="40.239508300" lon="-74.661146600">
+ <ele>84.599998</ele>
+<time>2007-03-10T19:07:51Z</time>
+</trkpt>
+<trkpt lat="40.239491650" lon="-74.661133300">
+ <ele>87.900002</ele>
+<time>2007-03-10T19:07:52Z</time>
+</trkpt>
+<trkpt lat="40.239476650" lon="-74.661118300">
+ <ele>91.599998</ele>
+<time>2007-03-10T19:07:53Z</time>
+</trkpt>
+<trkpt lat="40.239470000" lon="-74.661108300">
+ <ele>91.199997</ele>
+<time>2007-03-10T19:07:54Z</time>
+</trkpt>
+<trkpt lat="40.239465000" lon="-74.661093300">
+ <ele>91.099998</ele>
+<time>2007-03-10T19:07:55Z</time>
+</trkpt>
+<trkpt lat="40.239453300" lon="-74.661080000">
+ <ele>92.300003</ele>
+<time>2007-03-10T19:07:56Z</time>
+</trkpt>
+<trkpt lat="40.239443300" lon="-74.661061600">
+ <ele>94.199997</ele>
+<time>2007-03-10T19:07:57Z</time>
+</trkpt>
+<trkpt lat="40.239435000" lon="-74.661043300">
+ <ele>96.000000</ele>
+<time>2007-03-10T19:07:58Z</time>
+</trkpt>
+<trkpt lat="40.239431650" lon="-74.661033300">
+ <ele>96.300003</ele>
+<time>2007-03-10T19:07:59Z</time>
+</trkpt>
+<trkpt lat="40.239430000" lon="-74.661031600">
+ <ele>95.000000</ele>
+<time>2007-03-10T19:08:00Z</time>
+</trkpt>
+<trkpt lat="40.239428300" lon="-74.661023300">
+ <ele>95.699997</ele>
+<time>2007-03-10T19:08:02Z</time>
+</trkpt>
+<trkpt lat="40.239430000" lon="-74.661018300">
+ <ele>97.400002</ele>
+<time>2007-03-10T19:08:03Z</time>
+</trkpt>
+<trkpt lat="40.239425000" lon="-74.661011600">
+ <ele>99.199997</ele>
+<time>2007-03-10T19:08:04Z</time>
+</trkpt>
+<trkpt lat="40.239416650" lon="-74.661001600">
+ <ele>100.199997</ele>
+<time>2007-03-10T19:08:05Z</time>
+</trkpt>
+<trkpt lat="40.239410000" lon="-74.660985000">
+ <ele>101.599998</ele>
+<time>2007-03-10T19:08:06Z</time>
+</trkpt>
+<trkpt lat="40.239401650" lon="-74.660965000">
+ <ele>102.500000</ele>
+<time>2007-03-10T19:08:07Z</time>
+</trkpt>
+<trkpt lat="40.239391650" lon="-74.660953300">
+ <ele>104.500000</ele>
+<time>2007-03-10T19:08:08Z</time>
+</trkpt>
+<trkpt lat="40.239376650" lon="-74.660945000">
+ <ele>104.199997</ele>
+<time>2007-03-10T19:08:09Z</time>
+</trkpt>
+<trkpt lat="40.239363300" lon="-74.660928300">
+ <ele>105.000000</ele>
+<time>2007-03-10T19:08:10Z</time>
+</trkpt>
+<trkpt lat="40.239350000" lon="-74.660906600">
+ <ele>106.800003</ele>
+<time>2007-03-10T19:08:11Z</time>
+</trkpt>
+<trkpt lat="40.239331650" lon="-74.660883300">
+ <ele>104.599998</ele>
+<time>2007-03-10T19:08:12Z</time>
+</trkpt>
+<trkpt lat="40.239311650" lon="-74.660863300">
+ <ele>100.800003</ele>
+<time>2007-03-10T19:08:13Z</time>
+</trkpt>
+<trkpt lat="40.239291650" lon="-74.660839900">
+ <ele>99.699997</ele>
+<time>2007-03-10T19:08:14Z</time>
+</trkpt>
+<trkpt lat="40.239278300" lon="-74.660826600">
+ <ele>99.000000</ele>
+<time>2007-03-10T19:08:15Z</time>
+</trkpt>
+<trkpt lat="40.239270000" lon="-74.660821600">
+ <ele>97.000000</ele>
+<time>2007-03-10T19:08:16Z</time>
+</trkpt>
+<trkpt lat="40.239261650" lon="-74.660820000">
+ <ele>94.300003</ele>
+<time>2007-03-10T19:08:17Z</time>
+</trkpt>
+<trkpt lat="40.239253300" lon="-74.660810000">
+ <ele>92.300003</ele>
+<time>2007-03-10T19:08:18Z</time>
+</trkpt>
+<trkpt lat="40.239246650" lon="-74.660794900">
+ <ele>91.099998</ele>
+<time>2007-03-10T19:08:19Z</time>
+</trkpt>
+<trkpt lat="40.239241650" lon="-74.660778300">
+ <ele>91.500000</ele>
+<time>2007-03-10T19:08:20Z</time>
+</trkpt>
+<trkpt lat="40.239238300" lon="-74.660775000">
+ <ele>91.099998</ele>
+<time>2007-03-10T19:08:21Z</time>
+</trkpt>
+<trkpt lat="40.239233300" lon="-74.660771600">
+ <ele>89.800003</ele>
+<time>2007-03-10T19:08:22Z</time>
+</trkpt>
+<trkpt lat="40.239226650" lon="-74.660758300">
+ <ele>88.500000</ele>
+<time>2007-03-10T19:08:23Z</time>
+</trkpt>
+<trkpt lat="40.239216650" lon="-74.660745000">
+ <ele>89.099998</ele>
+<time>2007-03-10T19:08:24Z</time>
+</trkpt>
+<trkpt lat="40.239199950" lon="-74.660726600">
+ <ele>85.099998</ele>
+<time>2007-03-10T19:08:25Z</time>
+</trkpt>
+<trkpt lat="40.239188300" lon="-74.660711600">
+ <ele>83.300003</ele>
+<time>2007-03-10T19:08:26Z</time>
+</trkpt>
+<trkpt lat="40.239173300" lon="-74.660695000">
+ <ele>82.000000</ele>
+<time>2007-03-10T19:08:27Z</time>
+</trkpt>
+<trkpt lat="40.239163300" lon="-74.660681600">
+ <ele>79.199997</ele>
+<time>2007-03-10T19:08:28Z</time>
+</trkpt>
+<trkpt lat="40.239150000" lon="-74.660671600">
+ <ele>76.900002</ele>
+<time>2007-03-10T19:08:29Z</time>
+</trkpt>
+<trkpt lat="40.239140000" lon="-74.660658300">
+ <ele>78.199997</ele>
+<time>2007-03-10T19:08:30Z</time>
+</trkpt>
+<trkpt lat="40.239131650" lon="-74.660643300">
+ <ele>80.000000</ele>
+<time>2007-03-10T19:08:31Z</time>
+</trkpt>
+<trkpt lat="40.239123300" lon="-74.660626600">
+ <ele>81.199997</ele>
+<time>2007-03-10T19:08:32Z</time>
+</trkpt>
+<trkpt lat="40.239115000" lon="-74.660610000">
+ <ele>81.300003</ele>
+<time>2007-03-10T19:08:33Z</time>
+</trkpt>
+<trkpt lat="40.239106650" lon="-74.660600000">
+ <ele>79.500000</ele>
+<time>2007-03-10T19:08:34Z</time>
+</trkpt>
+<trkpt lat="40.239100000" lon="-74.660585000">
+ <ele>79.199997</ele>
+<time>2007-03-10T19:08:35Z</time>
+</trkpt>
+<trkpt lat="40.239093300" lon="-74.660571600">
+ <ele>78.400002</ele>
+<time>2007-03-10T19:08:36Z</time>
+</trkpt>
+<trkpt lat="40.239085000" lon="-74.660558300">
+ <ele>77.099998</ele>
+<time>2007-03-10T19:08:37Z</time>
+</trkpt>
+<trkpt lat="40.239075000" lon="-74.660540000">
+ <ele>78.000000</ele>
+<time>2007-03-10T19:08:38Z</time>
+</trkpt>
+<trkpt lat="40.239064950" lon="-74.660525000">
+ <ele>78.199997</ele>
+<time>2007-03-10T19:08:39Z</time>
+</trkpt>
+<trkpt lat="40.239055000" lon="-74.660513300">
+ <ele>76.599998</ele>
+<time>2007-03-10T19:08:40Z</time>
+</trkpt>
+<trkpt lat="40.239045000" lon="-74.660498300">
+ <ele>78.000000</ele>
+<time>2007-03-10T19:08:41Z</time>
+</trkpt>
+<trkpt lat="40.239035000" lon="-74.660476600">
+ <ele>81.199997</ele>
+<time>2007-03-10T19:08:42Z</time>
+</trkpt>
+<trkpt lat="40.239021650" lon="-74.660460000">
+ <ele>82.599998</ele>
+<time>2007-03-10T19:08:43Z</time>
+</trkpt>
+<trkpt lat="40.239010000" lon="-74.660450000">
+ <ele>79.800003</ele>
+<time>2007-03-10T19:08:44Z</time>
+</trkpt>
+<trkpt lat="40.239000000" lon="-74.660435000">
+ <ele>78.099998</ele>
+<time>2007-03-10T19:08:45Z</time>
+</trkpt>
+<trkpt lat="40.238991650" lon="-74.660418300">
+ <ele>77.199997</ele>
+<time>2007-03-10T19:08:46Z</time>
+</trkpt>
+<trkpt lat="40.238983300" lon="-74.660411600">
+ <ele>75.400002</ele>
+<time>2007-03-10T19:08:47Z</time>
+</trkpt>
+<trkpt lat="40.238971650" lon="-74.660401600">
+ <ele>77.400002</ele>
+<time>2007-03-10T19:08:48Z</time>
+</trkpt>
+<trkpt lat="40.238960000" lon="-74.660396600">
+ <ele>76.800003</ele>
+<time>2007-03-10T19:08:49Z</time>
+</trkpt>
+<trkpt lat="40.238950000" lon="-74.660386600">
+ <ele>76.800003</ele>
+<time>2007-03-10T19:08:50Z</time>
+</trkpt>
+<trkpt lat="40.238943300" lon="-74.660383300">
+ <ele>77.000000</ele>
+<time>2007-03-10T19:08:51Z</time>
+</trkpt>
+<trkpt lat="40.238935000" lon="-74.660381600">
+ <ele>78.300003</ele>
+<time>2007-03-10T19:08:52Z</time>
+</trkpt>
+<trkpt lat="40.238926650" lon="-74.660380000">
+ <ele>78.800003</ele>
+<time>2007-03-10T19:08:53Z</time>
+</trkpt>
+<trkpt lat="40.238915000" lon="-74.660376600">
+ <ele>77.500000</ele>
+<time>2007-03-10T19:08:54Z</time>
+</trkpt>
+<trkpt lat="40.238903300" lon="-74.660366600">
+ <ele>78.599998</ele>
+<time>2007-03-10T19:08:55Z</time>
+</trkpt>
+<trkpt lat="40.238890000" lon="-74.660355000">
+ <ele>78.099998</ele>
+<time>2007-03-10T19:08:56Z</time>
+</trkpt>
+<trkpt lat="40.238881650" lon="-74.660333300">
+ <ele>79.099998</ele>
+<time>2007-03-10T19:08:57Z</time>
+</trkpt>
+<trkpt lat="40.238878300" lon="-74.660313300">
+ <ele>78.300003</ele>
+<time>2007-03-10T19:08:58Z</time>
+</trkpt>
+<trkpt lat="40.238880000" lon="-74.660296600">
+ <ele>77.199997</ele>
+<time>2007-03-10T19:08:59Z</time>
+</trkpt>
+<trkpt lat="40.238881650" lon="-74.660288300">
+ <ele>76.199997</ele>
+<time>2007-03-10T19:09:00Z</time>
+</trkpt>
+<trkpt lat="40.238878300" lon="-74.660276600">
+ <ele>72.599998</ele>
+<time>2007-03-10T19:09:01Z</time>
+</trkpt>
+<trkpt lat="40.238876650" lon="-74.660259900">
+ <ele>69.599998</ele>
+<time>2007-03-10T19:09:02Z</time>
+</trkpt>
+<trkpt lat="40.238876650" lon="-74.660245000">
+ <ele>67.400002</ele>
+<time>2007-03-10T19:09:03Z</time>
+</trkpt>
+<trkpt lat="40.238875000" lon="-74.660231600">
+ <ele>64.699997</ele>
+<time>2007-03-10T19:09:04Z</time>
+</trkpt>
+<trkpt lat="40.238878300" lon="-74.660214900">
+ <ele>61.900002</ele>
+<time>2007-03-10T19:09:05Z</time>
+</trkpt>
+<trkpt lat="40.238888300" lon="-74.660203300">
+ <ele>59.400002</ele>
+<time>2007-03-10T19:09:06Z</time>
+</trkpt>
+<trkpt lat="40.238895000" lon="-74.660195000">
+ <ele>57.799999</ele>
+<time>2007-03-10T19:09:07Z</time>
+</trkpt>
+<trkpt lat="40.238903300" lon="-74.660190000">
+ <ele>54.299999</ele>
+<time>2007-03-10T19:09:08Z</time>
+</trkpt>
+<trkpt lat="40.238913300" lon="-74.660183300">
+ <ele>51.500000</ele>
+<time>2007-03-10T19:09:09Z</time>
+</trkpt>
+<trkpt lat="40.238930000" lon="-74.660178300">
+ <ele>48.000000</ele>
+<time>2007-03-10T19:09:10Z</time>
+</trkpt>
+<trkpt lat="40.238943300" lon="-74.660186600">
+ <ele>45.400002</ele>
+<time>2007-03-10T19:09:11Z</time>
+</trkpt>
+<trkpt lat="40.238956650" lon="-74.660193300">
+ <ele>43.000000</ele>
+<time>2007-03-10T19:09:12Z</time>
+</trkpt>
+<trkpt lat="40.238968300" lon="-74.660186600">
+ <ele>42.200001</ele>
+<time>2007-03-10T19:09:13Z</time>
+</trkpt>
+<trkpt lat="40.238986650" lon="-74.660181600">
+ <ele>40.200001</ele>
+<time>2007-03-10T19:09:14Z</time>
+</trkpt>
+<trkpt lat="40.239015000" lon="-74.660180000">
+ <ele>37.700001</ele>
+<time>2007-03-10T19:09:15Z</time>
+</trkpt>
+<trkpt lat="40.239040000" lon="-74.660180000">
+ <ele>36.599998</ele>
+<time>2007-03-10T19:09:16Z</time>
+</trkpt>
+<trkpt lat="40.239058300" lon="-74.660175000">
+ <ele>35.799999</ele>
+<time>2007-03-10T19:09:17Z</time>
+</trkpt>
+<trkpt lat="40.239075000" lon="-74.660161600">
+ <ele>33.599998</ele>
+<time>2007-03-10T19:09:18Z</time>
+</trkpt>
+<trkpt lat="40.239086650" lon="-74.660136600">
+ <ele>33.400002</ele>
+<time>2007-03-10T19:09:19Z</time>
+</trkpt>
+<trkpt lat="40.239115000" lon="-74.660124900">
+ <ele>30.299999</ele>
+<time>2007-03-10T19:09:20Z</time>
+</trkpt>
+<trkpt lat="40.239123300" lon="-74.660110000">
+ <ele>28.900000</ele>
+<time>2007-03-10T19:09:21Z</time>
+</trkpt>
+<trkpt lat="40.239131650" lon="-74.660095000">
+ <ele>27.000000</ele>
+<time>2007-03-10T19:09:22Z</time>
+</trkpt>
+<trkpt lat="40.239150000" lon="-74.660086600">
+ <ele>25.299999</ele>
+<time>2007-03-10T19:09:23Z</time>
+</trkpt>
+<trkpt lat="40.239158300" lon="-74.660075000">
+ <ele>23.799999</ele>
+<time>2007-03-10T19:09:24Z</time>
+</trkpt>
+<trkpt lat="40.239171650" lon="-74.660063300">
+ <ele>21.900000</ele>
+<time>2007-03-10T19:09:25Z</time>
+</trkpt>
+<trkpt lat="40.239181650" lon="-74.660050000">
+ <ele>21.200001</ele>
+<time>2007-03-10T19:09:26Z</time>
+</trkpt>
+<trkpt lat="40.239191650" lon="-74.660034900">
+ <ele>19.799999</ele>
+<time>2007-03-10T19:09:27Z</time>
+</trkpt>
+<trkpt lat="40.239211650" lon="-74.660021600">
+ <ele>17.500000</ele>
+<time>2007-03-10T19:09:28Z</time>
+</trkpt>
+<trkpt lat="40.239236650" lon="-74.660011600">
+ <ele>15.600000</ele>
+<time>2007-03-10T19:09:29Z</time>
+</trkpt>
+<trkpt lat="40.239255000" lon="-74.660008300">
+ <ele>14.000000</ele>
+<time>2007-03-10T19:09:30Z</time>
+</trkpt>
+<trkpt lat="40.239270000" lon="-74.660001600">
+ <ele>12.200000</ele>
+<time>2007-03-10T19:09:31Z</time>
+</trkpt>
+<trkpt lat="40.239283300" lon="-74.660000000">
+ <ele>11.500000</ele>
+<time>2007-03-10T19:09:32Z</time>
+</trkpt>
+<trkpt lat="40.239293300" lon="-74.659991600">
+ <ele>10.000000</ele>
+<time>2007-03-10T19:09:33Z</time>
+</trkpt>
+<trkpt lat="40.239281650" lon="-74.659973300">
+ <ele>10.000000</ele>
+<time>2007-03-10T19:09:34Z</time>
+</trkpt>
+<trkpt lat="40.239281650" lon="-74.659956600">
+ <ele>9.100000</ele>
+<time>2007-03-10T19:09:35Z</time>
+</trkpt>
+<trkpt lat="40.239285000" lon="-74.659944900">
+ <ele>8.300000</ele>
+<time>2007-03-10T19:09:36Z</time>
+</trkpt>
+<trkpt lat="40.239296650" lon="-74.659933300">
+ <ele>7.800000</ele>
+<time>2007-03-10T19:09:37Z</time>
+</trkpt>
+<trkpt lat="40.239301650" lon="-74.659921600">
+ <ele>7.900000</ele>
+<time>2007-03-10T19:09:38Z</time>
+</trkpt>
+<trkpt lat="40.239300000" lon="-74.659908300">
+ <ele>7.400000</ele>
+<time>2007-03-10T19:09:39Z</time>
+</trkpt>
+<trkpt lat="40.239295000" lon="-74.659896600">
+ <ele>9.200000</ele>
+<time>2007-03-10T19:09:40Z</time>
+</trkpt>
+<trkpt lat="40.239289950" lon="-74.659883300">
+ <ele>10.500000</ele>
+<time>2007-03-10T19:09:41Z</time>
+</trkpt>
+<trkpt lat="40.239288300" lon="-74.659870000">
+ <ele>11.500000</ele>
+<time>2007-03-10T19:09:42Z</time>
+</trkpt>
+<trkpt lat="40.239293300" lon="-74.659853300">
+ <ele>11.000000</ele>
+<time>2007-03-10T19:09:43Z</time>
+</trkpt>
+<trkpt lat="40.239300000" lon="-74.659841600">
+ <ele>10.500000</ele>
+<time>2007-03-10T19:09:44Z</time>
+</trkpt>
+<trkpt lat="40.239310000" lon="-74.659831600">
+ <ele>11.300000</ele>
+<time>2007-03-10T19:09:45Z</time>
+</trkpt>
+<trkpt lat="40.239320000" lon="-74.659825000">
+ <ele>11.300000</ele>
+<time>2007-03-10T19:09:46Z</time>
+</trkpt>
+<trkpt lat="40.239325000" lon="-74.659818300">
+ <ele>12.500000</ele>
+<time>2007-03-10T19:09:47Z</time>
+</trkpt>
+<trkpt lat="40.239333300" lon="-74.659811600">
+ <ele>13.100000</ele>
+<time>2007-03-10T19:09:48Z</time>
+</trkpt>
+<trkpt lat="40.239340000" lon="-74.659798300">
+ <ele>13.800000</ele>
+<time>2007-03-10T19:09:49Z</time>
+</trkpt>
+<trkpt lat="40.239351650" lon="-74.659791600">
+ <ele>15.100000</ele>
+<time>2007-03-10T19:09:50Z</time>
+</trkpt>
+<trkpt lat="40.239356650" lon="-74.659778300">
+ <ele>15.400000</ele>
+<time>2007-03-10T19:09:51Z</time>
+</trkpt>
+<trkpt lat="40.239363300" lon="-74.659763300">
+ <ele>15.300000</ele>
+<time>2007-03-10T19:09:52Z</time>
+</trkpt>
+<trkpt lat="40.239368300" lon="-74.659750000">
+ <ele>16.200001</ele>
+<time>2007-03-10T19:09:53Z</time>
+</trkpt>
+<trkpt lat="40.239371650" lon="-74.659733300">
+ <ele>16.100000</ele>
+<time>2007-03-10T19:09:54Z</time>
+</trkpt>
+<trkpt lat="40.239380000" lon="-74.659721600">
+ <ele>15.800000</ele>
+<time>2007-03-10T19:09:55Z</time>
+</trkpt>
+<trkpt lat="40.239390000" lon="-74.659711600">
+ <ele>15.500000</ele>
+<time>2007-03-10T19:09:56Z</time>
+</trkpt>
+<trkpt lat="40.239400000" lon="-74.659701600">
+ <ele>15.800000</ele>
+<time>2007-03-10T19:09:57Z</time>
+</trkpt>
+<trkpt lat="40.239418300" lon="-74.659705000">
+ <ele>14.200000</ele>
+<time>2007-03-10T19:09:58Z</time>
+</trkpt>
+<trkpt lat="40.239433300" lon="-74.659706600">
+ <ele>14.600000</ele>
+<time>2007-03-10T19:09:59Z</time>
+</trkpt>
+<trkpt lat="40.239460000" lon="-74.659713300">
+ <ele>13.900000</ele>
+<time>2007-03-10T19:10:00Z</time>
+</trkpt>
+<trkpt lat="40.239480000" lon="-74.659715000">
+ <ele>15.200000</ele>
+<time>2007-03-10T19:10:01Z</time>
+</trkpt>
+<trkpt lat="40.239495000" lon="-74.659715000">
+ <ele>15.400000</ele>
+<time>2007-03-10T19:10:02Z</time>
+</trkpt>
+<trkpt lat="40.239505000" lon="-74.659716600">
+ <ele>15.700000</ele>
+<time>2007-03-10T19:10:03Z</time>
+</trkpt>
+<trkpt lat="40.239518300" lon="-74.659716600">
+ <ele>15.400000</ele>
+<time>2007-03-10T19:10:04Z</time>
+</trkpt>
+<trkpt lat="40.239533300" lon="-74.659718300">
+ <ele>15.800000</ele>
+<time>2007-03-10T19:10:05Z</time>
+</trkpt>
+<trkpt lat="40.239548300" lon="-74.659723300">
+ <ele>16.000000</ele>
+<time>2007-03-10T19:10:06Z</time>
+</trkpt>
+<trkpt lat="40.239558300" lon="-74.659730000">
+ <ele>16.799999</ele>
+<time>2007-03-10T19:10:07Z</time>
+</trkpt>
+<trkpt lat="40.239568300" lon="-74.659733300">
+ <ele>16.600000</ele>
+<time>2007-03-10T19:10:08Z</time>
+</trkpt>
+<trkpt lat="40.239579950" lon="-74.659741600">
+ <ele>17.200001</ele>
+<time>2007-03-10T19:10:09Z</time>
+</trkpt>
+<trkpt lat="40.239590000" lon="-74.659746600">
+ <ele>17.900000</ele>
+<time>2007-03-10T19:10:10Z</time>
+</trkpt>
+<trkpt lat="40.239605000" lon="-74.659748300">
+ <ele>17.100000</ele>
+<time>2007-03-10T19:10:11Z</time>
+</trkpt>
+<trkpt lat="40.239615000" lon="-74.659756600">
+ <ele>18.000000</ele>
+<time>2007-03-10T19:10:12Z</time>
+</trkpt>
+<trkpt lat="40.239628300" lon="-74.659764900">
+ <ele>19.400000</ele>
+<time>2007-03-10T19:10:13Z</time>
+</trkpt>
+<trkpt lat="40.239648300" lon="-74.659766600">
+ <ele>19.500000</ele>
+<time>2007-03-10T19:10:14Z</time>
+</trkpt>
+<trkpt lat="40.239665000" lon="-74.659770000">
+ <ele>19.299999</ele>
+<time>2007-03-10T19:10:15Z</time>
+</trkpt>
+<trkpt lat="40.239683300" lon="-74.659778300">
+ <ele>21.000000</ele>
+<time>2007-03-10T19:10:16Z</time>
+</trkpt>
+<trkpt lat="40.239703300" lon="-74.659788300">
+ <ele>23.299999</ele>
+<time>2007-03-10T19:10:17Z</time>
+</trkpt>
+<trkpt lat="40.239723300" lon="-74.659796600">
+ <ele>23.500000</ele>
+<time>2007-03-10T19:10:18Z</time>
+</trkpt>
+<trkpt lat="40.239738300" lon="-74.659800000">
+ <ele>23.299999</ele>
+<time>2007-03-10T19:10:19Z</time>
+</trkpt>
+<trkpt lat="40.239756650" lon="-74.659803300">
+ <ele>23.600000</ele>
+<time>2007-03-10T19:10:20Z</time>
+</trkpt>
+<trkpt lat="40.239770000" lon="-74.659806600">
+ <ele>24.100000</ele>
+<time>2007-03-10T19:10:21Z</time>
+</trkpt>
+<trkpt lat="40.239788300" lon="-74.659808300">
+ <ele>24.700001</ele>
+<time>2007-03-10T19:10:22Z</time>
+</trkpt>
+<trkpt lat="40.239804950" lon="-74.659809900">
+ <ele>25.100000</ele>
+<time>2007-03-10T19:10:23Z</time>
+</trkpt>
+<trkpt lat="40.239821650" lon="-74.659808300">
+ <ele>24.900000</ele>
+<time>2007-03-10T19:10:24Z</time>
+</trkpt>
+<trkpt lat="40.239841650" lon="-74.659808300">
+ <ele>23.900000</ele>
+<time>2007-03-10T19:10:25Z</time>
+</trkpt>
+<trkpt lat="40.239853300" lon="-74.659808300">
+ <ele>24.700001</ele>
+<time>2007-03-10T19:10:26Z</time>
+</trkpt>
+<trkpt lat="40.239866650" lon="-74.659805000">
+ <ele>24.100000</ele>
+<time>2007-03-10T19:10:27Z</time>
+</trkpt>
+<trkpt lat="40.239885000" lon="-74.659805000">
+ <ele>25.200001</ele>
+<time>2007-03-10T19:10:28Z</time>
+</trkpt>
+<trkpt lat="40.239903300" lon="-74.659795000">
+ <ele>24.900000</ele>
+<time>2007-03-10T19:10:29Z</time>
+</trkpt>
+<trkpt lat="40.239921650" lon="-74.659780000">
+ <ele>24.700001</ele>
+<time>2007-03-10T19:10:30Z</time>
+</trkpt>
+<trkpt lat="40.239940000" lon="-74.659761600">
+ <ele>24.600000</ele>
+<time>2007-03-10T19:10:31Z</time>
+</trkpt>
+<trkpt lat="40.239961650" lon="-74.659743300">
+ <ele>23.600000</ele>
+<time>2007-03-10T19:10:32Z</time>
+</trkpt>
+<trkpt lat="40.239980000" lon="-74.659726600">
+ <ele>23.700001</ele>
+<time>2007-03-10T19:10:33Z</time>
+</trkpt>
+<trkpt lat="40.240001650" lon="-74.659710000">
+ <ele>22.400000</ele>
+<time>2007-03-10T19:10:34Z</time>
+</trkpt>
+<trkpt lat="40.240008300" lon="-74.659693300">
+ <ele>22.500000</ele>
+<time>2007-03-10T19:10:35Z</time>
+</trkpt>
+<trkpt lat="40.240018300" lon="-74.659671600">
+ <ele>21.799999</ele>
+<time>2007-03-10T19:10:36Z</time>
+</trkpt>
+<trkpt lat="40.240036650" lon="-74.659660000">
+ <ele>21.200001</ele>
+<time>2007-03-10T19:10:37Z</time>
+</trkpt>
+<trkpt lat="40.240049950" lon="-74.659650000">
+ <ele>20.799999</ele>
+<time>2007-03-10T19:10:38Z</time>
+</trkpt>
+<trkpt lat="40.240055000" lon="-74.659640000">
+ <ele>20.100000</ele>
+<time>2007-03-10T19:10:39Z</time>
+</trkpt>
+<trkpt lat="40.240060000" lon="-74.659635000">
+ <ele>17.500000</ele>
+<time>2007-03-10T19:10:40Z</time>
+</trkpt>
+<trkpt lat="40.240075000" lon="-74.659636600">
+ <ele>16.600000</ele>
+<time>2007-03-10T19:10:41Z</time>
+</trkpt>
+<trkpt lat="40.240088300" lon="-74.659643300">
+ <ele>18.400000</ele>
+<time>2007-03-10T19:10:42Z</time>
+</trkpt>
+<trkpt lat="40.240108300" lon="-74.659650000">
+ <ele>20.200001</ele>
+<time>2007-03-10T19:10:43Z</time>
+</trkpt>
+<trkpt lat="40.240125000" lon="-74.659656600">
+ <ele>20.100000</ele>
+<time>2007-03-10T19:10:44Z</time>
+</trkpt>
+<trkpt lat="40.240131650" lon="-74.659660000">
+ <ele>20.799999</ele>
+<time>2007-03-10T19:10:45Z</time>
+</trkpt>
+<trkpt lat="40.240145000" lon="-74.659665000">
+ <ele>21.000000</ele>
+<time>2007-03-10T19:10:46Z</time>
+</trkpt>
+<trkpt lat="40.240156650" lon="-74.659674900">
+ <ele>20.900000</ele>
+<time>2007-03-10T19:10:47Z</time>
+</trkpt>
+<trkpt lat="40.240175000" lon="-74.659683300">
+ <ele>19.100000</ele>
+<time>2007-03-10T19:10:48Z</time>
+</trkpt>
+<trkpt lat="40.240200000" lon="-74.659680000">
+ <ele>18.299999</ele>
+<time>2007-03-10T19:10:49Z</time>
+</trkpt>
+<trkpt lat="40.240220000" lon="-74.659668300">
+ <ele>18.500000</ele>
+<time>2007-03-10T19:10:50Z</time>
+</trkpt>
+<trkpt lat="40.240246650" lon="-74.659653300">
+ <ele>19.600000</ele>
+<time>2007-03-10T19:10:51Z</time>
+</trkpt>
+<trkpt lat="40.240268300" lon="-74.659635000">
+ <ele>19.299999</ele>
+<time>2007-03-10T19:10:52Z</time>
+</trkpt>
+<trkpt lat="40.240273300" lon="-74.659611600">
+ <ele>18.299999</ele>
+<time>2007-03-10T19:10:53Z</time>
+</trkpt>
+<trkpt lat="40.240278300" lon="-74.659591600">
+ <ele>17.900000</ele>
+<time>2007-03-10T19:10:54Z</time>
+</trkpt>
+<trkpt lat="40.240291650" lon="-74.659576600">
+ <ele>16.299999</ele>
+<time>2007-03-10T19:10:55Z</time>
+</trkpt>
+<trkpt lat="40.240310000" lon="-74.659560000">
+ <ele>13.900000</ele>
+<time>2007-03-10T19:10:56Z</time>
+</trkpt>
+<trkpt lat="40.240315000" lon="-74.659531600">
+ <ele>13.100000</ele>
+<time>2007-03-10T19:10:57Z</time>
+</trkpt>
+<trkpt lat="40.240318300" lon="-74.659501600">
+ <ele>10.900000</ele>
+<time>2007-03-10T19:10:58Z</time>
+</trkpt>
+<trkpt lat="40.240318300" lon="-74.659481600">
+ <ele>9.900000</ele>
+<time>2007-03-10T19:10:59Z</time>
+</trkpt>
+<trkpt lat="40.240321650" lon="-74.659458300">
+ <ele>8.500000</ele>
+<time>2007-03-10T19:11:00Z</time>
+</trkpt>
+<trkpt lat="40.240333300" lon="-74.659441600">
+ <ele>7.500000</ele>
+<time>2007-03-10T19:11:01Z</time>
+</trkpt>
+<trkpt lat="40.240338300" lon="-74.659423300">
+ <ele>5.900000</ele>
+<time>2007-03-10T19:11:02Z</time>
+</trkpt>
+<trkpt lat="40.240336650" lon="-74.659400000">
+ <ele>5.600000</ele>
+<time>2007-03-10T19:11:03Z</time>
+</trkpt>
+<trkpt lat="40.240346650" lon="-74.659390000">
+ <ele>4.400000</ele>
+<time>2007-03-10T19:11:04Z</time>
+</trkpt>
+<trkpt lat="40.240351650" lon="-74.659376600">
+ <ele>5.000000</ele>
+<time>2007-03-10T19:11:05Z</time>
+</trkpt>
+<trkpt lat="40.240360000" lon="-74.659361600">
+ <ele>3.400000</ele>
+<time>2007-03-10T19:11:06Z</time>
+</trkpt>
+<trkpt lat="40.240360000" lon="-74.659343300">
+ <ele>3.700000</ele>
+<time>2007-03-10T19:11:07Z</time>
+</trkpt>
+<trkpt lat="40.240358300" lon="-74.659331600">
+ <ele>3.800000</ele>
+<time>2007-03-10T19:11:08Z</time>
+</trkpt>
+<trkpt lat="40.240358300" lon="-74.659323300">
+ <ele>4.100000</ele>
+<time>2007-03-10T19:11:09Z</time>
+</trkpt>
+<trkpt lat="40.240355000" lon="-74.659301600">
+ <ele>3.800000</ele>
+<time>2007-03-10T19:11:10Z</time>
+</trkpt>
+<trkpt lat="40.240348300" lon="-74.659280000">
+ <ele>4.300000</ele>
+<time>2007-03-10T19:11:11Z</time>
+</trkpt>
+<trkpt lat="40.240345000" lon="-74.659256600">
+ <ele>5.500000</ele>
+<time>2007-03-10T19:11:12Z</time>
+</trkpt>
+<trkpt lat="40.240336650" lon="-74.659229900">
+ <ele>4.800000</ele>
+<time>2007-03-10T19:11:13Z</time>
+</trkpt>
+<trkpt lat="40.240331650" lon="-74.659203300">
+ <ele>6.000000</ele>
+<time>2007-03-10T19:11:14Z</time>
+</trkpt>
+<trkpt lat="40.240336650" lon="-74.659181600">
+ <ele>6.000000</ele>
+<time>2007-03-10T19:11:15Z</time>
+</trkpt>
+<trkpt lat="40.240338300" lon="-74.659163300">
+ <ele>6.100000</ele>
+<time>2007-03-10T19:11:16Z</time>
+</trkpt>
+<trkpt lat="40.240331650" lon="-74.659138300">
+ <ele>6.100000</ele>
+<time>2007-03-10T19:11:17Z</time>
+</trkpt>
+<trkpt lat="40.240331650" lon="-74.659111600">
+ <ele>6.700000</ele>
+<time>2007-03-10T19:11:18Z</time>
+</trkpt>
+<trkpt lat="40.240336650" lon="-74.659083300">
+ <ele>6.100000</ele>
+<time>2007-03-10T19:11:19Z</time>
+</trkpt>
+<trkpt lat="40.240346650" lon="-74.659058300">
+ <ele>5.600000</ele>
+<time>2007-03-10T19:11:20Z</time>
+</trkpt>
+<trkpt lat="40.240353300" lon="-74.659040000">
+ <ele>4.400000</ele>
+<time>2007-03-10T19:11:21Z</time>
+</trkpt>
+<trkpt lat="40.240350000" lon="-74.659013300">
+ <ele>3.700000</ele>
+<time>2007-03-10T19:11:22Z</time>
+</trkpt>
+<trkpt lat="40.240341650" lon="-74.658986600">
+ <ele>4.800000</ele>
+<time>2007-03-10T19:11:23Z</time>
+</trkpt>
+<trkpt lat="40.240338300" lon="-74.658956600">
+ <ele>6.000000</ele>
+<time>2007-03-10T19:11:24Z</time>
+</trkpt>
+<trkpt lat="40.240343300" lon="-74.658938300">
+ <ele>4.900000</ele>
+<time>2007-03-10T19:11:25Z</time>
+</trkpt>
+<trkpt lat="40.240346650" lon="-74.658918300">
+ <ele>4.300000</ele>
+<time>2007-03-10T19:11:26Z</time>
+</trkpt>
+<trkpt lat="40.240351650" lon="-74.658903300">
+ <ele>2.400000</ele>
+<time>2007-03-10T19:11:27Z</time>
+</trkpt>
+<trkpt lat="40.240358300" lon="-74.658891600">
+ <ele>2.800000</ele>
+<time>2007-03-10T19:11:28Z</time>
+</trkpt>
+<trkpt lat="40.240376650" lon="-74.658885000">
+ <ele>1.600000</ele>
+<time>2007-03-10T19:11:29Z</time>
+</trkpt>
+<trkpt lat="40.240395000" lon="-74.658875000">
+ <ele>1.300000</ele>
+<time>2007-03-10T19:11:30Z</time>
+</trkpt>
+<trkpt lat="40.240406650" lon="-74.658858300">
+ <ele>1.300000</ele>
+<time>2007-03-10T19:11:31Z</time>
+</trkpt>
+<trkpt lat="40.240421650" lon="-74.658841600">
+ <ele>-1.800000</ele>
+<time>2007-03-10T19:11:32Z</time>
+</trkpt>
+<trkpt lat="40.240438300" lon="-74.658830000">
+ <ele>-2.800000</ele>
+<time>2007-03-10T19:11:33Z</time>
+</trkpt>
+<trkpt lat="40.240458300" lon="-74.658816600">
+ <ele>-4.200000</ele>
+<time>2007-03-10T19:11:34Z</time>
+</trkpt>
+<trkpt lat="40.240465000" lon="-74.658798300">
+ <ele>-4.400000</ele>
+<time>2007-03-10T19:11:35Z</time>
+</trkpt>
+<trkpt lat="40.240471650" lon="-74.658785000">
+ <ele>-3.900000</ele>
+<time>2007-03-10T19:11:36Z</time>
+</trkpt>
+<trkpt lat="40.240471650" lon="-74.658775000">
+ <ele>-3.000000</ele>
+<time>2007-03-10T19:11:37Z</time>
+</trkpt>
+<trkpt lat="40.240473300" lon="-74.658765000">
+ <ele>-2.700000</ele>
+<time>2007-03-10T19:11:38Z</time>
+</trkpt>
+<trkpt lat="40.240473300" lon="-74.658751600">
+ <ele>-2.100000</ele>
+<time>2007-03-10T19:11:39Z</time>
+</trkpt>
+<trkpt lat="40.240465000" lon="-74.658740000">
+ <ele>0.500000</ele>
+<time>2007-03-10T19:11:40Z</time>
+</trkpt>
+<trkpt lat="40.240456650" lon="-74.658726600">
+ <ele>1.900000</ele>
+<time>2007-03-10T19:11:41Z</time>
+</trkpt>
+<trkpt lat="40.240440000" lon="-74.658703300">
+ <ele>3.300000</ele>
+<time>2007-03-10T19:11:42Z</time>
+</trkpt>
+<trkpt lat="40.240421650" lon="-74.658678300">
+ <ele>5.100000</ele>
+<time>2007-03-10T19:11:43Z</time>
+</trkpt>
+<trkpt lat="40.240415000" lon="-74.658658300">
+ <ele>6.200000</ele>
+<time>2007-03-10T19:11:44Z</time>
+</trkpt>
+<trkpt lat="40.240415000" lon="-74.658646600">
+ <ele>6.800000</ele>
+<time>2007-03-10T19:11:45Z</time>
+</trkpt>
+<trkpt lat="40.240415000" lon="-74.658630000">
+ <ele>8.100000</ele>
+<time>2007-03-10T19:11:46Z</time>
+</trkpt>
+<trkpt lat="40.240423300" lon="-74.658613300">
+ <ele>7.800000</ele>
+<time>2007-03-10T19:11:47Z</time>
+</trkpt>
+<trkpt lat="40.240431650" lon="-74.658601600">
+ <ele>7.300000</ele>
+<time>2007-03-10T19:11:48Z</time>
+</trkpt>
+<trkpt lat="40.240428300" lon="-74.658581600">
+ <ele>8.800000</ele>
+<time>2007-03-10T19:11:49Z</time>
+</trkpt>
+<trkpt lat="40.240430000" lon="-74.658565000">
+ <ele>9.500000</ele>
+<time>2007-03-10T19:11:50Z</time>
+</trkpt>
+<trkpt lat="40.240426650" lon="-74.658548300">
+ <ele>11.200000</ele>
+<time>2007-03-10T19:11:51Z</time>
+</trkpt>
+<trkpt lat="40.240431650" lon="-74.658531600">
+ <ele>10.900000</ele>
+<time>2007-03-10T19:11:52Z</time>
+</trkpt>
+<trkpt lat="40.240438300" lon="-74.658518300">
+ <ele>11.400000</ele>
+<time>2007-03-10T19:11:53Z</time>
+</trkpt>
+<trkpt lat="40.240438300" lon="-74.658496600">
+ <ele>11.600000</ele>
+<time>2007-03-10T19:11:54Z</time>
+</trkpt>
+<trkpt lat="40.240435000" lon="-74.658480000">
+ <ele>11.000000</ele>
+<time>2007-03-10T19:11:55Z</time>
+</trkpt>
+<trkpt lat="40.240433300" lon="-74.658468300">
+ <ele>10.300000</ele>
+<time>2007-03-10T19:11:56Z</time>
+</trkpt>
+<trkpt lat="40.240433300" lon="-74.658451600">
+ <ele>9.800000</ele>
+<time>2007-03-10T19:11:57Z</time>
+</trkpt>
+<trkpt lat="40.240445000" lon="-74.658430000">
+ <ele>9.500000</ele>
+<time>2007-03-10T19:11:58Z</time>
+</trkpt>
+<trkpt lat="40.240460000" lon="-74.658411600">
+ <ele>8.200000</ele>
+<time>2007-03-10T19:11:59Z</time>
+</trkpt>
+<trkpt lat="40.240466650" lon="-74.658395000">
+ <ele>6.600000</ele>
+<time>2007-03-10T19:12:00Z</time>
+</trkpt>
+<trkpt lat="40.240473300" lon="-74.658373300">
+ <ele>6.600000</ele>
+<time>2007-03-10T19:12:01Z</time>
+</trkpt>
+<trkpt lat="40.240478300" lon="-74.658348300">
+ <ele>7.100000</ele>
+<time>2007-03-10T19:12:02Z</time>
+</trkpt>
+<trkpt lat="40.240488300" lon="-74.658330000">
+ <ele>7.300000</ele>
+<time>2007-03-10T19:12:03Z</time>
+</trkpt>
+<trkpt lat="40.240500000" lon="-74.658315000">
+ <ele>6.700000</ele>
+<time>2007-03-10T19:12:04Z</time>
+</trkpt>
+<trkpt lat="40.240513300" lon="-74.658298300">
+ <ele>6.300000</ele>
+<time>2007-03-10T19:12:05Z</time>
+</trkpt>
+<trkpt lat="40.240526650" lon="-74.658288300">
+ <ele>7.600000</ele>
+<time>2007-03-10T19:12:06Z</time>
+</trkpt>
+<trkpt lat="40.240540000" lon="-74.658275000">
+ <ele>8.100000</ele>
+<time>2007-03-10T19:12:07Z</time>
+</trkpt>
+<trkpt lat="40.240545000" lon="-74.658260000">
+ <ele>9.000000</ele>
+<time>2007-03-10T19:12:08Z</time>
+</trkpt>
+<trkpt lat="40.240556650" lon="-74.658251600">
+ <ele>9.300000</ele>
+<time>2007-03-10T19:12:09Z</time>
+</trkpt>
+<trkpt lat="40.240571650" lon="-74.658248300">
+ <ele>8.900000</ele>
+<time>2007-03-10T19:12:10Z</time>
+</trkpt>
+<trkpt lat="40.240583300" lon="-74.658241600">
+ <ele>7.700000</ele>
+<time>2007-03-10T19:12:11Z</time>
+</trkpt>
+<trkpt lat="40.240583300" lon="-74.658225000">
+ <ele>8.200000</ele>
+<time>2007-03-10T19:12:12Z</time>
+</trkpt>
+<trkpt lat="40.240578300" lon="-74.658203300">
+ <ele>9.200000</ele>
+<time>2007-03-10T19:12:13Z</time>
+</trkpt>
+<trkpt lat="40.240575000" lon="-74.658180000">
+ <ele>10.100000</ele>
+<time>2007-03-10T19:12:14Z</time>
+</trkpt>
+<trkpt lat="40.240568300" lon="-74.658160000">
+ <ele>11.600000</ele>
+<time>2007-03-10T19:12:15Z</time>
+</trkpt>
+<trkpt lat="40.240564950" lon="-74.658146600">
+ <ele>11.800000</ele>
+<time>2007-03-10T19:12:16Z</time>
+</trkpt>
+<trkpt lat="40.240563300" lon="-74.658135000">
+ <ele>12.800000</ele>
+<time>2007-03-10T19:12:17Z</time>
+</trkpt>
+<trkpt lat="40.240553300" lon="-74.658120000">
+ <ele>14.800000</ele>
+<time>2007-03-10T19:12:18Z</time>
+</trkpt>
+<trkpt lat="40.240541650" lon="-74.658105000">
+ <ele>17.100000</ele>
+<time>2007-03-10T19:12:19Z</time>
+</trkpt>
+<trkpt lat="40.240543300" lon="-74.658086600">
+ <ele>17.700001</ele>
+<time>2007-03-10T19:12:20Z</time>
+</trkpt>
+<trkpt lat="40.240545000" lon="-74.658058300">
+ <ele>17.299999</ele>
+<time>2007-03-10T19:12:21Z</time>
+</trkpt>
+<trkpt lat="40.240541650" lon="-74.658026600">
+ <ele>18.600000</ele>
+<time>2007-03-10T19:12:22Z</time>
+</trkpt>
+<trkpt lat="40.240550000" lon="-74.658006600">
+ <ele>20.100000</ele>
+<time>2007-03-10T19:12:23Z</time>
+</trkpt>
+<trkpt lat="40.240551650" lon="-74.657986600">
+ <ele>21.700001</ele>
+<time>2007-03-10T19:12:24Z</time>
+</trkpt>
+<trkpt lat="40.240555000" lon="-74.657960000">
+ <ele>22.600000</ele>
+<time>2007-03-10T19:12:25Z</time>
+</trkpt>
+<trkpt lat="40.240558300" lon="-74.657931600">
+ <ele>22.900000</ele>
+<time>2007-03-10T19:12:26Z</time>
+</trkpt>
+<trkpt lat="40.240560000" lon="-74.657910000">
+ <ele>23.200001</ele>
+<time>2007-03-10T19:12:27Z</time>
+</trkpt>
+<trkpt lat="40.240560000" lon="-74.657886600">
+ <ele>23.200001</ele>
+<time>2007-03-10T19:12:28Z</time>
+</trkpt>
+<trkpt lat="40.240566650" lon="-74.657853300">
+ <ele>22.100000</ele>
+<time>2007-03-10T19:12:29Z</time>
+</trkpt>
+<trkpt lat="40.240576650" lon="-74.657818300">
+ <ele>19.200001</ele>
+<time>2007-03-10T19:12:30Z</time>
+</trkpt>
+<trkpt lat="40.240586650" lon="-74.657775000">
+ <ele>17.600000</ele>
+<time>2007-03-10T19:12:31Z</time>
+</trkpt>
+<trkpt lat="40.240593300" lon="-74.657741600">
+ <ele>16.200001</ele>
+<time>2007-03-10T19:12:32Z</time>
+</trkpt>
+<trkpt lat="40.240601650" lon="-74.657710000">
+ <ele>18.000000</ele>
+<time>2007-03-10T19:12:33Z</time>
+</trkpt>
+<trkpt lat="40.240603300" lon="-74.657683300">
+ <ele>18.700001</ele>
+<time>2007-03-10T19:12:34Z</time>
+</trkpt>
+<trkpt lat="40.240618300" lon="-74.657665000">
+ <ele>18.400000</ele>
+<time>2007-03-10T19:12:35Z</time>
+</trkpt>
+<trkpt lat="40.240635000" lon="-74.657643300">
+ <ele>18.000000</ele>
+<time>2007-03-10T19:12:36Z</time>
+</trkpt>
+<trkpt lat="40.240641650" lon="-74.657611600">
+ <ele>16.299999</ele>
+<time>2007-03-10T19:12:37Z</time>
+</trkpt>
+<trkpt lat="40.240648300" lon="-74.657585000">
+ <ele>15.400000</ele>
+<time>2007-03-10T19:12:38Z</time>
+</trkpt>
+<trkpt lat="40.240654950" lon="-74.657560000">
+ <ele>13.900000</ele>
+<time>2007-03-10T19:12:39Z</time>
+</trkpt>
+<trkpt lat="40.240660000" lon="-74.657530000">
+ <ele>12.900000</ele>
+<time>2007-03-10T19:12:40Z</time>
+</trkpt>
+<trkpt lat="40.240666650" lon="-74.657506600">
+ <ele>12.800000</ele>
+<time>2007-03-10T19:12:41Z</time>
+</trkpt>
+<trkpt lat="40.240668300" lon="-74.657488300">
+ <ele>12.000000</ele>
+<time>2007-03-10T19:12:42Z</time>
+</trkpt>
+<trkpt lat="40.240673300" lon="-74.657468300">
+ <ele>11.200000</ele>
+<time>2007-03-10T19:12:43Z</time>
+</trkpt>
+<trkpt lat="40.240670000" lon="-74.657446600">
+ <ele>11.000000</ele>
+<time>2007-03-10T19:12:44Z</time>
+</trkpt>
+<trkpt lat="40.240670000" lon="-74.657425000">
+ <ele>10.100000</ele>
+<time>2007-03-10T19:12:45Z</time>
+</trkpt>
+<trkpt lat="40.240663300" lon="-74.657403300">
+ <ele>9.900000</ele>
+<time>2007-03-10T19:12:46Z</time>
+</trkpt>
+<trkpt lat="40.240658300" lon="-74.657391600">
+ <ele>10.600000</ele>
+<time>2007-03-10T19:12:47Z</time>
+</trkpt>
+<trkpt lat="40.240663300" lon="-74.657381600">
+ <ele>9.600000</ele>
+<time>2007-03-10T19:12:48Z</time>
+</trkpt>
+<trkpt lat="40.240660000" lon="-74.657366600">
+ <ele>9.300000</ele>
+<time>2007-03-10T19:12:49Z</time>
+</trkpt>
+<trkpt lat="40.240663300" lon="-74.657351600">
+ <ele>7.300000</ele>
+<time>2007-03-10T19:12:50Z</time>
+</trkpt>
+<trkpt lat="40.240665000" lon="-74.657335000">
+ <ele>5.700000</ele>
+<time>2007-03-10T19:12:51Z</time>
+</trkpt>
+<trkpt lat="40.240660000" lon="-74.657316600">
+ <ele>5.400000</ele>
+<time>2007-03-10T19:12:52Z</time>
+</trkpt>
+<trkpt lat="40.240646650" lon="-74.657293300">
+ <ele>5.100000</ele>
+<time>2007-03-10T19:12:53Z</time>
+</trkpt>
+<trkpt lat="40.240640000" lon="-74.657276600">
+ <ele>5.000000</ele>
+<time>2007-03-10T19:12:54Z</time>
+</trkpt>
+<trkpt lat="40.240640000" lon="-74.657259900">
+ <ele>4.100000</ele>
+<time>2007-03-10T19:12:55Z</time>
+</trkpt>
+<trkpt lat="40.240638300" lon="-74.657240000">
+ <ele>5.000000</ele>
+<time>2007-03-10T19:12:56Z</time>
+</trkpt>
+<trkpt lat="40.240635000" lon="-74.657221600">
+ <ele>7.200000</ele>
+<time>2007-03-10T19:12:57Z</time>
+</trkpt>
+<trkpt lat="40.240633300" lon="-74.657198300">
+ <ele>8.000000</ele>
+<time>2007-03-10T19:12:58Z</time>
+</trkpt>
+<trkpt lat="40.240640000" lon="-74.657185000">
+ <ele>8.100000</ele>
+<time>2007-03-10T19:12:59Z</time>
+</trkpt>
+<trkpt lat="40.240645000" lon="-74.657171600">
+ <ele>8.800000</ele>
+<time>2007-03-10T19:13:00Z</time>
+</trkpt>
+<trkpt lat="40.240650000" lon="-74.657155000">
+ <ele>10.700000</ele>
+<time>2007-03-10T19:13:01Z</time>
+</trkpt>
+<trkpt lat="40.240654950" lon="-74.657135000">
+ <ele>12.800000</ele>
+<time>2007-03-10T19:13:02Z</time>
+</trkpt>
+<trkpt lat="40.240661650" lon="-74.657120000">
+ <ele>13.900000</ele>
+<time>2007-03-10T19:13:03Z</time>
+</trkpt>
+<trkpt lat="40.240661650" lon="-74.657108300">
+ <ele>14.200000</ele>
+<time>2007-03-10T19:13:04Z</time>
+</trkpt>
+<trkpt lat="40.240661650" lon="-74.657086600">
+ <ele>12.600000</ele>
+<time>2007-03-10T19:13:05Z</time>
+</trkpt>
+<trkpt lat="40.240663300" lon="-74.657066600">
+ <ele>10.800000</ele>
+<time>2007-03-10T19:13:06Z</time>
+</trkpt>
+<trkpt lat="40.240654950" lon="-74.657046600">
+ <ele>11.200000</ele>
+<time>2007-03-10T19:13:07Z</time>
+</trkpt>
+<trkpt lat="40.240654950" lon="-74.657018300">
+ <ele>13.000000</ele>
+<time>2007-03-10T19:13:08Z</time>
+</trkpt>
+<trkpt lat="40.240658300" lon="-74.656989900">
+ <ele>15.400000</ele>
+<time>2007-03-10T19:13:09Z</time>
+</trkpt>
+<trkpt lat="40.240661650" lon="-74.656956600">
+ <ele>19.900000</ele>
+<time>2007-03-10T19:13:10Z</time>
+</trkpt>
+<trkpt lat="40.240665000" lon="-74.656930000">
+ <ele>23.400000</ele>
+<time>2007-03-10T19:13:11Z</time>
+</trkpt>
+<trkpt lat="40.240666650" lon="-74.656906600">
+ <ele>25.100000</ele>
+<time>2007-03-10T19:13:12Z</time>
+</trkpt>
+<trkpt lat="40.240671650" lon="-74.656885000">
+ <ele>26.299999</ele>
+<time>2007-03-10T19:13:13Z</time>
+</trkpt>
+<trkpt lat="40.240681650" lon="-74.656868300">
+ <ele>26.299999</ele>
+<time>2007-03-10T19:13:14Z</time>
+</trkpt>
+<trkpt lat="40.240688300" lon="-74.656853300">
+ <ele>26.400000</ele>
+<time>2007-03-10T19:13:15Z</time>
+</trkpt>
+<trkpt lat="40.240691650" lon="-74.656838300">
+ <ele>26.600000</ele>
+<time>2007-03-10T19:13:16Z</time>
+</trkpt>
+<trkpt lat="40.240690000" lon="-74.656821600">
+ <ele>27.299999</ele>
+<time>2007-03-10T19:13:17Z</time>
+</trkpt>
+<trkpt lat="40.240693300" lon="-74.656808300">
+ <ele>25.799999</ele>
+<time>2007-03-10T19:13:18Z</time>
+</trkpt>
+<trkpt lat="40.240695000" lon="-74.656791600">
+ <ele>25.400000</ele>
+<time>2007-03-10T19:13:19Z</time>
+</trkpt>
+<trkpt lat="40.240688300" lon="-74.656768300">
+ <ele>25.400000</ele>
+<time>2007-03-10T19:13:20Z</time>
+</trkpt>
+<trkpt lat="40.240688300" lon="-74.656748300">
+ <ele>24.799999</ele>
+<time>2007-03-10T19:13:21Z</time>
+</trkpt>
+<trkpt lat="40.240688300" lon="-74.656725000">
+ <ele>25.500000</ele>
+<time>2007-03-10T19:13:22Z</time>
+</trkpt>
+<trkpt lat="40.240690000" lon="-74.656701600">
+ <ele>24.900000</ele>
+<time>2007-03-10T19:13:23Z</time>
+</trkpt>
+<trkpt lat="40.240688300" lon="-74.656681600">
+ <ele>25.000000</ele>
+<time>2007-03-10T19:13:24Z</time>
+</trkpt>
+<trkpt lat="40.240688300" lon="-74.656655000">
+ <ele>25.799999</ele>
+<time>2007-03-10T19:13:25Z</time>
+</trkpt>
+<trkpt lat="40.240686650" lon="-74.656631600">
+ <ele>27.200001</ele>
+<time>2007-03-10T19:13:26Z</time>
+</trkpt>
+<trkpt lat="40.240690000" lon="-74.656615000">
+ <ele>26.799999</ele>
+<time>2007-03-10T19:13:27Z</time>
+</trkpt>
+<trkpt lat="40.240691650" lon="-74.656600000">
+ <ele>25.700001</ele>
+<time>2007-03-10T19:13:28Z</time>
+</trkpt>
+<trkpt lat="40.240696650" lon="-74.656583300">
+ <ele>26.500000</ele>
+<time>2007-03-10T19:13:29Z</time>
+</trkpt>
+<trkpt lat="40.240710000" lon="-74.656571600">
+ <ele>25.500000</ele>
+<time>2007-03-10T19:13:30Z</time>
+</trkpt>
+<trkpt lat="40.240725000" lon="-74.656561600">
+ <ele>24.200001</ele>
+<time>2007-03-10T19:13:31Z</time>
+</trkpt>
+<trkpt lat="40.240740000" lon="-74.656546600">
+ <ele>24.000000</ele>
+<time>2007-03-10T19:13:32Z</time>
+</trkpt>
+<trkpt lat="40.240748300" lon="-74.656528300">
+ <ele>23.299999</ele>
+<time>2007-03-10T19:13:33Z</time>
+</trkpt>
+<trkpt lat="40.240751650" lon="-74.656508300">
+ <ele>24.100000</ele>
+<time>2007-03-10T19:13:34Z</time>
+</trkpt>
+<trkpt lat="40.240755000" lon="-74.656485000">
+ <ele>24.700001</ele>
+<time>2007-03-10T19:13:35Z</time>
+</trkpt>
+<trkpt lat="40.240756650" lon="-74.656465000">
+ <ele>24.799999</ele>
+<time>2007-03-10T19:13:36Z</time>
+</trkpt>
+<trkpt lat="40.240756650" lon="-74.656443300">
+ <ele>24.200001</ele>
+<time>2007-03-10T19:13:37Z</time>
+</trkpt>
+<trkpt lat="40.240748300" lon="-74.656416600">
+ <ele>25.200001</ele>
+<time>2007-03-10T19:13:38Z</time>
+</trkpt>
+<trkpt lat="40.240738300" lon="-74.656388300">
+ <ele>25.799999</ele>
+<time>2007-03-10T19:13:39Z</time>
+</trkpt>
+<trkpt lat="40.240733300" lon="-74.656364900">
+ <ele>25.799999</ele>
+<time>2007-03-10T19:13:40Z</time>
+</trkpt>
+<trkpt lat="40.240730000" lon="-74.656341600">
+ <ele>26.799999</ele>
+<time>2007-03-10T19:13:41Z</time>
+</trkpt>
+<trkpt lat="40.240731650" lon="-74.656321600">
+ <ele>26.100000</ele>
+<time>2007-03-10T19:13:42Z</time>
+</trkpt>
+<trkpt lat="40.240731650" lon="-74.656301600">
+ <ele>23.500000</ele>
+<time>2007-03-10T19:13:43Z</time>
+</trkpt>
+<trkpt lat="40.240731650" lon="-74.656280000">
+ <ele>22.700001</ele>
+<time>2007-03-10T19:13:44Z</time>
+</trkpt>
+<trkpt lat="40.240735000" lon="-74.656266600">
+ <ele>22.600000</ele>
+<time>2007-03-10T19:13:45Z</time>
+</trkpt>
+<trkpt lat="40.240736650" lon="-74.656253300">
+ <ele>22.100000</ele>
+<time>2007-03-10T19:13:46Z</time>
+</trkpt>
+<trkpt lat="40.240740000" lon="-74.656241600">
+ <ele>21.100000</ele>
+<time>2007-03-10T19:13:47Z</time>
+</trkpt>
+<trkpt lat="40.240735000" lon="-74.656218300">
+ <ele>21.600000</ele>
+<time>2007-03-10T19:13:48Z</time>
+</trkpt>
+<trkpt lat="40.240721650" lon="-74.656195000">
+ <ele>20.600000</ele>
+<time>2007-03-10T19:13:49Z</time>
+</trkpt>
+<trkpt lat="40.240708300" lon="-74.656166600">
+ <ele>20.400000</ele>
+<time>2007-03-10T19:13:50Z</time>
+</trkpt>
+<trkpt lat="40.240705000" lon="-74.656139900">
+ <ele>20.600000</ele>
+<time>2007-03-10T19:13:51Z</time>
+</trkpt>
+<trkpt lat="40.240696650" lon="-74.656116600">
+ <ele>20.799999</ele>
+<time>2007-03-10T19:13:52Z</time>
+</trkpt>
+<trkpt lat="40.240698300" lon="-74.656101600">
+ <ele>19.100000</ele>
+<time>2007-03-10T19:13:53Z</time>
+</trkpt>
+<trkpt lat="40.240691650" lon="-74.656080000">
+ <ele>20.200001</ele>
+<time>2007-03-10T19:13:54Z</time>
+</trkpt>
+<trkpt lat="40.240693300" lon="-74.656060000">
+ <ele>20.000000</ele>
+<time>2007-03-10T19:13:55Z</time>
+</trkpt>
+<trkpt lat="40.240691650" lon="-74.656038300">
+ <ele>20.900000</ele>
+<time>2007-03-10T19:13:56Z</time>
+</trkpt>
+<trkpt lat="40.240683300" lon="-74.656016600">
+ <ele>20.700001</ele>
+<time>2007-03-10T19:13:57Z</time>
+</trkpt>
+<trkpt lat="40.240675000" lon="-74.655996600">
+ <ele>20.900000</ele>
+<time>2007-03-10T19:13:58Z</time>
+</trkpt>
+<trkpt lat="40.240660000" lon="-74.655971600">
+ <ele>22.700001</ele>
+<time>2007-03-10T19:13:59Z</time>
+</trkpt>
+<trkpt lat="40.240643300" lon="-74.655948300">
+ <ele>23.400000</ele>
+<time>2007-03-10T19:14:00Z</time>
+</trkpt>
+<trkpt lat="40.240628300" lon="-74.655933300">
+ <ele>24.200001</ele>
+<time>2007-03-10T19:14:01Z</time>
+</trkpt>
+<trkpt lat="40.240625000" lon="-74.655921600">
+ <ele>24.900000</ele>
+<time>2007-03-10T19:14:02Z</time>
+</trkpt>
+<trkpt lat="40.240630000" lon="-74.655906600">
+ <ele>24.600000</ele>
+<time>2007-03-10T19:14:03Z</time>
+</trkpt>
+<trkpt lat="40.240646650" lon="-74.655893300">
+ <ele>23.700001</ele>
+<time>2007-03-10T19:14:04Z</time>
+</trkpt>
+<trkpt lat="40.240651650" lon="-74.655871600">
+ <ele>23.500000</ele>
+<time>2007-03-10T19:14:05Z</time>
+</trkpt>
+<trkpt lat="40.240658300" lon="-74.655855000">
+ <ele>24.900000</ele>
+<time>2007-03-10T19:14:06Z</time>
+</trkpt>
+<trkpt lat="40.240666650" lon="-74.655840000">
+ <ele>25.600000</ele>
+<time>2007-03-10T19:14:07Z</time>
+</trkpt>
+<trkpt lat="40.240675000" lon="-74.655818300">
+ <ele>25.100000</ele>
+<time>2007-03-10T19:14:08Z</time>
+</trkpt>
+<trkpt lat="40.240680000" lon="-74.655796600">
+ <ele>24.700001</ele>
+<time>2007-03-10T19:14:09Z</time>
+</trkpt>
+<trkpt lat="40.240683300" lon="-74.655778300">
+ <ele>24.500000</ele>
+<time>2007-03-10T19:14:10Z</time>
+</trkpt>
+<trkpt lat="40.240691650" lon="-74.655765000">
+ <ele>23.299999</ele>
+<time>2007-03-10T19:14:11Z</time>
+</trkpt>
+<trkpt lat="40.240699950" lon="-74.655750000">
+ <ele>22.799999</ele>
+<time>2007-03-10T19:14:12Z</time>
+</trkpt>
+<trkpt lat="40.240703300" lon="-74.655738300">
+ <ele>23.799999</ele>
+<time>2007-03-10T19:14:13Z</time>
+</trkpt>
+<trkpt lat="40.240713300" lon="-74.655723300">
+ <ele>23.400000</ele>
+<time>2007-03-10T19:14:14Z</time>
+</trkpt>
+<trkpt lat="40.240721650" lon="-74.655705000">
+ <ele>24.500000</ele>
+<time>2007-03-10T19:14:15Z</time>
+</trkpt>
+<trkpt lat="40.240730000" lon="-74.655686600">
+ <ele>24.500000</ele>
+<time>2007-03-10T19:14:16Z</time>
+</trkpt>
+<trkpt lat="40.240726650" lon="-74.655660000">
+ <ele>23.600000</ele>
+<time>2007-03-10T19:14:17Z</time>
+</trkpt>
+<trkpt lat="40.240733300" lon="-74.655636600">
+ <ele>22.900000</ele>
+<time>2007-03-10T19:14:18Z</time>
+</trkpt>
+<trkpt lat="40.240735000" lon="-74.655613300">
+ <ele>21.600000</ele>
+<time>2007-03-10T19:14:19Z</time>
+</trkpt>
+<trkpt lat="40.240740000" lon="-74.655588300">
+ <ele>21.100000</ele>
+<time>2007-03-10T19:14:20Z</time>
+</trkpt>
+<trkpt lat="40.240741650" lon="-74.655570000">
+ <ele>21.000000</ele>
+<time>2007-03-10T19:14:21Z</time>
+</trkpt>
+<trkpt lat="40.240740000" lon="-74.655551600">
+ <ele>23.100000</ele>
+<time>2007-03-10T19:14:22Z</time>
+</trkpt>
+<trkpt lat="40.240736650" lon="-74.655538300">
+ <ele>24.400000</ele>
+<time>2007-03-10T19:14:23Z</time>
+</trkpt>
+<trkpt lat="40.240733300" lon="-74.655523300">
+ <ele>27.299999</ele>
+<time>2007-03-10T19:14:24Z</time>
+</trkpt>
+<trkpt lat="40.240733300" lon="-74.655503300">
+ <ele>27.600000</ele>
+<time>2007-03-10T19:14:25Z</time>
+</trkpt>
+<trkpt lat="40.240728300" lon="-74.655483300">
+ <ele>29.900000</ele>
+<time>2007-03-10T19:14:26Z</time>
+</trkpt>
+<trkpt lat="40.240728300" lon="-74.655473300">
+ <ele>30.600000</ele>
+<time>2007-03-10T19:14:27Z</time>
+</trkpt>
+<trkpt lat="40.240728300" lon="-74.655465000">
+ <ele>30.900000</ele>
+<time>2007-03-10T19:14:28Z</time>
+</trkpt>
+<trkpt lat="40.240728300" lon="-74.655455000">
+ <ele>32.799999</ele>
+<time>2007-03-10T19:14:29Z</time>
+</trkpt>
+<trkpt lat="40.240731650" lon="-74.655446600">
+ <ele>34.599998</ele>
+<time>2007-03-10T19:14:30Z</time>
+</trkpt>
+<trkpt lat="40.240735000" lon="-74.655436600">
+ <ele>35.299999</ele>
+<time>2007-03-10T19:14:31Z</time>
+</trkpt>
+<trkpt lat="40.240733300" lon="-74.655424900">
+ <ele>35.500000</ele>
+<time>2007-03-10T19:14:32Z</time>
+</trkpt>
+<trkpt lat="40.240728300" lon="-74.655411600">
+ <ele>35.099998</ele>
+<time>2007-03-10T19:14:33Z</time>
+</trkpt>
+<trkpt lat="40.240725000" lon="-74.655395000">
+ <ele>37.099998</ele>
+<time>2007-03-10T19:14:34Z</time>
+</trkpt>
+<trkpt lat="40.240720000" lon="-74.655376600">
+ <ele>38.299999</ele>
+<time>2007-03-10T19:14:35Z</time>
+</trkpt>
+<trkpt lat="40.240715000" lon="-74.655360000">
+ <ele>38.799999</ele>
+<time>2007-03-10T19:14:36Z</time>
+</trkpt>
+<trkpt lat="40.240710000" lon="-74.655341600">
+ <ele>38.700001</ele>
+<time>2007-03-10T19:14:37Z</time>
+</trkpt>
+<trkpt lat="40.240706650" lon="-74.655320000">
+ <ele>39.799999</ele>
+<time>2007-03-10T19:14:38Z</time>
+</trkpt>
+<trkpt lat="40.240699950" lon="-74.655289900">
+ <ele>40.500000</ele>
+<time>2007-03-10T19:14:39Z</time>
+</trkpt>
+<trkpt lat="40.240695000" lon="-74.655268300">
+ <ele>40.599998</ele>
+<time>2007-03-10T19:14:40Z</time>
+</trkpt>
+<trkpt lat="40.240693300" lon="-74.655246600">
+ <ele>41.700001</ele>
+<time>2007-03-10T19:14:41Z</time>
+</trkpt>
+<trkpt lat="40.240690000" lon="-74.655225000">
+ <ele>42.400002</ele>
+<time>2007-03-10T19:14:42Z</time>
+</trkpt>
+<trkpt lat="40.240695000" lon="-74.655201600">
+ <ele>43.500000</ele>
+<time>2007-03-10T19:14:43Z</time>
+</trkpt>
+<trkpt lat="40.240696650" lon="-74.655180000">
+ <ele>44.299999</ele>
+<time>2007-03-10T19:14:44Z</time>
+</trkpt>
+<trkpt lat="40.240699950" lon="-74.655161600">
+ <ele>44.799999</ele>
+<time>2007-03-10T19:14:45Z</time>
+</trkpt>
+<trkpt lat="40.240706650" lon="-74.655136600">
+ <ele>46.099998</ele>
+<time>2007-03-10T19:14:46Z</time>
+</trkpt>
+<trkpt lat="40.240710000" lon="-74.655115000">
+ <ele>45.900002</ele>
+<time>2007-03-10T19:14:47Z</time>
+</trkpt>
+<trkpt lat="40.240710000" lon="-74.655090000">
+ <ele>46.799999</ele>
+<time>2007-03-10T19:14:48Z</time>
+</trkpt>
+<trkpt lat="40.240711650" lon="-74.655063300">
+ <ele>48.000000</ele>
+<time>2007-03-10T19:14:49Z</time>
+</trkpt>
+<trkpt lat="40.240718300" lon="-74.655038300">
+ <ele>49.200001</ele>
+<time>2007-03-10T19:14:50Z</time>
+</trkpt>
+<trkpt lat="40.240716650" lon="-74.655008300">
+ <ele>50.599998</ele>
+<time>2007-03-10T19:14:51Z</time>
+</trkpt>
+<trkpt lat="40.240716650" lon="-74.654981600">
+ <ele>51.200001</ele>
+<time>2007-03-10T19:14:52Z</time>
+</trkpt>
+<trkpt lat="40.240713300" lon="-74.654960000">
+ <ele>52.799999</ele>
+<time>2007-03-10T19:14:53Z</time>
+</trkpt>
+<trkpt lat="40.240713300" lon="-74.654940000">
+ <ele>53.700001</ele>
+<time>2007-03-10T19:14:54Z</time>
+</trkpt>
+<trkpt lat="40.240708300" lon="-74.654923300">
+ <ele>55.299999</ele>
+<time>2007-03-10T19:14:55Z</time>
+</trkpt>
+<trkpt lat="40.240693300" lon="-74.654906600">
+ <ele>56.500000</ele>
+<time>2007-03-10T19:14:56Z</time>
+</trkpt>
+<trkpt lat="40.240688300" lon="-74.654888300">
+ <ele>57.799999</ele>
+<time>2007-03-10T19:14:57Z</time>
+</trkpt>
+<trkpt lat="40.240686650" lon="-74.654876600">
+ <ele>56.900002</ele>
+<time>2007-03-10T19:14:58Z</time>
+</trkpt>
+<trkpt lat="40.240675000" lon="-74.654863300">
+ <ele>55.099998</ele>
+<time>2007-03-10T19:14:59Z</time>
+</trkpt>
+<trkpt lat="40.240670000" lon="-74.654850000">
+ <ele>53.099998</ele>
+<time>2007-03-10T19:15:00Z</time>
+</trkpt>
+<trkpt lat="40.240661650" lon="-74.654831600">
+ <ele>52.200001</ele>
+<time>2007-03-10T19:15:01Z</time>
+</trkpt>
+<trkpt lat="40.240650000" lon="-74.654810000">
+ <ele>52.299999</ele>
+<time>2007-03-10T19:15:02Z</time>
+</trkpt>
+<trkpt lat="40.240636650" lon="-74.654793300">
+ <ele>50.700001</ele>
+<time>2007-03-10T19:15:03Z</time>
+</trkpt>
+<trkpt lat="40.240630000" lon="-74.654775000">
+ <ele>50.799999</ele>
+<time>2007-03-10T19:15:04Z</time>
+</trkpt>
+<trkpt lat="40.240633300" lon="-74.654758300">
+ <ele>51.200001</ele>
+<time>2007-03-10T19:15:05Z</time>
+</trkpt>
+<trkpt lat="40.240641650" lon="-74.654743300">
+ <ele>49.000000</ele>
+<time>2007-03-10T19:15:06Z</time>
+</trkpt>
+<trkpt lat="40.240645000" lon="-74.654730000">
+ <ele>48.299999</ele>
+<time>2007-03-10T19:15:07Z</time>
+</trkpt>
+<trkpt lat="40.240648300" lon="-74.654713300">
+ <ele>47.200001</ele>
+<time>2007-03-10T19:15:08Z</time>
+</trkpt>
+<trkpt lat="40.240646650" lon="-74.654693300">
+ <ele>46.599998</ele>
+<time>2007-03-10T19:15:09Z</time>
+</trkpt>
+<trkpt lat="40.240645000" lon="-74.654676600">
+ <ele>43.799999</ele>
+<time>2007-03-10T19:15:10Z</time>
+</trkpt>
+<trkpt lat="40.240636650" lon="-74.654658300">
+ <ele>42.200001</ele>
+<time>2007-03-10T19:15:11Z</time>
+</trkpt>
+<trkpt lat="40.240631650" lon="-74.654643300">
+ <ele>40.500000</ele>
+<time>2007-03-10T19:15:12Z</time>
+</trkpt>
+<trkpt lat="40.240626650" lon="-74.654621600">
+ <ele>38.500000</ele>
+<time>2007-03-10T19:15:13Z</time>
+</trkpt>
+<trkpt lat="40.240618300" lon="-74.654593300">
+ <ele>37.599998</ele>
+<time>2007-03-10T19:15:14Z</time>
+</trkpt>
+<trkpt lat="40.240615000" lon="-74.654576600">
+ <ele>37.500000</ele>
+<time>2007-03-10T19:15:15Z</time>
+</trkpt>
+<trkpt lat="40.240611650" lon="-74.654565000">
+ <ele>37.099998</ele>
+<time>2007-03-10T19:15:16Z</time>
+</trkpt>
+<trkpt lat="40.240608300" lon="-74.654551600">
+ <ele>35.400002</ele>
+<time>2007-03-10T19:15:17Z</time>
+</trkpt>
+<trkpt lat="40.240600000" lon="-74.654531600">
+ <ele>34.099998</ele>
+<time>2007-03-10T19:15:18Z</time>
+</trkpt>
+<trkpt lat="40.240586650" lon="-74.654510000">
+ <ele>33.900002</ele>
+<time>2007-03-10T19:15:19Z</time>
+</trkpt>
+<trkpt lat="40.240586650" lon="-74.654493300">
+ <ele>33.299999</ele>
+<time>2007-03-10T19:15:20Z</time>
+</trkpt>
+<trkpt lat="40.240578300" lon="-74.654473300">
+ <ele>33.299999</ele>
+<time>2007-03-10T19:15:21Z</time>
+</trkpt>
+<trkpt lat="40.240564950" lon="-74.654456600">
+ <ele>32.299999</ele>
+<time>2007-03-10T19:15:22Z</time>
+</trkpt>
+<trkpt lat="40.240561650" lon="-74.654445000">
+ <ele>31.100000</ele>
+<time>2007-03-10T19:15:23Z</time>
+</trkpt>
+<trkpt lat="40.240563300" lon="-74.654433300">
+ <ele>30.500000</ele>
+<time>2007-03-10T19:15:24Z</time>
+</trkpt>
+<trkpt lat="40.240563300" lon="-74.654418300">
+ <ele>30.400000</ele>
+<time>2007-03-10T19:15:25Z</time>
+</trkpt>
+<trkpt lat="40.240563300" lon="-74.654398300">
+ <ele>30.600000</ele>
+<time>2007-03-10T19:15:26Z</time>
+</trkpt>
+<trkpt lat="40.240570000" lon="-74.654378300">
+ <ele>29.700001</ele>
+<time>2007-03-10T19:15:27Z</time>
+</trkpt>
+<trkpt lat="40.240564950" lon="-74.654348300">
+ <ele>28.600000</ele>
+<time>2007-03-10T19:15:28Z</time>
+</trkpt>
+<trkpt lat="40.240555000" lon="-74.654315000">
+ <ele>27.900000</ele>
+<time>2007-03-10T19:15:29Z</time>
+</trkpt>
+<trkpt lat="40.240553300" lon="-74.654286600">
+ <ele>26.200001</ele>
+<time>2007-03-10T19:15:30Z</time>
+</trkpt>
+<trkpt lat="40.240558300" lon="-74.654265000">
+ <ele>25.200001</ele>
+<time>2007-03-10T19:15:31Z</time>
+</trkpt>
+<trkpt lat="40.240563300" lon="-74.654248300">
+ <ele>24.100000</ele>
+<time>2007-03-10T19:15:32Z</time>
+</trkpt>
+<trkpt lat="40.240561650" lon="-74.654223300">
+ <ele>23.200001</ele>
+<time>2007-03-10T19:15:33Z</time>
+</trkpt>
+<trkpt lat="40.240553300" lon="-74.654203300">
+ <ele>21.100000</ele>
+<time>2007-03-10T19:15:34Z</time>
+</trkpt>
+<trkpt lat="40.240546650" lon="-74.654188300">
+ <ele>21.100000</ele>
+<time>2007-03-10T19:15:35Z</time>
+</trkpt>
+<trkpt lat="40.240531650" lon="-74.654171600">
+ <ele>20.100000</ele>
+<time>2007-03-10T19:15:36Z</time>
+</trkpt>
+<trkpt lat="40.240521650" lon="-74.654156600">
+ <ele>20.900000</ele>
+<time>2007-03-10T19:15:37Z</time>
+</trkpt>
+<trkpt lat="40.240521650" lon="-74.654141600">
+ <ele>20.799999</ele>
+<time>2007-03-10T19:15:38Z</time>
+</trkpt>
+<trkpt lat="40.240518300" lon="-74.654123300">
+ <ele>19.200001</ele>
+<time>2007-03-10T19:15:39Z</time>
+</trkpt>
+<trkpt lat="40.240518300" lon="-74.654101600">
+ <ele>18.500000</ele>
+<time>2007-03-10T19:15:40Z</time>
+</trkpt>
+<trkpt lat="40.240515000" lon="-74.654081600">
+ <ele>17.900000</ele>
+<time>2007-03-10T19:15:41Z</time>
+</trkpt>
+<trkpt lat="40.240523300" lon="-74.654070000">
+ <ele>16.600000</ele>
+<time>2007-03-10T19:15:42Z</time>
+</trkpt>
+<trkpt lat="40.240530000" lon="-74.654060000">
+ <ele>16.299999</ele>
+<time>2007-03-10T19:15:43Z</time>
+</trkpt>
+<trkpt lat="40.240541650" lon="-74.654053300">
+ <ele>14.000000</ele>
+<time>2007-03-10T19:15:44Z</time>
+</trkpt>
+<trkpt lat="40.240556650" lon="-74.654056600">
+ <ele>12.100000</ele>
+<time>2007-03-10T19:15:45Z</time>
+</trkpt>
+<trkpt lat="40.240563300" lon="-74.654063300">
+ <ele>12.500000</ele>
+<time>2007-03-10T19:15:46Z</time>
+</trkpt>
+<trkpt lat="40.240578300" lon="-74.654076600">
+ <ele>11.000000</ele>
+<time>2007-03-10T19:15:47Z</time>
+</trkpt>
+<trkpt lat="40.240591650" lon="-74.654090000">
+ <ele>10.200000</ele>
+<time>2007-03-10T19:15:48Z</time>
+</trkpt>
+<trkpt lat="40.240606650" lon="-74.654115000">
+ <ele>10.600000</ele>
+<time>2007-03-10T19:15:49Z</time>
+</trkpt>
+<trkpt lat="40.240608300" lon="-74.654140000">
+ <ele>12.100000</ele>
+<time>2007-03-10T19:15:50Z</time>
+</trkpt>
+<trkpt lat="40.240603300" lon="-74.654155000">
+ <ele>13.000000</ele>
+<time>2007-03-10T19:15:51Z</time>
+</trkpt>
+<trkpt lat="40.240603300" lon="-74.654173300">
+ <ele>14.800000</ele>
+<time>2007-03-10T19:15:52Z</time>
+</trkpt>
+<trkpt lat="40.240606650" lon="-74.654195000">
+ <ele>15.200000</ele>
+<time>2007-03-10T19:15:53Z</time>
+</trkpt>
+<trkpt lat="40.240613300" lon="-74.654213300">
+ <ele>15.400000</ele>
+<time>2007-03-10T19:15:54Z</time>
+</trkpt>
+<trkpt lat="40.240616650" lon="-74.654228300">
+ <ele>17.900000</ele>
+<time>2007-03-10T19:15:55Z</time>
+</trkpt>
+<trkpt lat="40.240618300" lon="-74.654233300">
+ <ele>18.700001</ele>
+<time>2007-03-10T19:15:56Z</time>
+</trkpt>
+<trkpt lat="40.240621650" lon="-74.654248300">
+ <ele>20.100000</ele>
+<time>2007-03-10T19:15:57Z</time>
+</trkpt>
+<trkpt lat="40.240618300" lon="-74.654255000">
+ <ele>20.200001</ele>
+<time>2007-03-10T19:15:58Z</time>
+</trkpt>
+<trkpt lat="40.240615000" lon="-74.654261600">
+ <ele>21.000000</ele>
+<time>2007-03-10T19:15:59Z</time>
+</trkpt>
+<trkpt lat="40.240613300" lon="-74.654261600">
+ <ele>19.500000</ele>
+<time>2007-03-10T19:16:00Z</time>
+</trkpt>
+<trkpt lat="40.240618300" lon="-74.654263300">
+ <ele>18.500000</ele>
+<time>2007-03-10T19:16:01Z</time>
+</trkpt>
+<trkpt lat="40.240615000" lon="-74.654276600">
+ <ele>19.200001</ele>
+<time>2007-03-10T19:16:02Z</time>
+</trkpt>
+<trkpt lat="40.240613300" lon="-74.654291600">
+ <ele>19.600000</ele>
+<time>2007-03-10T19:16:03Z</time>
+</trkpt>
+<trkpt lat="40.240616650" lon="-74.654308300">
+ <ele>20.299999</ele>
+<time>2007-03-10T19:16:04Z</time>
+</trkpt>
+<trkpt lat="40.240618300" lon="-74.654328300">
+ <ele>22.200001</ele>
+<time>2007-03-10T19:16:05Z</time>
+</trkpt>
+<trkpt lat="40.240623300" lon="-74.654346600">
+ <ele>21.400000</ele>
+<time>2007-03-10T19:16:06Z</time>
+</trkpt>
+<trkpt lat="40.240628300" lon="-74.654370000">
+ <ele>23.700001</ele>
+<time>2007-03-10T19:16:07Z</time>
+</trkpt>
+<trkpt lat="40.240628300" lon="-74.654386600">
+ <ele>24.100000</ele>
+<time>2007-03-10T19:16:08Z</time>
+</trkpt>
+<trkpt lat="40.240630000" lon="-74.654411600">
+ <ele>26.799999</ele>
+<time>2007-03-10T19:16:09Z</time>
+</trkpt>
+<trkpt lat="40.240631650" lon="-74.654443300">
+ <ele>29.799999</ele>
+<time>2007-03-10T19:16:10Z</time>
+</trkpt>
+<trkpt lat="40.240638300" lon="-74.654470000">
+ <ele>30.200001</ele>
+<time>2007-03-10T19:16:11Z</time>
+</trkpt>
+<trkpt lat="40.240646650" lon="-74.654491600">
+ <ele>31.000000</ele>
+<time>2007-03-10T19:16:12Z</time>
+</trkpt>
+<trkpt lat="40.240656650" lon="-74.654508300">
+ <ele>32.500000</ele>
+<time>2007-03-10T19:16:13Z</time>
+</trkpt>
+<trkpt lat="40.240661650" lon="-74.654523300">
+ <ele>33.000000</ele>
+<time>2007-03-10T19:16:14Z</time>
+</trkpt>
+<trkpt lat="40.240663300" lon="-74.654536600">
+ <ele>32.400002</ele>
+<time>2007-03-10T19:16:15Z</time>
+</trkpt>
+<trkpt lat="40.240665000" lon="-74.654556600">
+ <ele>32.400002</ele>
+<time>2007-03-10T19:16:16Z</time>
+</trkpt>
+<trkpt lat="40.240665000" lon="-74.654581600">
+ <ele>33.099998</ele>
+<time>2007-03-10T19:16:17Z</time>
+</trkpt>
+<trkpt lat="40.240666650" lon="-74.654603300">
+ <ele>33.299999</ele>
+<time>2007-03-10T19:16:18Z</time>
+</trkpt>
+<trkpt lat="40.240670000" lon="-74.654631600">
+ <ele>36.500000</ele>
+<time>2007-03-10T19:16:19Z</time>
+</trkpt>
+<trkpt lat="40.240681650" lon="-74.654655000">
+ <ele>38.099998</ele>
+<time>2007-03-10T19:16:20Z</time>
+</trkpt>
+<trkpt lat="40.240683300" lon="-74.654678300">
+ <ele>37.700001</ele>
+<time>2007-03-10T19:16:21Z</time>
+</trkpt>
+<trkpt lat="40.240683300" lon="-74.654703300">
+ <ele>37.500000</ele>
+<time>2007-03-10T19:16:22Z</time>
+</trkpt>
+<trkpt lat="40.240685000" lon="-74.654733300">
+ <ele>38.200001</ele>
+<time>2007-03-10T19:16:23Z</time>
+</trkpt>
+<trkpt lat="40.240686650" lon="-74.654766600">
+ <ele>39.000000</ele>
+<time>2007-03-10T19:16:24Z</time>
+</trkpt>
+<trkpt lat="40.240691650" lon="-74.654800000">
+ <ele>39.400002</ele>
+<time>2007-03-10T19:16:25Z</time>
+</trkpt>
+<trkpt lat="40.240685000" lon="-74.654835000">
+ <ele>38.500000</ele>
+<time>2007-03-10T19:16:26Z</time>
+</trkpt>
+<trkpt lat="40.240681650" lon="-74.654866600">
+ <ele>36.700001</ele>
+<time>2007-03-10T19:16:27Z</time>
+</trkpt>
+<trkpt lat="40.240680000" lon="-74.654893300">
+ <ele>36.400002</ele>
+<time>2007-03-10T19:16:28Z</time>
+</trkpt>
+<trkpt lat="40.240675000" lon="-74.654916600">
+ <ele>35.599998</ele>
+<time>2007-03-10T19:16:29Z</time>
+</trkpt>
+<trkpt lat="40.240683300" lon="-74.654943300">
+ <ele>37.500000</ele>
+<time>2007-03-10T19:16:30Z</time>
+</trkpt>
+<trkpt lat="40.240688300" lon="-74.654966600">
+ <ele>38.299999</ele>
+<time>2007-03-10T19:16:31Z</time>
+</trkpt>
+<trkpt lat="40.240690000" lon="-74.654978300">
+ <ele>37.500000</ele>
+<time>2007-03-10T19:16:32Z</time>
+</trkpt>
+<trkpt lat="40.240696650" lon="-74.654996600">
+ <ele>38.700001</ele>
+<time>2007-03-10T19:16:33Z</time>
+</trkpt>
+<trkpt lat="40.240701650" lon="-74.655018300">
+ <ele>39.599998</ele>
+<time>2007-03-10T19:16:34Z</time>
+</trkpt>
+<trkpt lat="40.240699950" lon="-74.655026600">
+ <ele>38.500000</ele>
+<time>2007-03-10T19:16:35Z</time>
+</trkpt>
+<trkpt lat="40.240701650" lon="-74.655045000">
+ <ele>38.000000</ele>
+<time>2007-03-10T19:16:36Z</time>
+</trkpt>
+<trkpt lat="40.240708300" lon="-74.655056600">
+ <ele>39.099998</ele>
+<time>2007-03-10T19:16:37Z</time>
+</trkpt>
+<trkpt lat="40.240715000" lon="-74.655066600">
+ <ele>39.700001</ele>
+<time>2007-03-10T19:16:38Z</time>
+</trkpt>
+<trkpt lat="40.240718300" lon="-74.655080000">
+ <ele>41.000000</ele>
+<time>2007-03-10T19:16:39Z</time>
+</trkpt>
+<trkpt lat="40.240716650" lon="-74.655093300">
+ <ele>40.400002</ele>
+<time>2007-03-10T19:16:40Z</time>
+</trkpt>
+<trkpt lat="40.240723300" lon="-74.655101600">
+ <ele>40.799999</ele>
+<time>2007-03-10T19:16:41Z</time>
+</trkpt>
+<trkpt lat="40.240723300" lon="-74.655103300">
+ <ele>39.200001</ele>
+<time>2007-03-10T19:16:42Z</time>
+</trkpt>
+<trkpt lat="40.240721650" lon="-74.655108300">
+ <ele>39.900002</ele>
+<time>2007-03-10T19:16:43Z</time>
+</trkpt>
+<trkpt lat="40.240725000" lon="-74.655113300">
+ <ele>39.200001</ele>
+<time>2007-03-10T19:16:44Z</time>
+</trkpt>
+<trkpt lat="40.240723300" lon="-74.655115000">
+ <ele>38.299999</ele>
+<time>2007-03-10T19:16:45Z</time>
+</trkpt>
+<trkpt lat="40.240723300" lon="-74.655126600">
+ <ele>38.299999</ele>
+<time>2007-03-10T19:16:46Z</time>
+</trkpt>
+<trkpt lat="40.240731650" lon="-74.655136600">
+ <ele>38.900002</ele>
+<time>2007-03-10T19:16:47Z</time>
+</trkpt>
+<trkpt lat="40.240735000" lon="-74.655154900">
+ <ele>40.599998</ele>
+<time>2007-03-10T19:16:48Z</time>
+</trkpt>
+<trkpt lat="40.240743300" lon="-74.655178300">
+ <ele>41.599998</ele>
+<time>2007-03-10T19:16:49Z</time>
+</trkpt>
+<trkpt lat="40.240750000" lon="-74.655201600">
+ <ele>42.299999</ele>
+<time>2007-03-10T19:16:50Z</time>
+</trkpt>
+<trkpt lat="40.240758300" lon="-74.655216600">
+ <ele>42.299999</ele>
+<time>2007-03-10T19:16:51Z</time>
+</trkpt>
+<trkpt lat="40.240766650" lon="-74.655230000">
+ <ele>43.299999</ele>
+<time>2007-03-10T19:16:52Z</time>
+</trkpt>
+<trkpt lat="40.240770000" lon="-74.655240000">
+ <ele>41.500000</ele>
+<time>2007-03-10T19:16:53Z</time>
+</trkpt>
+<trkpt lat="40.240770000" lon="-74.655255000">
+ <ele>40.500000</ele>
+<time>2007-03-10T19:16:54Z</time>
+</trkpt>
+<trkpt lat="40.240773300" lon="-74.655266600">
+ <ele>37.599998</ele>
+<time>2007-03-10T19:16:55Z</time>
+</trkpt>
+<trkpt lat="40.240775000" lon="-74.655281600">
+ <ele>36.299999</ele>
+<time>2007-03-10T19:16:56Z</time>
+</trkpt>
+<trkpt lat="40.240771650" lon="-74.655305000">
+ <ele>37.599998</ele>
+<time>2007-03-10T19:16:57Z</time>
+</trkpt>
+<trkpt lat="40.240770000" lon="-74.655328300">
+ <ele>37.200001</ele>
+<time>2007-03-10T19:16:58Z</time>
+</trkpt>
+<trkpt lat="40.240770000" lon="-74.655353300">
+ <ele>37.299999</ele>
+<time>2007-03-10T19:16:59Z</time>
+</trkpt>
+<trkpt lat="40.240771650" lon="-74.655373300">
+ <ele>36.500000</ele>
+<time>2007-03-10T19:17:00Z</time>
+</trkpt>
+<trkpt lat="40.240768300" lon="-74.655381600">
+ <ele>34.799999</ele>
+<time>2007-03-10T19:17:01Z</time>
+</trkpt>
+<trkpt lat="40.240761650" lon="-74.655396600">
+ <ele>34.200001</ele>
+<time>2007-03-10T19:17:02Z</time>
+</trkpt>
+<trkpt lat="40.240758300" lon="-74.655405000">
+ <ele>32.099998</ele>
+<time>2007-03-10T19:17:03Z</time>
+</trkpt>
+<trkpt lat="40.240758300" lon="-74.655410000">
+ <ele>29.700001</ele>
+<time>2007-03-10T19:17:04Z</time>
+</trkpt>
+<trkpt lat="40.240755000" lon="-74.655423300">
+ <ele>29.400000</ele>
+<time>2007-03-10T19:17:05Z</time>
+</trkpt>
+<trkpt lat="40.240748300" lon="-74.655440000">
+ <ele>28.900000</ele>
+<time>2007-03-10T19:17:06Z</time>
+</trkpt>
+<trkpt lat="40.240740000" lon="-74.655455000">
+ <ele>27.500000</ele>
+<time>2007-03-10T19:17:07Z</time>
+</trkpt>
+<trkpt lat="40.240731650" lon="-74.655478300">
+ <ele>28.900000</ele>
+<time>2007-03-10T19:17:08Z</time>
+</trkpt>
+<trkpt lat="40.240721650" lon="-74.655511600">
+ <ele>32.400002</ele>
+<time>2007-03-10T19:17:09Z</time>
+</trkpt>
+<trkpt lat="40.240713300" lon="-74.655538300">
+ <ele>32.299999</ele>
+<time>2007-03-10T19:17:10Z</time>
+</trkpt>
+<trkpt lat="40.240708300" lon="-74.655568300">
+ <ele>33.700001</ele>
+<time>2007-03-10T19:17:11Z</time>
+</trkpt>
+<trkpt lat="40.240716650" lon="-74.655590000">
+ <ele>35.299999</ele>
+<time>2007-03-10T19:17:12Z</time>
+</trkpt>
+<trkpt lat="40.240725000" lon="-74.655605000">
+ <ele>34.700001</ele>
+<time>2007-03-10T19:17:13Z</time>
+</trkpt>
+<trkpt lat="40.240731650" lon="-74.655626600">
+ <ele>35.400002</ele>
+<time>2007-03-10T19:17:14Z</time>
+</trkpt>
+<trkpt lat="40.240738300" lon="-74.655650000">
+ <ele>35.099998</ele>
+<time>2007-03-10T19:17:15Z</time>
+</trkpt>
+<trkpt lat="40.240748300" lon="-74.655670000">
+ <ele>34.299999</ele>
+<time>2007-03-10T19:17:16Z</time>
+</trkpt>
+<trkpt lat="40.240755000" lon="-74.655686600">
+ <ele>31.799999</ele>
+<time>2007-03-10T19:17:17Z</time>
+</trkpt>
+<trkpt lat="40.240756650" lon="-74.655698300">
+ <ele>28.900000</ele>
+<time>2007-03-10T19:17:18Z</time>
+</trkpt>
+<trkpt lat="40.240744950" lon="-74.655708300">
+ <ele>23.799999</ele>
+<time>2007-03-10T19:17:19Z</time>
+</trkpt>
+<trkpt lat="40.240741650" lon="-74.655720000">
+ <ele>23.400000</ele>
+<time>2007-03-10T19:17:20Z</time>
+</trkpt>
+<trkpt lat="40.240741650" lon="-74.655733300">
+ <ele>23.799999</ele>
+<time>2007-03-10T19:17:21Z</time>
+</trkpt>
+<trkpt lat="40.240744950" lon="-74.655741600">
+ <ele>22.799999</ele>
+<time>2007-03-10T19:17:22Z</time>
+</trkpt>
+<trkpt lat="40.240751650" lon="-74.655743300">
+ <ele>21.900000</ele>
+<time>2007-03-10T19:17:23Z</time>
+</trkpt>
+<trkpt lat="40.240760000" lon="-74.655746600">
+ <ele>21.600000</ele>
+<time>2007-03-10T19:17:24Z</time>
+</trkpt>
+<trkpt lat="40.240766650" lon="-74.655758300">
+ <ele>21.400000</ele>
+<time>2007-03-10T19:17:25Z</time>
+</trkpt>
+<trkpt lat="40.240770000" lon="-74.655770000">
+ <ele>21.799999</ele>
+<time>2007-03-10T19:17:26Z</time>
+</trkpt>
+<trkpt lat="40.240776650" lon="-74.655778300">
+ <ele>22.100000</ele>
+<time>2007-03-10T19:17:27Z</time>
+</trkpt>
+<trkpt lat="40.240783300" lon="-74.655791600">
+ <ele>22.500000</ele>
+<time>2007-03-10T19:17:28Z</time>
+</trkpt>
+<trkpt lat="40.240785000" lon="-74.655811600">
+ <ele>23.200001</ele>
+<time>2007-03-10T19:17:29Z</time>
+</trkpt>
+<trkpt lat="40.240785000" lon="-74.655833300">
+ <ele>24.200001</ele>
+<time>2007-03-10T19:17:30Z</time>
+</trkpt>
+<trkpt lat="40.240780000" lon="-74.655865000">
+ <ele>25.200001</ele>
+<time>2007-03-10T19:17:31Z</time>
+</trkpt>
+<trkpt lat="40.240770000" lon="-74.655893300">
+ <ele>25.900000</ele>
+<time>2007-03-10T19:17:32Z</time>
+</trkpt>
+<trkpt lat="40.240763300" lon="-74.655916600">
+ <ele>26.100000</ele>
+<time>2007-03-10T19:17:33Z</time>
+</trkpt>
+<trkpt lat="40.240756650" lon="-74.655938300">
+ <ele>25.799999</ele>
+<time>2007-03-10T19:17:34Z</time>
+</trkpt>
+<trkpt lat="40.240751650" lon="-74.655950000">
+ <ele>23.799999</ele>
+<time>2007-03-10T19:17:35Z</time>
+</trkpt>
+<trkpt lat="40.240753300" lon="-74.655959900">
+ <ele>21.799999</ele>
+<time>2007-03-10T19:17:36Z</time>
+</trkpt>
+<trkpt lat="40.240756650" lon="-74.655976600">
+ <ele>20.400000</ele>
+<time>2007-03-10T19:17:37Z</time>
+</trkpt>
+<trkpt lat="40.240760000" lon="-74.655993300">
+ <ele>19.799999</ele>
+<time>2007-03-10T19:17:38Z</time>
+</trkpt>
+<trkpt lat="40.240763300" lon="-74.656011600">
+ <ele>19.100000</ele>
+<time>2007-03-10T19:17:39Z</time>
+</trkpt>
+<trkpt lat="40.240763300" lon="-74.656030000">
+ <ele>20.000000</ele>
+<time>2007-03-10T19:17:40Z</time>
+</trkpt>
+<trkpt lat="40.240761650" lon="-74.656051600">
+ <ele>21.100000</ele>
+<time>2007-03-10T19:17:41Z</time>
+</trkpt>
+<trkpt lat="40.240760000" lon="-74.656066600">
+ <ele>21.400000</ele>
+<time>2007-03-10T19:17:42Z</time>
+</trkpt>
+<trkpt lat="40.240755000" lon="-74.656088300">
+ <ele>22.400000</ele>
+<time>2007-03-10T19:17:43Z</time>
+</trkpt>
+<trkpt lat="40.240751650" lon="-74.656111600">
+ <ele>23.299999</ele>
+<time>2007-03-10T19:17:44Z</time>
+</trkpt>
+<trkpt lat="40.240746650" lon="-74.656138300">
+ <ele>25.500000</ele>
+<time>2007-03-10T19:17:45Z</time>
+</trkpt>
+<trkpt lat="40.240744950" lon="-74.656160000">
+ <ele>27.100000</ele>
+<time>2007-03-10T19:17:46Z</time>
+</trkpt>
+<trkpt lat="40.240751650" lon="-74.656178300">
+ <ele>29.700001</ele>
+<time>2007-03-10T19:17:47Z</time>
+</trkpt>
+<trkpt lat="40.240761650" lon="-74.656191600">
+ <ele>31.600000</ele>
+<time>2007-03-10T19:17:48Z</time>
+</trkpt>
+<trkpt lat="40.240768300" lon="-74.656210000">
+ <ele>33.599998</ele>
+<time>2007-03-10T19:17:49Z</time>
+</trkpt>
+<trkpt lat="40.240773300" lon="-74.656231600">
+ <ele>36.099998</ele>
+<time>2007-03-10T19:17:50Z</time>
+</trkpt>
+<trkpt lat="40.240776650" lon="-74.656251600">
+ <ele>36.599998</ele>
+<time>2007-03-10T19:17:51Z</time>
+</trkpt>
+<trkpt lat="40.240771650" lon="-74.656270000">
+ <ele>32.900002</ele>
+<time>2007-03-10T19:17:52Z</time>
+</trkpt>
+<trkpt lat="40.240770000" lon="-74.656288300">
+ <ele>31.600000</ele>
+<time>2007-03-10T19:17:53Z</time>
+</trkpt>
+<trkpt lat="40.240768300" lon="-74.656310000">
+ <ele>31.100000</ele>
+<time>2007-03-10T19:17:54Z</time>
+</trkpt>
+<trkpt lat="40.240763300" lon="-74.656328300">
+ <ele>30.100000</ele>
+<time>2007-03-10T19:17:55Z</time>
+</trkpt>
+<trkpt lat="40.240758300" lon="-74.656353300">
+ <ele>30.200001</ele>
+<time>2007-03-10T19:17:56Z</time>
+</trkpt>
+<trkpt lat="40.240753300" lon="-74.656373300">
+ <ele>29.500000</ele>
+<time>2007-03-10T19:17:57Z</time>
+</trkpt>
+<trkpt lat="40.240744950" lon="-74.656405000">
+ <ele>29.799999</ele>
+<time>2007-03-10T19:17:58Z</time>
+</trkpt>
+<trkpt lat="40.240728300" lon="-74.656446600">
+ <ele>31.400000</ele>
+<time>2007-03-10T19:17:59Z</time>
+</trkpt>
+<trkpt lat="40.240713300" lon="-74.656486600">
+ <ele>33.500000</ele>
+<time>2007-03-10T19:18:00Z</time>
+</trkpt>
+<trkpt lat="40.240699950" lon="-74.656521600">
+ <ele>34.900002</ele>
+<time>2007-03-10T19:18:01Z</time>
+</trkpt>
+<trkpt lat="40.240688300" lon="-74.656551600">
+ <ele>36.500000</ele>
+<time>2007-03-10T19:18:02Z</time>
+</trkpt>
+<trkpt lat="40.240678300" lon="-74.656578300">
+ <ele>38.000000</ele>
+<time>2007-03-10T19:18:03Z</time>
+</trkpt>
+<trkpt lat="40.240668300" lon="-74.656603300">
+ <ele>39.400002</ele>
+<time>2007-03-10T19:18:04Z</time>
+</trkpt>
+<trkpt lat="40.240666650" lon="-74.656626600">
+ <ele>41.299999</ele>
+<time>2007-03-10T19:18:05Z</time>
+</trkpt>
+<trkpt lat="40.240671650" lon="-74.656643300">
+ <ele>42.700001</ele>
+<time>2007-03-10T19:18:06Z</time>
+</trkpt>
+<trkpt lat="40.240678300" lon="-74.656658300">
+ <ele>43.900002</ele>
+<time>2007-03-10T19:18:07Z</time>
+</trkpt>
+<trkpt lat="40.240685000" lon="-74.656670000">
+ <ele>44.500000</ele>
+<time>2007-03-10T19:18:08Z</time>
+</trkpt>
+<trkpt lat="40.240686650" lon="-74.656688300">
+ <ele>44.900002</ele>
+<time>2007-03-10T19:18:09Z</time>
+</trkpt>
+<trkpt lat="40.240691650" lon="-74.656698300">
+ <ele>43.900002</ele>
+<time>2007-03-10T19:18:10Z</time>
+</trkpt>
+<trkpt lat="40.240695000" lon="-74.656708300">
+ <ele>43.299999</ele>
+<time>2007-03-10T19:18:11Z</time>
+</trkpt>
+<trkpt lat="40.240693300" lon="-74.656718300">
+ <ele>42.700001</ele>
+<time>2007-03-10T19:18:12Z</time>
+</trkpt>
+<trkpt lat="40.240695000" lon="-74.656730000">
+ <ele>41.900002</ele>
+<time>2007-03-10T19:18:13Z</time>
+</trkpt>
+<trkpt lat="40.240703300" lon="-74.656738300">
+ <ele>41.099998</ele>
+<time>2007-03-10T19:18:14Z</time>
+</trkpt>
+<trkpt lat="40.240713300" lon="-74.656743300">
+ <ele>40.500000</ele>
+<time>2007-03-10T19:18:15Z</time>
+</trkpt>
+<trkpt lat="40.240721650" lon="-74.656748300">
+ <ele>39.000000</ele>
+<time>2007-03-10T19:18:16Z</time>
+</trkpt>
+<trkpt lat="40.240723300" lon="-74.656758300">
+ <ele>36.900002</ele>
+<time>2007-03-10T19:18:17Z</time>
+</trkpt>
+<trkpt lat="40.240720000" lon="-74.656766600">
+ <ele>35.400002</ele>
+<time>2007-03-10T19:18:18Z</time>
+</trkpt>
+<trkpt lat="40.240716650" lon="-74.656775000">
+ <ele>34.799999</ele>
+<time>2007-03-10T19:18:19Z</time>
+</trkpt>
+<trkpt lat="40.240715000" lon="-74.656786600">
+ <ele>35.400002</ele>
+<time>2007-03-10T19:18:20Z</time>
+</trkpt>
+<trkpt lat="40.240718300" lon="-74.656793300">
+ <ele>35.599998</ele>
+<time>2007-03-10T19:18:21Z</time>
+</trkpt>
+<trkpt lat="40.240718300" lon="-74.656803300">
+ <ele>35.700001</ele>
+<time>2007-03-10T19:18:22Z</time>
+</trkpt>
+<trkpt lat="40.240716650" lon="-74.656815000">
+ <ele>36.200001</ele>
+<time>2007-03-10T19:18:23Z</time>
+</trkpt>
+<trkpt lat="40.240718300" lon="-74.656833300">
+ <ele>36.400002</ele>
+<time>2007-03-10T19:18:24Z</time>
+</trkpt>
+<trkpt lat="40.240720000" lon="-74.656853300">
+ <ele>36.299999</ele>
+<time>2007-03-10T19:18:25Z</time>
+</trkpt>
+<trkpt lat="40.240723300" lon="-74.656866600">
+ <ele>36.599998</ele>
+<time>2007-03-10T19:18:26Z</time>
+</trkpt>
+<trkpt lat="40.240730000" lon="-74.656870000">
+ <ele>35.599998</ele>
+<time>2007-03-10T19:18:27Z</time>
+</trkpt>
+<trkpt lat="40.240730000" lon="-74.656878300">
+ <ele>34.000000</ele>
+<time>2007-03-10T19:18:28Z</time>
+</trkpt>
+<trkpt lat="40.240730000" lon="-74.656893300">
+ <ele>32.599998</ele>
+<time>2007-03-10T19:18:29Z</time>
+</trkpt>
+<trkpt lat="40.240725000" lon="-74.656908300">
+ <ele>31.100000</ele>
+<time>2007-03-10T19:18:30Z</time>
+</trkpt>
+<trkpt lat="40.240723300" lon="-74.656923300">
+ <ele>31.100000</ele>
+<time>2007-03-10T19:18:31Z</time>
+</trkpt>
+<trkpt lat="40.240728300" lon="-74.656941600">
+ <ele>30.299999</ele>
+<time>2007-03-10T19:18:32Z</time>
+</trkpt>
+<trkpt lat="40.240730000" lon="-74.656960000">
+ <ele>29.900000</ele>
+<time>2007-03-10T19:18:33Z</time>
+</trkpt>
+<trkpt lat="40.240735000" lon="-74.656975000">
+ <ele>29.600000</ele>
+<time>2007-03-10T19:18:34Z</time>
+</trkpt>
+<trkpt lat="40.240738300" lon="-74.656996600">
+ <ele>30.100000</ele>
+<time>2007-03-10T19:18:35Z</time>
+</trkpt>
+<trkpt lat="40.240740000" lon="-74.657020000">
+ <ele>31.000000</ele>
+<time>2007-03-10T19:18:36Z</time>
+</trkpt>
+<trkpt lat="40.240736650" lon="-74.657038300">
+ <ele>31.000000</ele>
+<time>2007-03-10T19:18:37Z</time>
+</trkpt>
+<trkpt lat="40.240736650" lon="-74.657060000">
+ <ele>30.299999</ele>
+<time>2007-03-10T19:18:38Z</time>
+</trkpt>
+<trkpt lat="40.240738300" lon="-74.657088300">
+ <ele>29.900000</ele>
+<time>2007-03-10T19:18:39Z</time>
+</trkpt>
+<trkpt lat="40.240731650" lon="-74.657120000">
+ <ele>29.700001</ele>
+<time>2007-03-10T19:18:40Z</time>
+</trkpt>
+<trkpt lat="40.240723300" lon="-74.657148300">
+ <ele>29.500000</ele>
+<time>2007-03-10T19:18:41Z</time>
+</trkpt>
+<trkpt lat="40.240725000" lon="-74.657165000">
+ <ele>28.100000</ele>
+<time>2007-03-10T19:18:42Z</time>
+</trkpt>
+<trkpt lat="40.240726650" lon="-74.657176600">
+ <ele>26.799999</ele>
+<time>2007-03-10T19:18:43Z</time>
+</trkpt>
+<trkpt lat="40.240730000" lon="-74.657191600">
+ <ele>25.900000</ele>
+<time>2007-03-10T19:18:44Z</time>
+</trkpt>
+<trkpt lat="40.240730000" lon="-74.657210000">
+ <ele>25.100000</ele>
+<time>2007-03-10T19:18:45Z</time>
+</trkpt>
+<trkpt lat="40.240730000" lon="-74.657228300">
+ <ele>24.200001</ele>
+<time>2007-03-10T19:18:46Z</time>
+</trkpt>
+<trkpt lat="40.240723300" lon="-74.657243300">
+ <ele>23.000000</ele>
+<time>2007-03-10T19:18:47Z</time>
+</trkpt>
+<trkpt lat="40.240718300" lon="-74.657259900">
+ <ele>22.500000</ele>
+<time>2007-03-10T19:18:48Z</time>
+</trkpt>
+<trkpt lat="40.240716650" lon="-74.657278300">
+ <ele>21.799999</ele>
+<time>2007-03-10T19:18:49Z</time>
+</trkpt>
+<trkpt lat="40.240713300" lon="-74.657296600">
+ <ele>21.100000</ele>
+<time>2007-03-10T19:18:50Z</time>
+</trkpt>
+<trkpt lat="40.240711650" lon="-74.657318300">
+ <ele>20.900000</ele>
+<time>2007-03-10T19:18:51Z</time>
+</trkpt>
+<trkpt lat="40.240713300" lon="-74.657330000">
+ <ele>19.799999</ele>
+<time>2007-03-10T19:18:52Z</time>
+</trkpt>
+<trkpt lat="40.240708300" lon="-74.657346600">
+ <ele>19.299999</ele>
+<time>2007-03-10T19:18:53Z</time>
+</trkpt>
+<trkpt lat="40.240703300" lon="-74.657370000">
+ <ele>19.799999</ele>
+<time>2007-03-10T19:18:54Z</time>
+</trkpt>
+<trkpt lat="40.240691650" lon="-74.657394900">
+ <ele>20.500000</ele>
+<time>2007-03-10T19:18:55Z</time>
+</trkpt>
+<trkpt lat="40.240678300" lon="-74.657430000">
+ <ele>22.299999</ele>
+<time>2007-03-10T19:18:56Z</time>
+</trkpt>
+<trkpt lat="40.240660000" lon="-74.657458300">
+ <ele>24.400000</ele>
+<time>2007-03-10T19:18:57Z</time>
+</trkpt>
+<trkpt lat="40.240648300" lon="-74.657481600">
+ <ele>25.799999</ele>
+<time>2007-03-10T19:18:58Z</time>
+</trkpt>
+<trkpt lat="40.240640000" lon="-74.657508300">
+ <ele>28.200001</ele>
+<time>2007-03-10T19:18:59Z</time>
+</trkpt>
+<trkpt lat="40.240628300" lon="-74.657535000">
+ <ele>29.600000</ele>
+<time>2007-03-10T19:19:00Z</time>
+</trkpt>
+<trkpt lat="40.240625000" lon="-74.657558300">
+ <ele>31.100000</ele>
+<time>2007-03-10T19:19:01Z</time>
+</trkpt>
+<trkpt lat="40.240626650" lon="-74.657571600">
+ <ele>31.600000</ele>
+<time>2007-03-10T19:19:02Z</time>
+</trkpt>
+<trkpt lat="40.240626650" lon="-74.657585000">
+ <ele>32.000000</ele>
+<time>2007-03-10T19:19:03Z</time>
+</trkpt>
+<trkpt lat="40.240628300" lon="-74.657600000">
+ <ele>32.299999</ele>
+<time>2007-03-10T19:19:04Z</time>
+</trkpt>
+<trkpt lat="40.240620000" lon="-74.657620000">
+ <ele>33.200001</ele>
+<time>2007-03-10T19:19:05Z</time>
+</trkpt>
+<trkpt lat="40.240608300" lon="-74.657645000">
+ <ele>33.900002</ele>
+<time>2007-03-10T19:19:06Z</time>
+</trkpt>
+<trkpt lat="40.240600000" lon="-74.657670000">
+ <ele>35.400002</ele>
+<time>2007-03-10T19:19:07Z</time>
+</trkpt>
+<trkpt lat="40.240595000" lon="-74.657688300">
+ <ele>36.299999</ele>
+<time>2007-03-10T19:19:08Z</time>
+</trkpt>
+<trkpt lat="40.240595000" lon="-74.657705000">
+ <ele>36.799999</ele>
+<time>2007-03-10T19:19:09Z</time>
+</trkpt>
+<trkpt lat="40.240600000" lon="-74.657718300">
+ <ele>36.500000</ele>
+<time>2007-03-10T19:19:10Z</time>
+</trkpt>
+<trkpt lat="40.240605000" lon="-74.657730000">
+ <ele>36.200001</ele>
+<time>2007-03-10T19:19:11Z</time>
+</trkpt>
+<trkpt lat="40.240600000" lon="-74.657746600">
+ <ele>36.400002</ele>
+<time>2007-03-10T19:19:12Z</time>
+</trkpt>
+<trkpt lat="40.240596650" lon="-74.657760000">
+ <ele>36.200001</ele>
+<time>2007-03-10T19:19:13Z</time>
+</trkpt>
+<trkpt lat="40.240593300" lon="-74.657778300">
+ <ele>36.400002</ele>
+<time>2007-03-10T19:19:14Z</time>
+</trkpt>
+<trkpt lat="40.240591650" lon="-74.657798300">
+ <ele>36.599998</ele>
+<time>2007-03-10T19:19:15Z</time>
+</trkpt>
+<trkpt lat="40.240595000" lon="-74.657810000">
+ <ele>35.599998</ele>
+<time>2007-03-10T19:19:16Z</time>
+</trkpt>
+<trkpt lat="40.240605000" lon="-74.657823300">
+ <ele>35.099998</ele>
+<time>2007-03-10T19:19:17Z</time>
+</trkpt>
+<trkpt lat="40.240621650" lon="-74.657821600">
+ <ele>33.900002</ele>
+<time>2007-03-10T19:19:18Z</time>
+</trkpt>
+<trkpt lat="40.240636650" lon="-74.657823300">
+ <ele>33.700001</ele>
+<time>2007-03-10T19:19:19Z</time>
+</trkpt>
+<trkpt lat="40.240658300" lon="-74.657830000">
+ <ele>34.299999</ele>
+<time>2007-03-10T19:19:20Z</time>
+</trkpt>
+<trkpt lat="40.240671650" lon="-74.657841600">
+ <ele>35.200001</ele>
+<time>2007-03-10T19:19:21Z</time>
+</trkpt>
+<trkpt lat="40.240685000" lon="-74.657855000">
+ <ele>35.799999</ele>
+<time>2007-03-10T19:19:22Z</time>
+</trkpt>
+<trkpt lat="40.240690000" lon="-74.657863300">
+ <ele>35.299999</ele>
+<time>2007-03-10T19:19:23Z</time>
+</trkpt>
+<trkpt lat="40.240685000" lon="-74.657870000">
+ <ele>34.299999</ele>
+<time>2007-03-10T19:19:24Z</time>
+</trkpt>
+<trkpt lat="40.240681650" lon="-74.657883300">
+ <ele>34.099998</ele>
+<time>2007-03-10T19:19:25Z</time>
+</trkpt>
+<trkpt lat="40.240663300" lon="-74.657906600">
+ <ele>34.000000</ele>
+<time>2007-03-10T19:19:26Z</time>
+</trkpt>
+<trkpt lat="40.240653300" lon="-74.657931600">
+ <ele>34.400002</ele>
+<time>2007-03-10T19:19:27Z</time>
+</trkpt>
+<trkpt lat="40.240640000" lon="-74.657963300">
+ <ele>35.599998</ele>
+<time>2007-03-10T19:19:28Z</time>
+</trkpt>
+<trkpt lat="40.240628300" lon="-74.657983300">
+ <ele>35.500000</ele>
+<time>2007-03-10T19:19:29Z</time>
+</trkpt>
+<trkpt lat="40.240611650" lon="-74.658016600">
+ <ele>37.099998</ele>
+<time>2007-03-10T19:19:30Z</time>
+</trkpt>
+<trkpt lat="40.240593300" lon="-74.658043300">
+ <ele>37.900002</ele>
+<time>2007-03-10T19:19:31Z</time>
+</trkpt>
+<trkpt lat="40.240578300" lon="-74.658063300">
+ <ele>37.799999</ele>
+<time>2007-03-10T19:19:32Z</time>
+</trkpt>
+<trkpt lat="40.240563300" lon="-74.658085000">
+ <ele>37.799999</ele>
+<time>2007-03-10T19:19:33Z</time>
+</trkpt>
+<trkpt lat="40.240550000" lon="-74.658106600">
+ <ele>36.700001</ele>
+<time>2007-03-10T19:19:34Z</time>
+</trkpt>
+<trkpt lat="40.240538300" lon="-74.658128300">
+ <ele>36.299999</ele>
+<time>2007-03-10T19:19:35Z</time>
+</trkpt>
+<trkpt lat="40.240530000" lon="-74.658150000">
+ <ele>36.599998</ele>
+<time>2007-03-10T19:19:36Z</time>
+</trkpt>
+<trkpt lat="40.240523300" lon="-74.658183300">
+ <ele>38.099998</ele>
+<time>2007-03-10T19:19:37Z</time>
+</trkpt>
+<trkpt lat="40.240518300" lon="-74.658220000">
+ <ele>40.099998</ele>
+<time>2007-03-10T19:19:38Z</time>
+</trkpt>
+<trkpt lat="40.240515000" lon="-74.658244900">
+ <ele>40.000000</ele>
+<time>2007-03-10T19:19:39Z</time>
+</trkpt>
+<trkpt lat="40.240515000" lon="-74.658258300">
+ <ele>38.799999</ele>
+<time>2007-03-10T19:19:40Z</time>
+</trkpt>
+<trkpt lat="40.240513300" lon="-74.658263300">
+ <ele>36.700001</ele>
+<time>2007-03-10T19:19:41Z</time>
+</trkpt>
+<trkpt lat="40.240508300" lon="-74.658271600">
+ <ele>34.700001</ele>
+<time>2007-03-10T19:19:42Z</time>
+</trkpt>
+<trkpt lat="40.240503300" lon="-74.658286600">
+ <ele>33.900002</ele>
+<time>2007-03-10T19:19:43Z</time>
+</trkpt>
+<trkpt lat="40.240500000" lon="-74.658303300">
+ <ele>33.700001</ele>
+<time>2007-03-10T19:19:44Z</time>
+</trkpt>
+<trkpt lat="40.240495000" lon="-74.658326600">
+ <ele>34.299999</ele>
+<time>2007-03-10T19:19:45Z</time>
+</trkpt>
+<trkpt lat="40.240498300" lon="-74.658350000">
+ <ele>35.299999</ele>
+<time>2007-03-10T19:19:46Z</time>
+</trkpt>
+<trkpt lat="40.240498300" lon="-74.658375000">
+ <ele>35.700001</ele>
+<time>2007-03-10T19:19:47Z</time>
+</trkpt>
+<trkpt lat="40.240500000" lon="-74.658400000">
+ <ele>36.099998</ele>
+<time>2007-03-10T19:19:48Z</time>
+</trkpt>
+<trkpt lat="40.240498300" lon="-74.658410000">
+ <ele>35.200001</ele>
+<time>2007-03-10T19:19:49Z</time>
+</trkpt>
+<trkpt lat="40.240498300" lon="-74.658433300">
+ <ele>35.799999</ele>
+<time>2007-03-10T19:19:50Z</time>
+</trkpt>
+<trkpt lat="40.240500000" lon="-74.658451600">
+ <ele>36.299999</ele>
+<time>2007-03-10T19:19:51Z</time>
+</trkpt>
+<trkpt lat="40.240505000" lon="-74.658456600">
+ <ele>35.900002</ele>
+<time>2007-03-10T19:19:52Z</time>
+</trkpt>
+<trkpt lat="40.240505000" lon="-74.658470000">
+ <ele>36.000000</ele>
+<time>2007-03-10T19:19:53Z</time>
+</trkpt>
+<trkpt lat="40.240506650" lon="-74.658481600">
+ <ele>35.700001</ele>
+<time>2007-03-10T19:19:54Z</time>
+</trkpt>
+<trkpt lat="40.240508300" lon="-74.658486600">
+ <ele>34.500000</ele>
+<time>2007-03-10T19:19:55Z</time>
+</trkpt>
+<trkpt lat="40.240506650" lon="-74.658486600">
+ <ele>32.900002</ele>
+<time>2007-03-10T19:19:56Z</time>
+</trkpt>
+<trkpt lat="40.240501650" lon="-74.658498300">
+ <ele>32.299999</ele>
+<time>2007-03-10T19:19:57Z</time>
+</trkpt>
+<trkpt lat="40.240503300" lon="-74.658516600">
+ <ele>32.299999</ele>
+<time>2007-03-10T19:19:58Z</time>
+</trkpt>
+<trkpt lat="40.240506650" lon="-74.658540000">
+ <ele>33.200001</ele>
+<time>2007-03-10T19:19:59Z</time>
+</trkpt>
+<trkpt lat="40.240511650" lon="-74.658560000">
+ <ele>33.000000</ele>
+<time>2007-03-10T19:20:00Z</time>
+</trkpt>
+<trkpt lat="40.240508300" lon="-74.658571600">
+ <ele>31.799999</ele>
+<time>2007-03-10T19:20:01Z</time>
+</trkpt>
+<trkpt lat="40.240510000" lon="-74.658588300">
+ <ele>31.100000</ele>
+<time>2007-03-10T19:20:02Z</time>
+</trkpt>
+<trkpt lat="40.240506650" lon="-74.658610000">
+ <ele>30.600000</ele>
+<time>2007-03-10T19:20:03Z</time>
+</trkpt>
+<trkpt lat="40.240501650" lon="-74.658628300">
+ <ele>28.799999</ele>
+<time>2007-03-10T19:20:04Z</time>
+</trkpt>
+<trkpt lat="40.240496650" lon="-74.658653300">
+ <ele>28.299999</ele>
+<time>2007-03-10T19:20:05Z</time>
+</trkpt>
+<trkpt lat="40.240498300" lon="-74.658678300">
+ <ele>27.500000</ele>
+<time>2007-03-10T19:20:06Z</time>
+</trkpt>
+<trkpt lat="40.240501650" lon="-74.658703300">
+ <ele>27.700001</ele>
+<time>2007-03-10T19:20:07Z</time>
+</trkpt>
+<trkpt lat="40.240503300" lon="-74.658726600">
+ <ele>27.200001</ele>
+<time>2007-03-10T19:20:08Z</time>
+</trkpt>
+<trkpt lat="40.240496650" lon="-74.658738300">
+ <ele>25.600000</ele>
+<time>2007-03-10T19:20:09Z</time>
+</trkpt>
+<trkpt lat="40.240485000" lon="-74.658743300">
+ <ele>23.200001</ele>
+<time>2007-03-10T19:20:10Z</time>
+</trkpt>
+<trkpt lat="40.240475000" lon="-74.658760000">
+ <ele>21.900000</ele>
+<time>2007-03-10T19:20:11Z</time>
+</trkpt>
+<trkpt lat="40.240473300" lon="-74.658781600">
+ <ele>20.900000</ele>
+<time>2007-03-10T19:20:12Z</time>
+</trkpt>
+<trkpt lat="40.240461650" lon="-74.658798300">
+ <ele>20.900000</ele>
+<time>2007-03-10T19:20:13Z</time>
+</trkpt>
+<trkpt lat="40.240446650" lon="-74.658816600">
+ <ele>19.600000</ele>
+<time>2007-03-10T19:20:14Z</time>
+</trkpt>
+<trkpt lat="40.240430000" lon="-74.658843300">
+ <ele>20.500000</ele>
+<time>2007-03-10T19:20:15Z</time>
+</trkpt>
+<trkpt lat="40.240421650" lon="-74.658855000">
+ <ele>20.500000</ele>
+<time>2007-03-10T19:20:16Z</time>
+</trkpt>
+<trkpt lat="40.240418300" lon="-74.658863300">
+ <ele>19.000000</ele>
+<time>2007-03-10T19:20:17Z</time>
+</trkpt>
+<trkpt lat="40.240403300" lon="-74.658860000">
+ <ele>15.900000</ele>
+<time>2007-03-10T19:20:18Z</time>
+</trkpt>
+<trkpt lat="40.240390000" lon="-74.658871600">
+ <ele>14.600000</ele>
+<time>2007-03-10T19:20:19Z</time>
+</trkpt>
+<trkpt lat="40.240371650" lon="-74.658888300">
+ <ele>13.400000</ele>
+<time>2007-03-10T19:20:20Z</time>
+</trkpt>
+<trkpt lat="40.240363300" lon="-74.658911600">
+ <ele>13.400000</ele>
+<time>2007-03-10T19:20:21Z</time>
+</trkpt>
+<trkpt lat="40.240340000" lon="-74.658946600">
+ <ele>15.300000</ele>
+<time>2007-03-10T19:20:22Z</time>
+</trkpt>
+<trkpt lat="40.240335000" lon="-74.658966600">
+ <ele>15.100000</ele>
+<time>2007-03-10T19:20:23Z</time>
+</trkpt>
+<trkpt lat="40.240335000" lon="-74.658983300">
+ <ele>15.300000</ele>
+<time>2007-03-10T19:20:24Z</time>
+</trkpt>
+<trkpt lat="40.240336650" lon="-74.659011600">
+ <ele>16.799999</ele>
+<time>2007-03-10T19:20:25Z</time>
+</trkpt>
+<trkpt lat="40.240325000" lon="-74.659078300">
+ <ele>16.799999</ele>
+<time>2007-03-10T19:20:27Z</time>
+</trkpt>
+<trkpt lat="40.240333300" lon="-74.659094900">
+ <ele>19.799999</ele>
+<time>2007-03-10T19:20:28Z</time>
+</trkpt>
+<trkpt lat="40.240336650" lon="-74.659115000">
+ <ele>19.700001</ele>
+<time>2007-03-10T19:20:29Z</time>
+</trkpt>
+<trkpt lat="40.240331650" lon="-74.659128300">
+ <ele>18.600000</ele>
+<time>2007-03-10T19:20:30Z</time>
+</trkpt>
+<trkpt lat="40.240308300" lon="-74.659158300">
+ <ele>18.600000</ele>
+<time>2007-03-10T19:20:33Z</time>
+</trkpt>
+<trkpt lat="40.240306650" lon="-74.659173300">
+ <ele>12.900000</ele>
+<time>2007-03-10T19:20:34Z</time>
+</trkpt>
+<trkpt lat="40.240310000" lon="-74.659184900">
+ <ele>12.300000</ele>
+<time>2007-03-10T19:20:35Z</time>
+</trkpt>
+<trkpt lat="40.240308300" lon="-74.659200000">
+ <ele>11.900000</ele>
+<time>2007-03-10T19:20:36Z</time>
+</trkpt>
+<trkpt lat="40.240328300" lon="-74.659266600">
+ <ele>11.900000</ele>
+<time>2007-03-10T19:20:39Z</time>
+</trkpt>
+<trkpt lat="40.240331650" lon="-74.659293300">
+ <ele>13.100000</ele>
+<time>2007-03-10T19:20:40Z</time>
+</trkpt>
+<trkpt lat="40.240336650" lon="-74.659315000">
+ <ele>13.700000</ele>
+<time>2007-03-10T19:20:41Z</time>
+</trkpt>
+<trkpt lat="40.240340000" lon="-74.659331600">
+ <ele>13.700000</ele>
+<time>2007-03-10T19:20:42Z</time>
+</trkpt>
+<trkpt lat="40.240336650" lon="-74.659371600">
+ <ele>13.700000</ele>
+<time>2007-03-10T19:20:44Z</time>
+</trkpt>
+<trkpt lat="40.240333300" lon="-74.659393300">
+ <ele>14.600000</ele>
+<time>2007-03-10T19:20:45Z</time>
+</trkpt>
+<trkpt lat="40.240333300" lon="-74.659411600">
+ <ele>14.600000</ele>
+<time>2007-03-10T19:20:46Z</time>
+</trkpt>
+<trkpt lat="40.240325000" lon="-74.659450000">
+ <ele>14.600000</ele>
+<time>2007-03-10T19:20:49Z</time>
+</trkpt>
+<trkpt lat="40.240321650" lon="-74.659468300">
+ <ele>14.400000</ele>
+<time>2007-03-10T19:20:50Z</time>
+</trkpt>
+<trkpt lat="40.240315000" lon="-74.659488300">
+ <ele>15.300000</ele>
+<time>2007-03-10T19:20:51Z</time>
+</trkpt>
+<trkpt lat="40.240313300" lon="-74.659498300">
+ <ele>15.700000</ele>
+<time>2007-03-10T19:20:52Z</time>
+</trkpt>
+<trkpt lat="40.240313300" lon="-74.659508300">
+ <ele>15.700000</ele>
+<time>2007-03-10T19:20:53Z</time>
+</trkpt>
+<trkpt lat="40.240313300" lon="-74.659526600">
+ <ele>16.100000</ele>
+<time>2007-03-10T19:20:54Z</time>
+</trkpt>
+<trkpt lat="40.240318300" lon="-74.659541600">
+ <ele>15.900000</ele>
+<time>2007-03-10T19:20:55Z</time>
+</trkpt>
+<trkpt lat="40.240315000" lon="-74.659558300">
+ <ele>16.400000</ele>
+<time>2007-03-10T19:20:56Z</time>
+</trkpt>
+<trkpt lat="40.240313300" lon="-74.659583300">
+ <ele>16.400000</ele>
+<time>2007-03-10T19:20:58Z</time>
+</trkpt>
+<trkpt lat="40.240308300" lon="-74.659600000">
+ <ele>15.500000</ele>
+<time>2007-03-10T19:20:59Z</time>
+</trkpt>
+<trkpt lat="40.240301650" lon="-74.659623300">
+ <ele>15.700000</ele>
+<time>2007-03-10T19:21:00Z</time>
+</trkpt>
+<trkpt lat="40.240293300" lon="-74.659643300">
+ <ele>16.100000</ele>
+<time>2007-03-10T19:21:01Z</time>
+</trkpt>
+<trkpt lat="40.240276650" lon="-74.659695000">
+ <ele>16.100000</ele>
+<time>2007-03-10T19:21:03Z</time>
+</trkpt>
+<trkpt lat="40.240266650" lon="-74.659716600">
+ <ele>18.299999</ele>
+<time>2007-03-10T19:21:04Z</time>
+</trkpt>
+<trkpt lat="40.240261650" lon="-74.659735000">
+ <ele>18.900000</ele>
+<time>2007-03-10T19:21:05Z</time>
+</trkpt>
+<trkpt lat="40.240253300" lon="-74.659746600">
+ <ele>19.299999</ele>
+<time>2007-03-10T19:21:06Z</time>
+</trkpt>
+<trkpt lat="40.240233300" lon="-74.659781600">
+ <ele>19.299999</ele>
+<time>2007-03-10T19:21:08Z</time>
+</trkpt>
+<trkpt lat="40.240236650" lon="-74.659805000">
+ <ele>22.200001</ele>
+<time>2007-03-10T19:21:09Z</time>
+</trkpt>
+<trkpt lat="40.240236650" lon="-74.659821600">
+ <ele>22.500000</ele>
+<time>2007-03-10T19:21:10Z</time>
+</trkpt>
+<trkpt lat="40.240245000" lon="-74.659840000">
+ <ele>23.000000</ele>
+<time>2007-03-10T19:21:11Z</time>
+</trkpt>
+<trkpt lat="40.240256650" lon="-74.659853300">
+ <ele>23.000000</ele>
+<time>2007-03-10T19:21:12Z</time>
+</trkpt>
+<trkpt lat="40.240261650" lon="-74.659866600">
+ <ele>23.700001</ele>
+<time>2007-03-10T19:21:13Z</time>
+</trkpt>
+<trkpt lat="40.240270000" lon="-74.659890000">
+ <ele>24.400000</ele>
+<time>2007-03-10T19:21:14Z</time>
+</trkpt>
+<trkpt lat="40.240274950" lon="-74.659920000">
+ <ele>25.400000</ele>
+<time>2007-03-10T19:21:15Z</time>
+</trkpt>
+<trkpt lat="40.240268300" lon="-74.659993300">
+ <ele>25.400000</ele>
+<time>2007-03-10T19:21:17Z</time>
+</trkpt>
+<trkpt lat="40.240265000" lon="-74.660025000">
+ <ele>28.799999</ele>
+<time>2007-03-10T19:21:18Z</time>
+</trkpt>
+<trkpt lat="40.240251650" lon="-74.660063300">
+ <ele>30.299999</ele>
+<time>2007-03-10T19:21:19Z</time>
+</trkpt>
+<trkpt lat="40.240253300" lon="-74.660096600">
+ <ele>31.400000</ele>
+<time>2007-03-10T19:21:20Z</time>
+</trkpt>
+<trkpt lat="40.240255000" lon="-74.660118300">
+ <ele>31.200001</ele>
+<time>2007-03-10T19:21:21Z</time>
+</trkpt>
+<trkpt lat="40.240248300" lon="-74.660138300">
+ <ele>30.700001</ele>
+<time>2007-03-10T19:21:22Z</time>
+</trkpt>
+<trkpt lat="40.240236650" lon="-74.660161600">
+ <ele>30.700001</ele>
+<time>2007-03-10T19:21:23Z</time>
+</trkpt>
+<trkpt lat="40.240225000" lon="-74.660186600">
+ <ele>31.500000</ele>
+<time>2007-03-10T19:21:24Z</time>
+</trkpt>
+<trkpt lat="40.240225000" lon="-74.660210000">
+ <ele>31.900000</ele>
+<time>2007-03-10T19:21:25Z</time>
+</trkpt>
+<trkpt lat="40.240228300" lon="-74.660228300">
+ <ele>31.900000</ele>
+<time>2007-03-10T19:21:26Z</time>
+</trkpt>
+<trkpt lat="40.240236650" lon="-74.660268300">
+ <ele>31.900000</ele>
+<time>2007-03-10T19:21:28Z</time>
+</trkpt>
+<trkpt lat="40.240253300" lon="-74.660291600">
+ <ele>33.700001</ele>
+<time>2007-03-10T19:21:29Z</time>
+</trkpt>
+<trkpt lat="40.240260000" lon="-74.660316600">
+ <ele>34.299999</ele>
+<time>2007-03-10T19:21:30Z</time>
+</trkpt>
+<trkpt lat="40.240255000" lon="-74.660335000">
+ <ele>34.299999</ele>
+<time>2007-03-10T19:21:31Z</time>
+</trkpt>
+<trkpt lat="40.240258300" lon="-74.660360000">
+ <ele>35.400002</ele>
+<time>2007-03-10T19:21:32Z</time>
+</trkpt>
+<trkpt lat="40.240260000" lon="-74.660386600">
+ <ele>36.099998</ele>
+<time>2007-03-10T19:21:33Z</time>
+</trkpt>
+<trkpt lat="40.240253300" lon="-74.660416600">
+ <ele>36.000000</ele>
+<time>2007-03-10T19:21:34Z</time>
+</trkpt>
+<trkpt lat="40.240256650" lon="-74.660446600">
+ <ele>36.299999</ele>
+<time>2007-03-10T19:21:35Z</time>
+</trkpt>
+<trkpt lat="40.240261650" lon="-74.660476600">
+ <ele>36.299999</ele>
+<time>2007-03-10T19:21:36Z</time>
+</trkpt>
+<trkpt lat="40.240253300" lon="-74.660503300">
+ <ele>37.299999</ele>
+<time>2007-03-10T19:21:37Z</time>
+</trkpt>
+<trkpt lat="40.240260000" lon="-74.660516600">
+ <ele>36.700001</ele>
+<time>2007-03-10T19:21:38Z</time>
+</trkpt>
+<trkpt lat="40.240261650" lon="-74.660523300">
+ <ele>36.400002</ele>
+<time>2007-03-10T19:21:39Z</time>
+</trkpt>
+<trkpt lat="40.240271650" lon="-74.660535000">
+ <ele>37.299999</ele>
+<time>2007-03-10T19:21:40Z</time>
+</trkpt>
+<trkpt lat="40.240285000" lon="-74.660545000">
+ <ele>38.400002</ele>
+<time>2007-03-10T19:21:41Z</time>
+</trkpt>
+<trkpt lat="40.240286650" lon="-74.660558300">
+ <ele>40.099998</ele>
+<time>2007-03-10T19:21:42Z</time>
+</trkpt>
+<trkpt lat="40.240291650" lon="-74.660626600">
+ <ele>40.099998</ele>
+<time>2007-03-10T19:21:46Z</time>
+</trkpt>
+<trkpt lat="40.240296650" lon="-74.660640000">
+ <ele>44.700001</ele>
+<time>2007-03-10T19:21:47Z</time>
+</trkpt>
+<trkpt lat="40.240305000" lon="-74.660660000">
+ <ele>45.799999</ele>
+<time>2007-03-10T19:21:48Z</time>
+</trkpt>
+<trkpt lat="40.240321650" lon="-74.660671600">
+ <ele>45.500000</ele>
+<time>2007-03-10T19:21:49Z</time>
+</trkpt>
+<trkpt lat="40.240340000" lon="-74.660683300">
+ <ele>44.599998</ele>
+<time>2007-03-10T19:21:50Z</time>
+</trkpt>
+<trkpt lat="40.240355000" lon="-74.660701600">
+ <ele>44.400002</ele>
+<time>2007-03-10T19:21:51Z</time>
+</trkpt>
+<trkpt lat="40.240378300" lon="-74.660721600">
+ <ele>44.700001</ele>
+<time>2007-03-10T19:21:52Z</time>
+</trkpt>
+<trkpt lat="40.240396650" lon="-74.660731600">
+ <ele>44.700001</ele>
+<time>2007-03-10T19:21:53Z</time>
+</trkpt>
+<trkpt lat="40.240418300" lon="-74.660741600">
+ <ele>43.400002</ele>
+<time>2007-03-10T19:21:54Z</time>
+</trkpt>
+<trkpt lat="40.240438300" lon="-74.660748300">
+ <ele>42.799999</ele>
+<time>2007-03-10T19:21:55Z</time>
+</trkpt>
+<trkpt lat="40.240458300" lon="-74.660765000">
+ <ele>42.700001</ele>
+<time>2007-03-10T19:21:56Z</time>
+</trkpt>
+<trkpt lat="40.240508300" lon="-74.660785000">
+ <ele>42.700001</ele>
+<time>2007-03-10T19:21:58Z</time>
+</trkpt>
+<trkpt lat="40.240530000" lon="-74.660791600">
+ <ele>40.299999</ele>
+<time>2007-03-10T19:21:59Z</time>
+</trkpt>
+<trkpt lat="40.240548300" lon="-74.660794900">
+ <ele>40.000000</ele>
+<time>2007-03-10T19:22:00Z</time>
+</trkpt>
+<trkpt lat="40.240570000" lon="-74.660786600">
+ <ele>39.200001</ele>
+<time>2007-03-10T19:22:01Z</time>
+</trkpt>
+<trkpt lat="40.240605000" lon="-74.660771600">
+ <ele>39.200001</ele>
+<time>2007-03-10T19:22:03Z</time>
+</trkpt>
+<trkpt lat="40.240620000" lon="-74.660761600">
+ <ele>36.700001</ele>
+<time>2007-03-10T19:22:04Z</time>
+</trkpt>
+<trkpt lat="40.240631650" lon="-74.660756600">
+ <ele>36.200001</ele>
+<time>2007-03-10T19:22:05Z</time>
+</trkpt>
+<trkpt lat="40.240645000" lon="-74.660751600">
+ <ele>35.099998</ele>
+<time>2007-03-10T19:22:06Z</time>
+</trkpt>
+<trkpt lat="40.240690000" lon="-74.660735000">
+ <ele>35.099998</ele>
+<time>2007-03-10T19:22:09Z</time>
+</trkpt>
+<trkpt lat="40.240701650" lon="-74.660725000">
+ <ele>32.400002</ele>
+<time>2007-03-10T19:22:10Z</time>
+</trkpt>
+<trkpt lat="40.240715000" lon="-74.660713300">
+ <ele>31.799999</ele>
+<time>2007-03-10T19:22:11Z</time>
+</trkpt>
+<trkpt lat="40.240730000" lon="-74.660701600">
+ <ele>31.000000</ele>
+<time>2007-03-10T19:22:12Z</time>
+</trkpt>
+<trkpt lat="40.240744950" lon="-74.660683300">
+ <ele>31.000000</ele>
+<time>2007-03-10T19:22:14Z</time>
+</trkpt>
+<trkpt lat="40.240756650" lon="-74.660681600">
+ <ele>28.900000</ele>
+<time>2007-03-10T19:22:15Z</time>
+</trkpt>
+<trkpt lat="40.240768300" lon="-74.660680000">
+ <ele>28.000000</ele>
+<time>2007-03-10T19:22:16Z</time>
+</trkpt>
+<trkpt lat="40.240778300" lon="-74.660670000">
+ <ele>27.200001</ele>
+<time>2007-03-10T19:22:17Z</time>
+</trkpt>
+<trkpt lat="40.240806650" lon="-74.660648300">
+ <ele>27.200001</ele>
+<time>2007-03-10T19:22:20Z</time>
+</trkpt>
+<trkpt lat="40.240816650" lon="-74.660638300">
+ <ele>23.700001</ele>
+<time>2007-03-10T19:22:21Z</time>
+</trkpt>
+<trkpt lat="40.240825000" lon="-74.660623300">
+ <ele>23.100000</ele>
+<time>2007-03-10T19:22:22Z</time>
+</trkpt>
+<trkpt lat="40.240833300" lon="-74.660608300">
+ <ele>22.000000</ele>
+<time>2007-03-10T19:22:23Z</time>
+</trkpt>
+<trkpt lat="40.240851650" lon="-74.660606600">
+ <ele>21.100000</ele>
+<time>2007-03-10T19:22:24Z</time>
+</trkpt>
+<trkpt lat="40.240873300" lon="-74.660611600">
+ <ele>20.799999</ele>
+<time>2007-03-10T19:22:25Z</time>
+</trkpt>
+<trkpt lat="40.240896650" lon="-74.660613300">
+ <ele>20.400000</ele>
+<time>2007-03-10T19:22:26Z</time>
+</trkpt>
+<trkpt lat="40.240965000" lon="-74.660621600">
+ <ele>20.400000</ele>
+<time>2007-03-10T19:22:30Z</time>
+</trkpt>
+<trkpt lat="40.240973300" lon="-74.660615000">
+ <ele>19.900000</ele>
+<time>2007-03-10T19:22:31Z</time>
+</trkpt>
+<trkpt lat="40.240986650" lon="-74.660608300">
+ <ele>20.500000</ele>
+<time>2007-03-10T19:22:32Z</time>
+</trkpt>
+<trkpt lat="40.241001650" lon="-74.660601600">
+ <ele>20.600000</ele>
+<time>2007-03-10T19:22:33Z</time>
+</trkpt>
+<trkpt lat="40.241038300" lon="-74.660586600">
+ <ele>20.600000</ele>
+<time>2007-03-10T19:22:35Z</time>
+</trkpt>
+<trkpt lat="40.241058300" lon="-74.660576600">
+ <ele>20.299999</ele>
+<time>2007-03-10T19:22:36Z</time>
+</trkpt>
+<trkpt lat="40.241073300" lon="-74.660563300">
+ <ele>19.900000</ele>
+<time>2007-03-10T19:22:37Z</time>
+</trkpt>
+<trkpt lat="40.241100000" lon="-74.660526600">
+ <ele>19.900000</ele>
+<time>2007-03-10T19:22:40Z</time>
+</trkpt>
+<trkpt lat="40.241110000" lon="-74.660520000">
+ <ele>21.299999</ele>
+<time>2007-03-10T19:22:41Z</time>
+</trkpt>
+<trkpt lat="40.241121650" lon="-74.660516600">
+ <ele>21.600000</ele>
+<time>2007-03-10T19:22:42Z</time>
+</trkpt>
+<trkpt lat="40.241161650" lon="-74.660516600">
+ <ele>21.600000</ele>
+<time>2007-03-10T19:22:44Z</time>
+</trkpt>
+<trkpt lat="40.241185000" lon="-74.660518300">
+ <ele>21.200001</ele>
+<time>2007-03-10T19:22:45Z</time>
+</trkpt>
+<trkpt lat="40.241208300" lon="-74.660516600">
+ <ele>21.100000</ele>
+<time>2007-03-10T19:22:46Z</time>
+</trkpt>
+<trkpt lat="40.241230000" lon="-74.660513300">
+ <ele>21.100000</ele>
+<time>2007-03-10T19:22:47Z</time>
+</trkpt>
+<trkpt lat="40.241250000" lon="-74.660510000">
+ <ele>19.600000</ele>
+<time>2007-03-10T19:22:48Z</time>
+</trkpt>
+<trkpt lat="40.241276650" lon="-74.660516600">
+ <ele>19.799999</ele>
+<time>2007-03-10T19:22:49Z</time>
+</trkpt>
+<trkpt lat="40.241300000" lon="-74.660518300">
+ <ele>20.100000</ele>
+<time>2007-03-10T19:22:50Z</time>
+</trkpt>
+<trkpt lat="40.241331650" lon="-74.660500000">
+ <ele>20.100000</ele>
+<time>2007-03-10T19:22:52Z</time>
+</trkpt>
+<trkpt lat="40.241343300" lon="-74.660498300">
+ <ele>21.799999</ele>
+<time>2007-03-10T19:22:53Z</time>
+</trkpt>
+<trkpt lat="40.241350000" lon="-74.660505000">
+ <ele>22.400000</ele>
+<time>2007-03-10T19:22:54Z</time>
+</trkpt>
+<trkpt lat="40.241360000" lon="-74.660521600">
+ <ele>22.700001</ele>
+<time>2007-03-10T19:22:55Z</time>
+</trkpt>
+<trkpt lat="40.241373300" lon="-74.660546600">
+ <ele>22.700001</ele>
+<time>2007-03-10T19:22:56Z</time>
+</trkpt>
+<trkpt lat="40.241383300" lon="-74.660568300">
+ <ele>24.400000</ele>
+<time>2007-03-10T19:22:57Z</time>
+</trkpt>
+<trkpt lat="40.241381650" lon="-74.660580000">
+ <ele>24.400000</ele>
+<time>2007-03-10T19:22:58Z</time>
+</trkpt>
+<trkpt lat="40.241381650" lon="-74.660593300">
+ <ele>24.500000</ele>
+<time>2007-03-10T19:22:59Z</time>
+</trkpt>
+<trkpt lat="40.241385000" lon="-74.660601600">
+ <ele>23.900000</ele>
+<time>2007-03-10T19:23:00Z</time>
+</trkpt>
+<trkpt lat="40.241390000" lon="-74.660616600">
+ <ele>23.900000</ele>
+<time>2007-03-10T19:23:01Z</time>
+</trkpt>
+<trkpt lat="40.241386650" lon="-74.660645000">
+ <ele>25.600000</ele>
+<time>2007-03-10T19:23:02Z</time>
+</trkpt>
+<trkpt lat="40.241381650" lon="-74.660670000">
+ <ele>26.500000</ele>
+<time>2007-03-10T19:23:03Z</time>
+</trkpt>
+<trkpt lat="40.241390000" lon="-74.660686600">
+ <ele>26.900000</ele>
+<time>2007-03-10T19:23:04Z</time>
+</trkpt>
+<trkpt lat="40.241391650" lon="-74.660708300">
+ <ele>28.700001</ele>
+<time>2007-03-10T19:23:05Z</time>
+</trkpt>
+<trkpt lat="40.241388300" lon="-74.660745000">
+ <ele>28.700001</ele>
+<time>2007-03-10T19:23:07Z</time>
+</trkpt>
+<trkpt lat="40.241390000" lon="-74.660771600">
+ <ele>31.700001</ele>
+<time>2007-03-10T19:23:08Z</time>
+</trkpt>
+<trkpt lat="40.241403300" lon="-74.660794900">
+ <ele>32.400002</ele>
+<time>2007-03-10T19:23:09Z</time>
+</trkpt>
+<trkpt lat="40.241410000" lon="-74.660810000">
+ <ele>32.299999</ele>
+<time>2007-03-10T19:23:10Z</time>
+</trkpt>
+<trkpt lat="40.241418300" lon="-74.660880000">
+ <ele>32.299999</ele>
+<time>2007-03-10T19:23:13Z</time>
+</trkpt>
+<trkpt lat="40.241421650" lon="-74.660901600">
+ <ele>35.599998</ele>
+<time>2007-03-10T19:23:14Z</time>
+</trkpt>
+<trkpt lat="40.241426650" lon="-74.660925000">
+ <ele>36.700001</ele>
+<time>2007-03-10T19:23:15Z</time>
+</trkpt>
+<trkpt lat="40.241435000" lon="-74.660945000">
+ <ele>37.799999</ele>
+<time>2007-03-10T19:23:16Z</time>
+</trkpt>
+<trkpt lat="40.241456650" lon="-74.660970000">
+ <ele>37.799999</ele>
+<time>2007-03-10T19:23:18Z</time>
+</trkpt>
+<trkpt lat="40.241470000" lon="-74.660990000">
+ <ele>38.599998</ele>
+<time>2007-03-10T19:23:19Z</time>
+</trkpt>
+<trkpt lat="40.241491650" lon="-74.661006600">
+ <ele>37.799999</ele>
+<time>2007-03-10T19:23:20Z</time>
+</trkpt>
+<trkpt lat="40.241500000" lon="-74.661016600">
+ <ele>36.500000</ele>
+<time>2007-03-10T19:23:21Z</time>
+</trkpt>
+<trkpt lat="40.241520000" lon="-74.661058300">
+ <ele>36.500000</ele>
+<time>2007-03-10T19:23:23Z</time>
+</trkpt>
+<trkpt lat="40.241535000" lon="-74.661080000">
+ <ele>35.099998</ele>
+<time>2007-03-10T19:23:24Z</time>
+</trkpt>
+<trkpt lat="40.241549950" lon="-74.661101600">
+ <ele>34.799999</ele>
+<time>2007-03-10T19:23:25Z</time>
+</trkpt>
+<trkpt lat="40.241551650" lon="-74.661111600">
+ <ele>34.200001</ele>
+<time>2007-03-10T19:23:26Z</time>
+</trkpt>
+<trkpt lat="40.241556650" lon="-74.661135000">
+ <ele>34.200001</ele>
+<time>2007-03-10T19:23:28Z</time>
+</trkpt>
+<trkpt lat="40.241556650" lon="-74.661146600">
+ <ele>34.400002</ele>
+<time>2007-03-10T19:23:29Z</time>
+</trkpt>
+<trkpt lat="40.241561650" lon="-74.661156600">
+ <ele>33.900002</ele>
+<time>2007-03-10T19:23:30Z</time>
+</trkpt>
+<trkpt lat="40.241573300" lon="-74.661171600">
+ <ele>33.500000</ele>
+<time>2007-03-10T19:23:31Z</time>
+</trkpt>
+<trkpt lat="40.241598300" lon="-74.661213300">
+ <ele>33.500000</ele>
+<time>2007-03-10T19:23:34Z</time>
+</trkpt>
+<trkpt lat="40.241608300" lon="-74.661235000">
+ <ele>32.799999</ele>
+<time>2007-03-10T19:23:35Z</time>
+</trkpt>
+<trkpt lat="40.241618300" lon="-74.661263300">
+ <ele>33.900002</ele>
+<time>2007-03-10T19:23:36Z</time>
+</trkpt>
+<trkpt lat="40.241628300" lon="-74.661281600">
+ <ele>34.299999</ele>
+<time>2007-03-10T19:23:37Z</time>
+</trkpt>
+<trkpt lat="40.241646650" lon="-74.661318300">
+ <ele>34.299999</ele>
+<time>2007-03-10T19:23:39Z</time>
+</trkpt>
+<trkpt lat="40.241653300" lon="-74.661333300">
+ <ele>34.099998</ele>
+<time>2007-03-10T19:23:40Z</time>
+</trkpt>
+<trkpt lat="40.241663300" lon="-74.661353300">
+ <ele>34.200001</ele>
+<time>2007-03-10T19:23:41Z</time>
+</trkpt>
+<trkpt lat="40.241668300" lon="-74.661371600">
+ <ele>33.599998</ele>
+<time>2007-03-10T19:23:42Z</time>
+</trkpt>
+<trkpt lat="40.241703300" lon="-74.661436600">
+ <ele>33.599998</ele>
+<time>2007-03-10T19:23:46Z</time>
+</trkpt>
+<trkpt lat="40.241706650" lon="-74.661460000">
+ <ele>33.900002</ele>
+<time>2007-03-10T19:23:47Z</time>
+</trkpt>
+<trkpt lat="40.241715000" lon="-74.661478300">
+ <ele>33.599998</ele>
+<time>2007-03-10T19:23:48Z</time>
+</trkpt>
+<trkpt lat="40.241720000" lon="-74.661493300">
+ <ele>33.400002</ele>
+<time>2007-03-10T19:23:49Z</time>
+</trkpt>
+<trkpt lat="40.241726650" lon="-74.661508300">
+ <ele>33.400002</ele>
+<time>2007-03-10T19:23:50Z</time>
+</trkpt>
+<trkpt lat="40.241733300" lon="-74.661523300">
+ <ele>34.299999</ele>
+<time>2007-03-10T19:23:51Z</time>
+</trkpt>
+<trkpt lat="40.241741650" lon="-74.661541600">
+ <ele>34.799999</ele>
+<time>2007-03-10T19:23:52Z</time>
+</trkpt>
+<trkpt lat="40.241753300" lon="-74.661546600">
+ <ele>34.299999</ele>
+<time>2007-03-10T19:23:53Z</time>
+</trkpt>
+<trkpt lat="40.241768300" lon="-74.661551600">
+ <ele>33.900002</ele>
+<time>2007-03-10T19:23:54Z</time>
+</trkpt>
+<trkpt lat="40.241846650" lon="-74.661595000">
+ <ele>33.900002</ele>
+<time>2007-03-10T19:23:58Z</time>
+</trkpt>
+<trkpt lat="40.241863300" lon="-74.661611600">
+ <ele>33.200001</ele>
+<time>2007-03-10T19:23:59Z</time>
+</trkpt>
+<trkpt lat="40.241881650" lon="-74.661633300">
+ <ele>34.500000</ele>
+<time>2007-03-10T19:24:00Z</time>
+</trkpt>
+<trkpt lat="40.241888300" lon="-74.661656600">
+ <ele>34.799999</ele>
+<time>2007-03-10T19:24:01Z</time>
+</trkpt>
+<trkpt lat="40.241918300" lon="-74.661730000">
+ <ele>34.799999</ele>
+<time>2007-03-10T19:24:06Z</time>
+</trkpt>
+<trkpt lat="40.241918300" lon="-74.661748300">
+ <ele>35.500000</ele>
+<time>2007-03-10T19:24:07Z</time>
+</trkpt>
+<trkpt lat="40.241925000" lon="-74.661763300">
+ <ele>35.599998</ele>
+<time>2007-03-10T19:24:08Z</time>
+</trkpt>
+<trkpt lat="40.241930000" lon="-74.661778300">
+ <ele>36.500000</ele>
+<time>2007-03-10T19:24:09Z</time>
+</trkpt>
+<trkpt lat="40.241936650" lon="-74.661786600">
+ <ele>37.500000</ele>
+<time>2007-03-10T19:24:10Z</time>
+</trkpt>
+<trkpt lat="40.241963300" lon="-74.661813300">
+ <ele>37.500000</ele>
+<time>2007-03-10T19:24:13Z</time>
+</trkpt>
+<trkpt lat="40.241970000" lon="-74.661830000">
+ <ele>38.799999</ele>
+<time>2007-03-10T19:24:14Z</time>
+</trkpt>
+<trkpt lat="40.241976650" lon="-74.661850000">
+ <ele>39.200001</ele>
+<time>2007-03-10T19:24:15Z</time>
+</trkpt>
+<trkpt lat="40.242000000" lon="-74.661906600">
+ <ele>39.200001</ele>
+<time>2007-03-10T19:24:18Z</time>
+</trkpt>
+<trkpt lat="40.242005000" lon="-74.661921600">
+ <ele>39.400002</ele>
+<time>2007-03-10T19:24:19Z</time>
+</trkpt>
+<trkpt lat="40.242006650" lon="-74.661935000">
+ <ele>39.200001</ele>
+<time>2007-03-10T19:24:20Z</time>
+</trkpt>
+<trkpt lat="40.242008300" lon="-74.661950000">
+ <ele>39.500000</ele>
+<time>2007-03-10T19:24:21Z</time>
+</trkpt>
+<trkpt lat="40.242010000" lon="-74.661955000">
+ <ele>39.500000</ele>
+<time>2007-03-10T19:24:22Z</time>
+</trkpt>
+<trkpt lat="40.242019950" lon="-74.661966600">
+ <ele>39.599998</ele>
+<time>2007-03-10T19:24:23Z</time>
+</trkpt>
+<trkpt lat="40.242030000" lon="-74.661975000">
+ <ele>39.099998</ele>
+<time>2007-03-10T19:24:24Z</time>
+</trkpt>
+<trkpt lat="40.242038300" lon="-74.661988300">
+ <ele>39.200001</ele>
+<time>2007-03-10T19:24:25Z</time>
+</trkpt>
+<trkpt lat="40.242064950" lon="-74.662021600">
+ <ele>39.200001</ele>
+<time>2007-03-10T19:24:27Z</time>
+</trkpt>
+<trkpt lat="40.242076650" lon="-74.662038300">
+ <ele>39.200001</ele>
+<time>2007-03-10T19:24:28Z</time>
+</trkpt>
+<trkpt lat="40.242086650" lon="-74.662055000">
+ <ele>39.299999</ele>
+<time>2007-03-10T19:24:29Z</time>
+</trkpt>
+<trkpt lat="40.242098300" lon="-74.662066600">
+ <ele>39.299999</ele>
+<time>2007-03-10T19:24:30Z</time>
+</trkpt>
+<trkpt lat="40.242131650" lon="-74.662106600">
+ <ele>39.299999</ele>
+<time>2007-03-10T19:24:33Z</time>
+</trkpt>
+<trkpt lat="40.242143300" lon="-74.662118300">
+ <ele>41.099998</ele>
+<time>2007-03-10T19:24:34Z</time>
+</trkpt>
+<trkpt lat="40.242153300" lon="-74.662131600">
+ <ele>41.599998</ele>
+<time>2007-03-10T19:24:35Z</time>
+</trkpt>
+<trkpt lat="40.242163300" lon="-74.662146600">
+ <ele>41.599998</ele>
+<time>2007-03-10T19:24:36Z</time>
+</trkpt>
+<trkpt lat="40.242171650" lon="-74.662163300">
+ <ele>43.700001</ele>
+<time>2007-03-10T19:24:37Z</time>
+</trkpt>
+<trkpt lat="40.242183300" lon="-74.662176600">
+ <ele>43.900002</ele>
+<time>2007-03-10T19:24:38Z</time>
+</trkpt>
+<trkpt lat="40.242196650" lon="-74.662186600">
+ <ele>43.900002</ele>
+<time>2007-03-10T19:24:39Z</time>
+</trkpt>
+<trkpt lat="40.242211650" lon="-74.662193300">
+ <ele>42.700001</ele>
+<time>2007-03-10T19:24:40Z</time>
+</trkpt>
+<trkpt lat="40.242221650" lon="-74.662208300">
+ <ele>42.700001</ele>
+<time>2007-03-10T19:24:41Z</time>
+</trkpt>
+<trkpt lat="40.242233300" lon="-74.662218300">
+ <ele>40.900002</ele>
+<time>2007-03-10T19:24:42Z</time>
+</trkpt>
+<trkpt lat="40.242246650" lon="-74.662229900">
+ <ele>39.799999</ele>
+<time>2007-03-10T19:24:43Z</time>
+</trkpt>
+<trkpt lat="40.242260000" lon="-74.662246600">
+ <ele>39.500000</ele>
+<time>2007-03-10T19:24:44Z</time>
+</trkpt>
+<trkpt lat="40.242271650" lon="-74.662268300">
+ <ele>39.299999</ele>
+<time>2007-03-10T19:24:45Z</time>
+</trkpt>
+<trkpt lat="40.242310000" lon="-74.662303300">
+ <ele>39.299999</ele>
+<time>2007-03-10T19:24:48Z</time>
+</trkpt>
+<trkpt lat="40.242326650" lon="-74.662310000">
+ <ele>35.200001</ele>
+<time>2007-03-10T19:24:49Z</time>
+</trkpt>
+<trkpt lat="40.242336650" lon="-74.662313300">
+ <ele>34.900002</ele>
+<time>2007-03-10T19:24:50Z</time>
+</trkpt>
+<trkpt lat="40.242380000" lon="-74.662319900">
+ <ele>34.900002</ele>
+<time>2007-03-10T19:24:53Z</time>
+</trkpt>
+<trkpt lat="40.242390000" lon="-74.662311600">
+ <ele>32.500000</ele>
+<time>2007-03-10T19:24:54Z</time>
+</trkpt>
+<trkpt lat="40.242398300" lon="-74.662310000">
+ <ele>31.700001</ele>
+<time>2007-03-10T19:24:55Z</time>
+</trkpt>
+<trkpt lat="40.242405000" lon="-74.662310000">
+ <ele>31.700001</ele>
+<time>2007-03-10T19:24:56Z</time>
+</trkpt>
+<trkpt lat="40.242413300" lon="-74.662315000">
+ <ele>30.900000</ele>
+<time>2007-03-10T19:24:57Z</time>
+</trkpt>
+<trkpt lat="40.242418300" lon="-74.662313300">
+ <ele>29.799999</ele>
+<time>2007-03-10T19:24:58Z</time>
+</trkpt>
+<trkpt lat="40.242426650" lon="-74.662318300">
+ <ele>29.299999</ele>
+<time>2007-03-10T19:24:59Z</time>
+</trkpt>
+<trkpt lat="40.242431650" lon="-74.662335000">
+ <ele>28.600000</ele>
+<time>2007-03-10T19:25:00Z</time>
+</trkpt>
+<trkpt lat="40.242448300" lon="-74.662366600">
+ <ele>28.600000</ele>
+<time>2007-03-10T19:25:02Z</time>
+</trkpt>
+<trkpt lat="40.242456650" lon="-74.662370000">
+ <ele>25.100000</ele>
+<time>2007-03-10T19:25:03Z</time>
+</trkpt>
+<trkpt lat="40.242460000" lon="-74.662373300">
+ <ele>24.700001</ele>
+<time>2007-03-10T19:25:04Z</time>
+</trkpt>
+<trkpt lat="40.242460000" lon="-74.662375000">
+ <ele>24.500000</ele>
+<time>2007-03-10T19:25:05Z</time>
+</trkpt>
+<trkpt lat="40.242453300" lon="-74.662378300">
+ <ele>24.500000</ele>
+<time>2007-03-10T19:25:09Z</time>
+</trkpt>
+<trkpt lat="40.242468300" lon="-74.662391600">
+ <ele>26.900000</ele>
+<time>2007-03-10T19:25:10Z</time>
+</trkpt>
+<trkpt lat="40.242481650" lon="-74.662400000">
+ <ele>26.000000</ele>
+<time>2007-03-10T19:25:11Z</time>
+</trkpt>
+<trkpt lat="40.242495000" lon="-74.662411600">
+ <ele>26.000000</ele>
+<time>2007-03-10T19:25:12Z</time>
+</trkpt>
+<trkpt lat="40.242506650" lon="-74.662420000">
+ <ele>26.000000</ele>
+<time>2007-03-10T19:25:13Z</time>
+</trkpt>
+<trkpt lat="40.242515000" lon="-74.662428300">
+ <ele>26.600000</ele>
+<time>2007-03-10T19:25:14Z</time>
+</trkpt>
+<trkpt lat="40.242533300" lon="-74.662443300">
+ <ele>27.000000</ele>
+<time>2007-03-10T19:25:15Z</time>
+</trkpt>
+<trkpt lat="40.242605000" lon="-74.662521600">
+ <ele>27.000000</ele>
+<time>2007-03-10T19:25:19Z</time>
+</trkpt>
+<trkpt lat="40.242618300" lon="-74.662533300">
+ <ele>25.900000</ele>
+<time>2007-03-10T19:25:20Z</time>
+</trkpt>
+<trkpt lat="40.242633300" lon="-74.662546600">
+ <ele>26.200001</ele>
+<time>2007-03-10T19:25:21Z</time>
+</trkpt>
+<trkpt lat="40.242653300" lon="-74.662556600">
+ <ele>25.700001</ele>
+<time>2007-03-10T19:25:22Z</time>
+</trkpt>
+<trkpt lat="40.242741650" lon="-74.662595000">
+ <ele>25.700001</ele>
+<time>2007-03-10T19:25:26Z</time>
+</trkpt>
+<trkpt lat="40.242763300" lon="-74.662605000">
+ <ele>26.400000</ele>
+<time>2007-03-10T19:25:27Z</time>
+</trkpt>
+<trkpt lat="40.242788300" lon="-74.662613300">
+ <ele>26.799999</ele>
+<time>2007-03-10T19:25:28Z</time>
+</trkpt>
+<trkpt lat="40.242820000" lon="-74.662629900">
+ <ele>27.100000</ele>
+<time>2007-03-10T19:25:29Z</time>
+</trkpt>
+<trkpt lat="40.242841650" lon="-74.662648300">
+ <ele>27.000000</ele>
+<time>2007-03-10T19:25:30Z</time>
+</trkpt>
+<trkpt lat="40.242863300" lon="-74.662668300">
+ <ele>27.000000</ele>
+<time>2007-03-10T19:25:31Z</time>
+</trkpt>
+<trkpt lat="40.242885000" lon="-74.662681600">
+ <ele>26.799999</ele>
+<time>2007-03-10T19:25:32Z</time>
+</trkpt>
+<trkpt lat="40.242901650" lon="-74.662695000">
+ <ele>26.799999</ele>
+<time>2007-03-10T19:25:33Z</time>
+</trkpt>
+<trkpt lat="40.242918300" lon="-74.662708300">
+ <ele>27.200001</ele>
+<time>2007-03-10T19:25:34Z</time>
+</trkpt>
+<trkpt lat="40.242926650" lon="-74.662719900">
+ <ele>27.000000</ele>
+<time>2007-03-10T19:25:35Z</time>
+</trkpt>
+<trkpt lat="40.242948300" lon="-74.662820000">
+ <ele>27.000000</ele>
+<time>2007-03-10T19:25:41Z</time>
+</trkpt>
+<trkpt lat="40.242956650" lon="-74.662838300">
+ <ele>28.500000</ele>
+<time>2007-03-10T19:25:42Z</time>
+</trkpt>
+<trkpt lat="40.242959950" lon="-74.662848300">
+ <ele>28.200001</ele>
+<time>2007-03-10T19:25:43Z</time>
+</trkpt>
+<trkpt lat="40.242959950" lon="-74.662860000">
+ <ele>27.500000</ele>
+<time>2007-03-10T19:25:44Z</time>
+</trkpt>
+<trkpt lat="40.242966650" lon="-74.662868300">
+ <ele>27.500000</ele>
+<time>2007-03-10T19:25:47Z</time>
+</trkpt>
+<trkpt lat="40.242956650" lon="-74.662861600">
+ <ele>26.200001</ele>
+<time>2007-03-10T19:25:48Z</time>
+</trkpt>
+<trkpt lat="40.242951650" lon="-74.662861600">
+ <ele>26.200001</ele>
+<time>2007-03-10T19:25:49Z</time>
+</trkpt>
+<trkpt lat="40.242958300" lon="-74.662883300">
+ <ele>28.100000</ele>
+<time>2007-03-10T19:25:50Z</time>
+</trkpt>
+<trkpt lat="40.243018300" lon="-74.662926600">
+ <ele>28.100000</ele>
+<time>2007-03-10T19:25:54Z</time>
+</trkpt>
+<trkpt lat="40.243040000" lon="-74.662936600">
+ <ele>28.100000</ele>
+<time>2007-03-10T19:25:55Z</time>
+</trkpt>
+<trkpt lat="40.243055000" lon="-74.662940000">
+ <ele>29.299999</ele>
+<time>2007-03-10T19:25:56Z</time>
+</trkpt>
+<trkpt lat="40.243060000" lon="-74.662938300">
+ <ele>28.900000</ele>
+<time>2007-03-10T19:25:57Z</time>
+</trkpt>
+<trkpt lat="40.243090000" lon="-74.662951600">
+ <ele>28.900000</ele>
+<time>2007-03-10T19:25:59Z</time>
+</trkpt>
+<trkpt lat="40.243106650" lon="-74.662966600">
+ <ele>28.400000</ele>
+<time>2007-03-10T19:26:00Z</time>
+</trkpt>
+<trkpt lat="40.243123300" lon="-74.662985000">
+ <ele>28.600000</ele>
+<time>2007-03-10T19:26:01Z</time>
+</trkpt>
+<trkpt lat="40.243136650" lon="-74.663001600">
+ <ele>28.600000</ele>
+<time>2007-03-10T19:26:02Z</time>
+</trkpt>
+<trkpt lat="40.243168300" lon="-74.663038300">
+ <ele>28.600000</ele>
+<time>2007-03-10T19:26:04Z</time>
+</trkpt>
+<trkpt lat="40.243184950" lon="-74.663063300">
+ <ele>31.100000</ele>
+<time>2007-03-10T19:26:05Z</time>
+</trkpt>
+<trkpt lat="40.243200000" lon="-74.663090000">
+ <ele>32.000000</ele>
+<time>2007-03-10T19:26:06Z</time>
+</trkpt>
+<trkpt lat="40.243205000" lon="-74.663110000">
+ <ele>32.200001</ele>
+<time>2007-03-10T19:26:07Z</time>
+</trkpt>
+<trkpt lat="40.243218300" lon="-74.663141600">
+ <ele>32.200001</ele>
+<time>2007-03-10T19:26:09Z</time>
+</trkpt>
+<trkpt lat="40.243218300" lon="-74.663161600">
+ <ele>31.600000</ele>
+<time>2007-03-10T19:26:10Z</time>
+</trkpt>
+<trkpt lat="40.243221650" lon="-74.663186600">
+ <ele>32.000000</ele>
+<time>2007-03-10T19:26:11Z</time>
+</trkpt>
+<trkpt lat="40.243228300" lon="-74.663206600">
+ <ele>32.000000</ele>
+<time>2007-03-10T19:26:12Z</time>
+</trkpt>
+<trkpt lat="40.243251650" lon="-74.663273300">
+ <ele>32.000000</ele>
+<time>2007-03-10T19:26:15Z</time>
+</trkpt>
+<trkpt lat="40.243263300" lon="-74.663290000">
+ <ele>30.400000</ele>
+<time>2007-03-10T19:26:16Z</time>
+</trkpt>
+<trkpt lat="40.243275000" lon="-74.663311600">
+ <ele>29.799999</ele>
+<time>2007-03-10T19:26:17Z</time>
+</trkpt>
+<trkpt lat="40.243285000" lon="-74.663331600">
+ <ele>28.900000</ele>
+<time>2007-03-10T19:26:18Z</time>
+</trkpt>
+<trkpt lat="40.243291650" lon="-74.663348300">
+ <ele>28.400000</ele>
+<time>2007-03-10T19:26:19Z</time>
+</trkpt>
+<trkpt lat="40.243300000" lon="-74.663363300">
+ <ele>28.200001</ele>
+<time>2007-03-10T19:26:20Z</time>
+</trkpt>
+<trkpt lat="40.243300000" lon="-74.663376600">
+ <ele>27.200001</ele>
+<time>2007-03-10T19:26:21Z</time>
+</trkpt>
+<trkpt lat="40.243278300" lon="-74.663428300">
+ <ele>27.200001</ele>
+<time>2007-03-10T19:26:25Z</time>
+</trkpt>
+<trkpt lat="40.243278300" lon="-74.663438300">
+ <ele>27.200001</ele>
+<time>2007-03-10T19:26:26Z</time>
+</trkpt>
+<trkpt lat="40.243275000" lon="-74.663456600">
+ <ele>25.900000</ele>
+<time>2007-03-10T19:26:27Z</time>
+</trkpt>
+<trkpt lat="40.243276650" lon="-74.663471600">
+ <ele>25.500000</ele>
+<time>2007-03-10T19:26:28Z</time>
+</trkpt>
+<trkpt lat="40.243275000" lon="-74.663480000">
+ <ele>24.700001</ele>
+<time>2007-03-10T19:26:29Z</time>
+</trkpt>
+<trkpt lat="40.243275000" lon="-74.663493300">
+ <ele>24.799999</ele>
+<time>2007-03-10T19:26:30Z</time>
+</trkpt>
+<trkpt lat="40.243268300" lon="-74.663510000">
+ <ele>24.600000</ele>
+<time>2007-03-10T19:26:31Z</time>
+</trkpt>
+<trkpt lat="40.243263300" lon="-74.663521600">
+ <ele>24.600000</ele>
+<time>2007-03-10T19:26:32Z</time>
+</trkpt>
+<trkpt lat="40.243235000" lon="-74.663555000">
+ <ele>24.600000</ele>
+<time>2007-03-10T19:26:35Z</time>
+</trkpt>
+<trkpt lat="40.243226650" lon="-74.663569900">
+ <ele>21.600000</ele>
+<time>2007-03-10T19:26:36Z</time>
+</trkpt>
+<trkpt lat="40.243218300" lon="-74.663578300">
+ <ele>20.799999</ele>
+<time>2007-03-10T19:26:37Z</time>
+</trkpt>
+<trkpt lat="40.243203300" lon="-74.663586600">
+ <ele>20.400000</ele>
+<time>2007-03-10T19:26:38Z</time>
+</trkpt>
+<trkpt lat="40.243193300" lon="-74.663596600">
+ <ele>20.200001</ele>
+<time>2007-03-10T19:26:39Z</time>
+</trkpt>
+<trkpt lat="40.243190000" lon="-74.663613300">
+ <ele>19.500000</ele>
+<time>2007-03-10T19:26:40Z</time>
+</trkpt>
+<trkpt lat="40.243186650" lon="-74.663630000">
+ <ele>18.500000</ele>
+<time>2007-03-10T19:26:41Z</time>
+</trkpt>
+<trkpt lat="40.243178300" lon="-74.663646600">
+ <ele>17.700001</ele>
+<time>2007-03-10T19:26:42Z</time>
+</trkpt>
+<trkpt lat="40.243193300" lon="-74.663671600">
+ <ele>17.700001</ele>
+<time>2007-03-10T19:26:46Z</time>
+</trkpt>
+<trkpt lat="40.243195000" lon="-74.663681600">
+ <ele>15.700000</ele>
+<time>2007-03-10T19:26:47Z</time>
+</trkpt>
+<trkpt lat="40.243195000" lon="-74.663698300">
+ <ele>16.299999</ele>
+<time>2007-03-10T19:26:48Z</time>
+</trkpt>
+<trkpt lat="40.243191650" lon="-74.663710000">
+ <ele>16.799999</ele>
+<time>2007-03-10T19:26:49Z</time>
+</trkpt>
+<trkpt lat="40.243184950" lon="-74.663718300">
+ <ele>16.900000</ele>
+<time>2007-03-10T19:26:50Z</time>
+</trkpt>
+<trkpt lat="40.243178300" lon="-74.663733300">
+ <ele>16.900000</ele>
+<time>2007-03-10T19:26:51Z</time>
+</trkpt>
+<trkpt lat="40.243175000" lon="-74.663751600">
+ <ele>17.100000</ele>
+<time>2007-03-10T19:26:52Z</time>
+</trkpt>
+<trkpt lat="40.243175000" lon="-74.663770000">
+ <ele>18.100000</ele>
+<time>2007-03-10T19:26:53Z</time>
+</trkpt>
+<trkpt lat="40.243173300" lon="-74.663785000">
+ <ele>18.700001</ele>
+<time>2007-03-10T19:26:54Z</time>
+</trkpt>
+<trkpt lat="40.243145000" lon="-74.663875000">
+ <ele>18.700001</ele>
+<time>2007-03-10T19:26:59Z</time>
+</trkpt>
+<trkpt lat="40.243128300" lon="-74.663896600">
+ <ele>19.600000</ele>
+<time>2007-03-10T19:27:00Z</time>
+</trkpt>
+<trkpt lat="40.243121650" lon="-74.663923300">
+ <ele>19.400000</ele>
+<time>2007-03-10T19:27:01Z</time>
+</trkpt>
+<trkpt lat="40.243090000" lon="-74.664010000">
+ <ele>19.400000</ele>
+<time>2007-03-10T19:27:07Z</time>
+</trkpt>
+<trkpt lat="40.243088300" lon="-74.664018300">
+ <ele>19.700001</ele>
+<time>2007-03-10T19:27:08Z</time>
+</trkpt>
+<trkpt lat="40.243090000" lon="-74.664031600">
+ <ele>20.100000</ele>
+<time>2007-03-10T19:27:09Z</time>
+</trkpt>
+<trkpt lat="40.243086650" lon="-74.664040000">
+ <ele>20.200001</ele>
+<time>2007-03-10T19:27:10Z</time>
+</trkpt>
+<trkpt lat="40.243061650" lon="-74.664038300">
+ <ele>20.200001</ele>
+<time>2007-03-10T19:27:12Z</time>
+</trkpt>
+<trkpt lat="40.243046650" lon="-74.664031600">
+ <ele>20.100000</ele>
+<time>2007-03-10T19:27:13Z</time>
+</trkpt>
+<trkpt lat="40.243038300" lon="-74.664019900">
+ <ele>18.700001</ele>
+<time>2007-03-10T19:27:14Z</time>
+</trkpt>
+<trkpt lat="40.243018300" lon="-74.664008300">
+ <ele>18.799999</ele>
+<time>2007-03-10T19:27:15Z</time>
+</trkpt>
+<trkpt lat="40.242976650" lon="-74.663978300">
+ <ele>18.799999</ele>
+<time>2007-03-10T19:27:19Z</time>
+</trkpt>
+<trkpt lat="40.242968300" lon="-74.663968300">
+ <ele>22.600000</ele>
+<time>2007-03-10T19:27:20Z</time>
+</trkpt>
+<trkpt lat="40.242955000" lon="-74.663955000">
+ <ele>22.900000</ele>
+<time>2007-03-10T19:27:21Z</time>
+</trkpt>
+<trkpt lat="40.242941650" lon="-74.663938300">
+ <ele>23.799999</ele>
+<time>2007-03-10T19:27:22Z</time>
+</trkpt>
+<trkpt lat="40.242861650" lon="-74.663878300">
+ <ele>23.799999</ele>
+<time>2007-03-10T19:27:26Z</time>
+</trkpt>
+<trkpt lat="40.242846650" lon="-74.663870000">
+ <ele>28.799999</ele>
+<time>2007-03-10T19:27:27Z</time>
+</trkpt>
+<trkpt lat="40.242840000" lon="-74.663856600">
+ <ele>29.100000</ele>
+<time>2007-03-10T19:27:28Z</time>
+</trkpt>
+<trkpt lat="40.242836650" lon="-74.663851600">
+ <ele>30.200001</ele>
+<time>2007-03-10T19:27:29Z</time>
+</trkpt>
+<trkpt lat="40.242823300" lon="-74.663843300">
+ <ele>31.200001</ele>
+<time>2007-03-10T19:27:30Z</time>
+</trkpt>
+<trkpt lat="40.242810000" lon="-74.663833300">
+ <ele>32.200001</ele>
+<time>2007-03-10T19:27:31Z</time>
+</trkpt>
+<trkpt lat="40.242801650" lon="-74.663826600">
+ <ele>33.400002</ele>
+<time>2007-03-10T19:27:32Z</time>
+</trkpt>
+<trkpt lat="40.242793300" lon="-74.663811600">
+ <ele>33.400002</ele>
+<time>2007-03-10T19:27:34Z</time>
+</trkpt>
+<trkpt lat="40.242785000" lon="-74.663808300">
+ <ele>34.599998</ele>
+<time>2007-03-10T19:27:35Z</time>
+</trkpt>
+<trkpt lat="40.242785000" lon="-74.663810000">
+ <ele>35.200001</ele>
+<time>2007-03-10T19:27:36Z</time>
+</trkpt>
+<trkpt lat="40.242785000" lon="-74.663808300">
+ <ele>35.799999</ele>
+<time>2007-03-10T19:27:37Z</time>
+</trkpt>
+<trkpt lat="40.242759950" lon="-74.663786600">
+ <ele>35.799999</ele>
+<time>2007-03-10T19:27:40Z</time>
+</trkpt>
+<trkpt lat="40.242755000" lon="-74.663778300">
+ <ele>34.799999</ele>
+<time>2007-03-10T19:27:41Z</time>
+</trkpt>
+<trkpt lat="40.242751650" lon="-74.663775000">
+ <ele>34.900002</ele>
+<time>2007-03-10T19:27:42Z</time>
+</trkpt>
+<trkpt lat="40.242733300" lon="-74.663761600">
+ <ele>34.900002</ele>
+<time>2007-03-10T19:27:44Z</time>
+</trkpt>
+<trkpt lat="40.242728300" lon="-74.663756600">
+ <ele>34.200001</ele>
+<time>2007-03-10T19:27:45Z</time>
+</trkpt>
+<trkpt lat="40.242714950" lon="-74.663751600">
+ <ele>34.500000</ele>
+<time>2007-03-10T19:27:46Z</time>
+</trkpt>
+<trkpt lat="40.242703300" lon="-74.663746600">
+ <ele>34.500000</ele>
+<time>2007-03-10T19:27:47Z</time>
+</trkpt>
+<trkpt lat="40.242686650" lon="-74.663733300">
+ <ele>35.200001</ele>
+<time>2007-03-10T19:27:48Z</time>
+</trkpt>
+<trkpt lat="40.242669950" lon="-74.663721600">
+ <ele>35.400002</ele>
+<time>2007-03-10T19:27:49Z</time>
+</trkpt>
+<trkpt lat="40.242653300" lon="-74.663711600">
+ <ele>35.500000</ele>
+<time>2007-03-10T19:27:50Z</time>
+</trkpt>
+<trkpt lat="40.242576650" lon="-74.663656600">
+ <ele>35.500000</ele>
+<time>2007-03-10T19:27:54Z</time>
+</trkpt>
+<trkpt lat="40.242560000" lon="-74.663648300">
+ <ele>33.200001</ele>
+<time>2007-03-10T19:27:55Z</time>
+</trkpt>
+<trkpt lat="40.242550000" lon="-74.663643300">
+ <ele>33.400002</ele>
+<time>2007-03-10T19:27:56Z</time>
+</trkpt>
+<trkpt lat="40.242540000" lon="-74.663636600">
+ <ele>33.400002</ele>
+<time>2007-03-10T19:27:57Z</time>
+</trkpt>
+<trkpt lat="40.242533300" lon="-74.663633300">
+ <ele>34.799999</ele>
+<time>2007-03-10T19:27:58Z</time>
+</trkpt>
+<trkpt lat="40.242525000" lon="-74.663626600">
+ <ele>35.000000</ele>
+<time>2007-03-10T19:27:59Z</time>
+</trkpt>
+<trkpt lat="40.242520000" lon="-74.663618300">
+ <ele>35.299999</ele>
+<time>2007-03-10T19:28:00Z</time>
+</trkpt>
+<trkpt lat="40.242508300" lon="-74.663601600">
+ <ele>35.299999</ele>
+<time>2007-03-10T19:28:03Z</time>
+</trkpt>
+<trkpt lat="40.242501650" lon="-74.663591600">
+ <ele>37.700001</ele>
+<time>2007-03-10T19:28:04Z</time>
+</trkpt>
+<trkpt lat="40.242489950" lon="-74.663581600">
+ <ele>37.900002</ele>
+<time>2007-03-10T19:28:05Z</time>
+</trkpt>
+<trkpt lat="40.242463300" lon="-74.663563300">
+ <ele>37.900002</ele>
+<time>2007-03-10T19:28:07Z</time>
+</trkpt>
+<trkpt lat="40.242443300" lon="-74.663548300">
+ <ele>38.400002</ele>
+<time>2007-03-10T19:28:08Z</time>
+</trkpt>
+<trkpt lat="40.242431650" lon="-74.663533300">
+ <ele>38.299999</ele>
+<time>2007-03-10T19:28:09Z</time>
+</trkpt>
+<trkpt lat="40.242423300" lon="-74.663518300">
+ <ele>38.000000</ele>
+<time>2007-03-10T19:28:10Z</time>
+</trkpt>
+<trkpt lat="40.242351650" lon="-74.663490000">
+ <ele>35.500000</ele>
+<time>2007-03-10T19:28:14Z</time>
+</trkpt>
+<trkpt lat="40.242328300" lon="-74.663488300">
+ <ele>35.099998</ele>
+<time>2007-03-10T19:28:15Z</time>
+</trkpt>
+<trkpt lat="40.242305000" lon="-74.663481600">
+ <ele>34.599998</ele>
+<time>2007-03-10T19:28:16Z</time>
+</trkpt>
+<trkpt lat="40.242283300" lon="-74.663476600">
+ <ele>34.599998</ele>
+<time>2007-03-10T19:28:17Z</time>
+</trkpt>
+<trkpt lat="40.242255000" lon="-74.663465000">
+ <ele>33.799999</ele>
+<time>2007-03-10T19:28:18Z</time>
+</trkpt>
+<trkpt lat="40.242238300" lon="-74.663463300">
+ <ele>34.000000</ele>
+<time>2007-03-10T19:28:19Z</time>
+</trkpt>
+<trkpt lat="40.242223300" lon="-74.663465000">
+ <ele>34.799999</ele>
+<time>2007-03-10T19:28:20Z</time>
+</trkpt>
+<trkpt lat="40.242154950" lon="-74.663460000">
+ <ele>34.799999</ele>
+<time>2007-03-10T19:28:24Z</time>
+</trkpt>
+<trkpt lat="40.242143300" lon="-74.663458300">
+ <ele>36.500000</ele>
+<time>2007-03-10T19:28:25Z</time>
+</trkpt>
+<trkpt lat="40.242130000" lon="-74.663455000">
+ <ele>37.799999</ele>
+<time>2007-03-10T19:28:26Z</time>
+</trkpt>
+<trkpt lat="40.242090000" lon="-74.663445000">
+ <ele>37.799999</ele>
+<time>2007-03-10T19:28:29Z</time>
+</trkpt>
+<trkpt lat="40.242073300" lon="-74.663445000">
+ <ele>41.799999</ele>
+<time>2007-03-10T19:28:30Z</time>
+</trkpt>
+<trkpt lat="40.242053300" lon="-74.663443300">
+ <ele>41.700001</ele>
+<time>2007-03-10T19:28:31Z</time>
+</trkpt>
+<trkpt lat="40.242000000" lon="-74.663458300">
+ <ele>41.700001</ele>
+<time>2007-03-10T19:28:34Z</time>
+</trkpt>
+<trkpt lat="40.241988300" lon="-74.663471600">
+ <ele>36.799999</ele>
+<time>2007-03-10T19:28:35Z</time>
+</trkpt>
+<trkpt lat="40.241974950" lon="-74.663490000">
+ <ele>34.700001</ele>
+<time>2007-03-10T19:28:36Z</time>
+</trkpt>
+<trkpt lat="40.241920000" lon="-74.663581600">
+ <ele>34.700001</ele>
+<time>2007-03-10T19:28:40Z</time>
+</trkpt>
+<trkpt lat="40.241901650" lon="-74.663603300">
+ <ele>26.000000</ele>
+<time>2007-03-10T19:28:41Z</time>
+</trkpt>
+<trkpt lat="40.241886650" lon="-74.663628300">
+ <ele>24.299999</ele>
+<time>2007-03-10T19:28:42Z</time>
+</trkpt>
+<trkpt lat="40.241881650" lon="-74.663653300">
+ <ele>23.700001</ele>
+<time>2007-03-10T19:28:43Z</time>
+</trkpt>
+<trkpt lat="40.241870000" lon="-74.663675000">
+ <ele>21.900000</ele>
+<time>2007-03-10T19:28:44Z</time>
+</trkpt>
+<trkpt lat="40.241841650" lon="-74.663760000">
+ <ele>21.900000</ele>
+<time>2007-03-10T19:28:48Z</time>
+</trkpt>
+<trkpt lat="40.241836650" lon="-74.663781600">
+ <ele>15.800000</ele>
+<time>2007-03-10T19:28:49Z</time>
+</trkpt>
+<trkpt lat="40.241828300" lon="-74.663798300">
+ <ele>14.100000</ele>
+<time>2007-03-10T19:28:50Z</time>
+</trkpt>
+<trkpt lat="40.241786650" lon="-74.663860000">
+ <ele>14.100000</ele>
+<time>2007-03-10T19:28:54Z</time>
+</trkpt>
+<trkpt lat="40.241768300" lon="-74.663875000">
+ <ele>5.000000</ele>
+<time>2007-03-10T19:28:55Z</time>
+</trkpt>
+<trkpt lat="40.241755000" lon="-74.663890000">
+ <ele>3.800000</ele>
+<time>2007-03-10T19:28:56Z</time>
+</trkpt>
+<trkpt lat="40.241743300" lon="-74.663910000">
+ <ele>2.900000</ele>
+<time>2007-03-10T19:28:57Z</time>
+</trkpt>
+<trkpt lat="40.241688300" lon="-74.664005000">
+ <ele>2.900000</ele>
+<time>2007-03-10T19:29:02Z</time>
+</trkpt>
+<trkpt lat="40.241683300" lon="-74.664018300">
+ <ele>-0.700000</ele>
+<time>2007-03-10T19:29:03Z</time>
+</trkpt>
+<trkpt lat="40.241675000" lon="-74.664033300">
+ <ele>-0.400000</ele>
+<time>2007-03-10T19:29:04Z</time>
+</trkpt>
+<trkpt lat="40.241663300" lon="-74.664050000">
+ <ele>0.800000</ele>
+<time>2007-03-10T19:29:05Z</time>
+</trkpt>
+<trkpt lat="40.241628300" lon="-74.664066600">
+ <ele>0.800000</ele>
+<time>2007-03-10T19:29:08Z</time>
+</trkpt>
+<trkpt lat="40.241613300" lon="-74.664068300">
+ <ele>0.600000</ele>
+<time>2007-03-10T19:29:09Z</time>
+</trkpt>
+<trkpt lat="40.241598300" lon="-74.664070000">
+ <ele>0.400000</ele>
+<time>2007-03-10T19:29:10Z</time>
+</trkpt>
+<trkpt lat="40.241581650" lon="-74.664066600">
+ <ele>-0.300000</ele>
+<time>2007-03-10T19:29:11Z</time>
+</trkpt>
+<trkpt lat="40.241553300" lon="-74.664063300">
+ <ele>-0.300000</ele>
+<time>2007-03-10T19:29:14Z</time>
+</trkpt>
+<trkpt lat="40.241541650" lon="-74.664063300">
+ <ele>-1.800000</ele>
+<time>2007-03-10T19:29:15Z</time>
+</trkpt>
+<trkpt lat="40.241528300" lon="-74.664066600">
+ <ele>-2.700000</ele>
+<time>2007-03-10T19:29:16Z</time>
+</trkpt>
+<trkpt lat="40.241490000" lon="-74.664064900">
+ <ele>-2.700000</ele>
+<time>2007-03-10T19:29:18Z</time>
+</trkpt>
+<trkpt lat="40.241476650" lon="-74.664064900">
+ <ele>-4.500000</ele>
+<time>2007-03-10T19:29:19Z</time>
+</trkpt>
+<trkpt lat="40.241466650" lon="-74.664070000">
+ <ele>-4.900000</ele>
+<time>2007-03-10T19:29:20Z</time>
+</trkpt>
+<trkpt lat="40.241463300" lon="-74.664081600">
+ <ele>-4.900000</ele>
+<time>2007-03-10T19:29:21Z</time>
+</trkpt>
+<trkpt lat="40.241455000" lon="-74.664086600">
+ <ele>-4.700000</ele>
+<time>2007-03-10T19:29:22Z</time>
+</trkpt>
+<trkpt lat="40.241450000" lon="-74.664088300">
+ <ele>-4.600000</ele>
+<time>2007-03-10T19:29:23Z</time>
+</trkpt>
+<trkpt lat="40.241446650" lon="-74.664098300">
+ <ele>-3.800000</ele>
+<time>2007-03-10T19:29:24Z</time>
+</trkpt>
+<trkpt lat="40.241438300" lon="-74.664108300">
+ <ele>-4.300000</ele>
+<time>2007-03-10T19:29:25Z</time>
+</trkpt>
+<trkpt lat="40.241408300" lon="-74.664140000">
+ <ele>-4.300000</ele>
+<time>2007-03-10T19:29:27Z</time>
+</trkpt>
+<trkpt lat="40.241395000" lon="-74.664168300">
+ <ele>-5.100000</ele>
+<time>2007-03-10T19:29:28Z</time>
+</trkpt>
+<trkpt lat="40.241385000" lon="-74.664198300">
+ <ele>-4.200000</ele>
+<time>2007-03-10T19:29:29Z</time>
+</trkpt>
+<trkpt lat="40.241368300" lon="-74.664238300">
+ <ele>-2.000000</ele>
+<time>2007-03-10T19:29:30Z</time>
+</trkpt>
+<trkpt lat="40.241281650" lon="-74.664361600">
+ <ele>-2.000000</ele>
+<time>2007-03-10T19:29:34Z</time>
+</trkpt>
+<trkpt lat="40.241258300" lon="-74.664373300">
+ <ele>-0.500000</ele>
+<time>2007-03-10T19:29:35Z</time>
+</trkpt>
+<trkpt lat="40.241243300" lon="-74.664380000">
+ <ele>-0.200000</ele>
+<time>2007-03-10T19:29:36Z</time>
+</trkpt>
+<trkpt lat="40.241235000" lon="-74.664383300">
+ <ele>-0.800000</ele>
+<time>2007-03-10T19:29:37Z</time>
+</trkpt>
+<trkpt lat="40.241221650" lon="-74.664406600">
+ <ele>-0.800000</ele>
+<time>2007-03-10T19:29:40Z</time>
+</trkpt>
+<trkpt lat="40.241223300" lon="-74.664418300">
+ <ele>-2.100000</ele>
+<time>2007-03-10T19:29:41Z</time>
+</trkpt>
+<trkpt lat="40.241223300" lon="-74.664423300">
+ <ele>-2.200000</ele>
+<time>2007-03-10T19:29:42Z</time>
+</trkpt>
+<trkpt lat="40.241223300" lon="-74.664431600">
+ <ele>-1.600000</ele>
+<time>2007-03-10T19:29:43Z</time>
+</trkpt>
+<trkpt lat="40.241223300" lon="-74.664455000">
+ <ele>-1.600000</ele>
+<time>2007-03-10T19:29:45Z</time>
+</trkpt>
+<trkpt lat="40.241220000" lon="-74.664473300">
+ <ele>-0.900000</ele>
+<time>2007-03-10T19:29:46Z</time>
+</trkpt>
+<trkpt lat="40.241216650" lon="-74.664488300">
+ <ele>-0.700000</ele>
+<time>2007-03-10T19:29:47Z</time>
+</trkpt>
+<trkpt lat="40.241185000" lon="-74.664505000">
+ <ele>-0.700000</ele>
+<time>2007-03-10T19:29:50Z</time>
+</trkpt>
+<trkpt lat="40.241181650" lon="-74.664523300">
+ <ele>1.200000</ele>
+<time>2007-03-10T19:29:51Z</time>
+</trkpt>
+<trkpt lat="40.241173300" lon="-74.664543300">
+ <ele>2.400000</ele>
+<time>2007-03-10T19:29:52Z</time>
+</trkpt>
+<trkpt lat="40.241153300" lon="-74.664550000">
+ <ele>1.800000</ele>
+<time>2007-03-10T19:29:53Z</time>
+</trkpt>
+<trkpt lat="40.241118300" lon="-74.664566600">
+ <ele>1.800000</ele>
+<time>2007-03-10T19:29:55Z</time>
+</trkpt>
+<trkpt lat="40.241110000" lon="-74.664580000">
+ <ele>-0.800000</ele>
+<time>2007-03-10T19:29:56Z</time>
+</trkpt>
+<trkpt lat="40.241103300" lon="-74.664590000">
+ <ele>-2.100000</ele>
+<time>2007-03-10T19:29:57Z</time>
+</trkpt>
+<trkpt lat="40.241088300" lon="-74.664644900">
+ <ele>-2.100000</ele>
+<time>2007-03-10T19:30:01Z</time>
+</trkpt>
+<trkpt lat="40.241081650" lon="-74.664666600">
+ <ele>-5.400000</ele>
+<time>2007-03-10T19:30:02Z</time>
+</trkpt>
+<trkpt lat="40.241076650" lon="-74.664686600">
+ <ele>-5.500000</ele>
+<time>2007-03-10T19:30:03Z</time>
+</trkpt>
+<trkpt lat="40.241068300" lon="-74.664705000">
+ <ele>-5.500000</ele>
+<time>2007-03-10T19:30:04Z</time>
+</trkpt>
+<trkpt lat="40.241061650" lon="-74.664723300">
+ <ele>-5.500000</ele>
+<time>2007-03-10T19:30:05Z</time>
+</trkpt>
+<trkpt lat="40.241051650" lon="-74.664768300">
+ <ele>-5.500000</ele>
+<time>2007-03-10T19:30:08Z</time>
+</trkpt>
+<trkpt lat="40.241056650" lon="-74.664788300">
+ <ele>-6.200000</ele>
+<time>2007-03-10T19:30:09Z</time>
+</trkpt>
+<trkpt lat="40.241058300" lon="-74.664815000">
+ <ele>-6.400000</ele>
+<time>2007-03-10T19:30:10Z</time>
+</trkpt>
+<trkpt lat="40.241040000" lon="-74.664928300">
+ <ele>-6.400000</ele>
+<time>2007-03-10T19:30:14Z</time>
+</trkpt>
+<trkpt lat="40.241033300" lon="-74.664955000">
+ <ele>-7.900000</ele>
+<time>2007-03-10T19:30:15Z</time>
+</trkpt>
+<trkpt lat="40.241023300" lon="-74.664981600">
+ <ele>-7.500000</ele>
+<time>2007-03-10T19:30:16Z</time>
+</trkpt>
+<trkpt lat="40.241015000" lon="-74.665011600">
+ <ele>-6.600000</ele>
+<time>2007-03-10T19:30:17Z</time>
+</trkpt>
+<trkpt lat="40.240951650" lon="-74.665111600">
+ <ele>-6.600000</ele>
+<time>2007-03-10T19:30:21Z</time>
+</trkpt>
+<trkpt lat="40.240956650" lon="-74.665133300">
+ <ele>-3.700000</ele>
+<time>2007-03-10T19:30:22Z</time>
+</trkpt>
+<trkpt lat="40.240960000" lon="-74.665150000">
+ <ele>-3.500000</ele>
+<time>2007-03-10T19:30:23Z</time>
+</trkpt>
+<trkpt lat="40.240963300" lon="-74.665165000">
+ <ele>-2.500000</ele>
+<time>2007-03-10T19:30:24Z</time>
+</trkpt>
+<trkpt lat="40.240945000" lon="-74.665196600">
+ <ele>-2.500000</ele>
+<time>2007-03-10T19:30:26Z</time>
+</trkpt>
+<trkpt lat="40.240945000" lon="-74.665205000">
+ <ele>-1.200000</ele>
+<time>2007-03-10T19:30:27Z</time>
+</trkpt>
+<trkpt lat="40.240938300" lon="-74.665216600">
+ <ele>-0.200000</ele>
+<time>2007-03-10T19:30:28Z</time>
+</trkpt>
+<trkpt lat="40.240938300" lon="-74.665228300">
+ <ele>0.800000</ele>
+<time>2007-03-10T19:30:29Z</time>
+</trkpt>
+<trkpt lat="40.240906650" lon="-74.665255000">
+ <ele>1.300000</ele>
+<time>2007-03-10T19:30:32Z</time>
+</trkpt>
+<trkpt lat="40.240906650" lon="-74.665266600">
+ <ele>1.700000</ele>
+<time>2007-03-10T19:30:33Z</time>
+</trkpt>
+<trkpt lat="40.240908300" lon="-74.665280000">
+ <ele>1.900000</ele>
+<time>2007-03-10T19:30:34Z</time>
+</trkpt>
+<trkpt lat="40.240911650" lon="-74.665296600">
+ <ele>2.600000</ele>
+<time>2007-03-10T19:30:35Z</time>
+</trkpt>
+<trkpt lat="40.240911650" lon="-74.665381600">
+ <ele>2.600000</ele>
+<time>2007-03-10T19:30:41Z</time>
+</trkpt>
+<trkpt lat="40.240906650" lon="-74.665396600">
+ <ele>5.700000</ele>
+<time>2007-03-10T19:30:42Z</time>
+</trkpt>
+<trkpt lat="40.240915000" lon="-74.665416600">
+ <ele>6.600000</ele>
+<time>2007-03-10T19:30:43Z</time>
+</trkpt>
+<trkpt lat="40.240916650" lon="-74.665426600">
+ <ele>6.900000</ele>
+<time>2007-03-10T19:30:44Z</time>
+</trkpt>
+<trkpt lat="40.240916650" lon="-74.665448300">
+ <ele>8.400000</ele>
+<time>2007-03-10T19:30:45Z</time>
+</trkpt>
+<trkpt lat="40.240941650" lon="-74.665555000">
+ <ele>8.400000</ele>
+<time>2007-03-10T19:30:49Z</time>
+</trkpt>
+<trkpt lat="40.240940000" lon="-74.665581600">
+ <ele>14.100000</ele>
+<time>2007-03-10T19:30:50Z</time>
+</trkpt>
+<trkpt lat="40.240935000" lon="-74.665608300">
+ <ele>14.700000</ele>
+<time>2007-03-10T19:30:51Z</time>
+</trkpt>
+<trkpt lat="40.240928300" lon="-74.665628300">
+ <ele>14.900000</ele>
+<time>2007-03-10T19:30:52Z</time>
+</trkpt>
+<trkpt lat="40.240923300" lon="-74.665708300">
+ <ele>14.900000</ele>
+<time>2007-03-10T19:30:56Z</time>
+</trkpt>
+<trkpt lat="40.240921650" lon="-74.665728300">
+ <ele>15.600000</ele>
+<time>2007-03-10T19:30:57Z</time>
+</trkpt>
+<trkpt lat="40.240916650" lon="-74.665741600">
+ <ele>15.500000</ele>
+<time>2007-03-10T19:30:58Z</time>
+</trkpt>
+<trkpt lat="40.240913300" lon="-74.665756600">
+ <ele>15.500000</ele>
+<time>2007-03-10T19:30:59Z</time>
+</trkpt>
+<trkpt lat="40.240911650" lon="-74.665776600">
+ <ele>16.200001</ele>
+<time>2007-03-10T19:31:00Z</time>
+</trkpt>
+<trkpt lat="40.240911650" lon="-74.665816600">
+ <ele>16.200001</ele>
+<time>2007-03-10T19:31:02Z</time>
+</trkpt>
+<trkpt lat="40.240908300" lon="-74.665845000">
+ <ele>18.200001</ele>
+<time>2007-03-10T19:31:03Z</time>
+</trkpt>
+<trkpt lat="40.240898300" lon="-74.665866600">
+ <ele>18.200001</ele>
+<time>2007-03-10T19:31:04Z</time>
+</trkpt>
+<trkpt lat="40.240880000" lon="-74.665888300">
+ <ele>18.200001</ele>
+<time>2007-03-10T19:31:05Z</time>
+</trkpt>
+<trkpt lat="40.240838300" lon="-74.665976600">
+ <ele>18.200001</ele>
+<time>2007-03-10T19:31:09Z</time>
+</trkpt>
+<trkpt lat="40.240833300" lon="-74.666003300">
+ <ele>16.500000</ele>
+<time>2007-03-10T19:31:10Z</time>
+</trkpt>
+<trkpt lat="40.240825000" lon="-74.666028300">
+ <ele>16.000000</ele>
+<time>2007-03-10T19:31:11Z</time>
+</trkpt>
+<trkpt lat="40.240826650" lon="-74.666056600">
+ <ele>16.799999</ele>
+<time>2007-03-10T19:31:12Z</time>
+</trkpt>
+<trkpt lat="40.240826650" lon="-74.666145000">
+ <ele>16.799999</ele>
+<time>2007-03-10T19:31:16Z</time>
+</trkpt>
+<trkpt lat="40.240831650" lon="-74.666166600">
+ <ele>17.400000</ele>
+<time>2007-03-10T19:31:17Z</time>
+</trkpt>
+<trkpt lat="40.240830000" lon="-74.666190000">
+ <ele>17.299999</ele>
+<time>2007-03-10T19:31:18Z</time>
+</trkpt>
+<trkpt lat="40.240831650" lon="-74.666213300">
+ <ele>17.100000</ele>
+<time>2007-03-10T19:31:19Z</time>
+</trkpt>
+<trkpt lat="40.240830000" lon="-74.666236600">
+ <ele>17.400000</ele>
+<time>2007-03-10T19:31:20Z</time>
+</trkpt>
+<trkpt lat="40.240821650" lon="-74.666276600">
+ <ele>17.400000</ele>
+<time>2007-03-10T19:31:22Z</time>
+</trkpt>
+<trkpt lat="40.240818300" lon="-74.666298300">
+ <ele>17.900000</ele>
+<time>2007-03-10T19:31:23Z</time>
+</trkpt>
+<trkpt lat="40.240813300" lon="-74.666320000">
+ <ele>18.400000</ele>
+<time>2007-03-10T19:31:24Z</time>
+</trkpt>
+<trkpt lat="40.240806650" lon="-74.666341600">
+ <ele>19.000000</ele>
+<time>2007-03-10T19:31:25Z</time>
+</trkpt>
+<trkpt lat="40.240785000" lon="-74.666350000">
+ <ele>19.000000</ele>
+<time>2007-03-10T19:31:28Z</time>
+</trkpt>
+<trkpt lat="40.240778300" lon="-74.666356600">
+ <ele>17.299999</ele>
+<time>2007-03-10T19:31:29Z</time>
+</trkpt>
+<trkpt lat="40.240766650" lon="-74.666363300">
+ <ele>16.799999</ele>
+<time>2007-03-10T19:31:30Z</time>
+</trkpt>
+<trkpt lat="40.240760000" lon="-74.666368300">
+ <ele>16.900000</ele>
+<time>2007-03-10T19:31:31Z</time>
+</trkpt>
+<trkpt lat="40.240748300" lon="-74.666416600">
+ <ele>16.900000</ele>
+<time>2007-03-10T19:31:35Z</time>
+</trkpt>
+<trkpt lat="40.240751650" lon="-74.666430000">
+ <ele>17.700001</ele>
+<time>2007-03-10T19:31:36Z</time>
+</trkpt>
+<trkpt lat="40.240756650" lon="-74.666445000">
+ <ele>18.400000</ele>
+<time>2007-03-10T19:31:37Z</time>
+</trkpt>
+<trkpt lat="40.240741650" lon="-74.666451600">
+ <ele>18.500000</ele>
+<time>2007-03-10T19:31:38Z</time>
+</trkpt>
+<trkpt lat="40.240721650" lon="-74.666475000">
+ <ele>18.500000</ele>
+<time>2007-03-10T19:31:40Z</time>
+</trkpt>
+<trkpt lat="40.240715000" lon="-74.666486600">
+ <ele>18.200001</ele>
+<time>2007-03-10T19:31:41Z</time>
+</trkpt>
+<trkpt lat="40.240708300" lon="-74.666503300">
+ <ele>18.200001</ele>
+<time>2007-03-10T19:31:42Z</time>
+</trkpt>
+<trkpt lat="40.240698300" lon="-74.666515000">
+ <ele>17.200001</ele>
+<time>2007-03-10T19:31:43Z</time>
+</trkpt>
+<trkpt lat="40.240688300" lon="-74.666553300">
+ <ele>17.200001</ele>
+<time>2007-03-10T19:31:46Z</time>
+</trkpt>
+<trkpt lat="40.240695000" lon="-74.666573300">
+ <ele>17.200001</ele>
+<time>2007-03-10T19:31:47Z</time>
+</trkpt>
+<trkpt lat="40.240696650" lon="-74.666591600">
+ <ele>15.900000</ele>
+<time>2007-03-10T19:31:48Z</time>
+</trkpt>
+<trkpt lat="40.240688300" lon="-74.666608300">
+ <ele>15.500000</ele>
+<time>2007-03-10T19:31:49Z</time>
+</trkpt>
+<trkpt lat="40.240683300" lon="-74.666631600">
+ <ele>16.000000</ele>
+<time>2007-03-10T19:31:50Z</time>
+</trkpt>
+<trkpt lat="40.240673300" lon="-74.666741600">
+ <ele>16.000000</ele>
+<time>2007-03-10T19:31:55Z</time>
+</trkpt>
+<trkpt lat="40.240663300" lon="-74.666765000">
+ <ele>19.299999</ele>
+<time>2007-03-10T19:31:56Z</time>
+</trkpt>
+<trkpt lat="40.240646650" lon="-74.666785000">
+ <ele>18.600000</ele>
+<time>2007-03-10T19:31:57Z</time>
+</trkpt>
+<trkpt lat="40.240605000" lon="-74.666858300">
+ <ele>18.600000</ele>
+<time>2007-03-10T19:32:01Z</time>
+</trkpt>
+<trkpt lat="40.240595000" lon="-74.666871600">
+ <ele>18.600000</ele>
+<time>2007-03-10T19:32:02Z</time>
+</trkpt>
+<trkpt lat="40.240576650" lon="-74.666884900">
+ <ele>17.000000</ele>
+<time>2007-03-10T19:32:03Z</time>
+</trkpt>
+<trkpt lat="40.240568300" lon="-74.666893300">
+ <ele>17.000000</ele>
+<time>2007-03-10T19:32:04Z</time>
+</trkpt>
+<trkpt lat="40.240563300" lon="-74.666900000">
+ <ele>16.600000</ele>
+<time>2007-03-10T19:32:05Z</time>
+</trkpt>
+<trkpt lat="40.240515000" lon="-74.666966600">
+ <ele>16.600000</ele>
+<time>2007-03-10T19:32:10Z</time>
+</trkpt>
+<trkpt lat="40.240511650" lon="-74.666985000">
+ <ele>15.300000</ele>
+<time>2007-03-10T19:32:11Z</time>
+</trkpt>
+<trkpt lat="40.240503300" lon="-74.666998300">
+ <ele>15.500000</ele>
+<time>2007-03-10T19:32:12Z</time>
+</trkpt>
+<trkpt lat="40.240501650" lon="-74.667010000">
+ <ele>15.300000</ele>
+<time>2007-03-10T19:32:13Z</time>
+</trkpt>
+<trkpt lat="40.240501650" lon="-74.667093300">
+ <ele>15.300000</ele>
+<time>2007-03-10T19:32:18Z</time>
+</trkpt>
+<trkpt lat="40.240498300" lon="-74.667113300">
+ <ele>14.300000</ele>
+<time>2007-03-10T19:32:19Z</time>
+</trkpt>
+<trkpt lat="40.240500000" lon="-74.667138300">
+ <ele>14.300000</ele>
+<time>2007-03-10T19:32:20Z</time>
+</trkpt>
+<trkpt lat="40.240503300" lon="-74.667253300">
+ <ele>14.300000</ele>
+<time>2007-03-10T19:32:24Z</time>
+</trkpt>
+<trkpt lat="40.240503300" lon="-74.667271600">
+ <ele>12.000000</ele>
+<time>2007-03-10T19:32:25Z</time>
+</trkpt>
+<trkpt lat="40.240491650" lon="-74.667291600">
+ <ele>11.100000</ele>
+<time>2007-03-10T19:32:26Z</time>
+</trkpt>
+<trkpt lat="40.240490000" lon="-74.667308300">
+ <ele>10.800000</ele>
+<time>2007-03-10T19:32:27Z</time>
+</trkpt>
+<trkpt lat="40.240510000" lon="-74.667365000">
+ <ele>10.800000</ele>
+<time>2007-03-10T19:32:31Z</time>
+</trkpt>
+<trkpt lat="40.240528300" lon="-74.667380000">
+ <ele>12.100000</ele>
+<time>2007-03-10T19:32:32Z</time>
+</trkpt>
+<trkpt lat="40.240546650" lon="-74.667388300">
+ <ele>11.800000</ele>
+<time>2007-03-10T19:32:33Z</time>
+</trkpt>
+<trkpt lat="40.240564950" lon="-74.667400000">
+ <ele>12.200000</ele>
+<time>2007-03-10T19:32:34Z</time>
+</trkpt>
+<trkpt lat="40.240580000" lon="-74.667416600">
+ <ele>12.200000</ele>
+<time>2007-03-10T19:32:35Z</time>
+</trkpt>
+<trkpt lat="40.240591650" lon="-74.667435000">
+ <ele>13.600000</ele>
+<time>2007-03-10T19:32:36Z</time>
+</trkpt>
+<trkpt lat="40.240609950" lon="-74.667456600">
+ <ele>14.500000</ele>
+<time>2007-03-10T19:32:37Z</time>
+</trkpt>
+<trkpt lat="40.240665000" lon="-74.667556600">
+ <ele>14.500000</ele>
+<time>2007-03-10T19:32:41Z</time>
+</trkpt>
+<trkpt lat="40.240661650" lon="-74.667580000">
+ <ele>19.000000</ele>
+<time>2007-03-10T19:32:42Z</time>
+</trkpt>
+<trkpt lat="40.240651650" lon="-74.667598300">
+ <ele>19.600000</ele>
+<time>2007-03-10T19:32:43Z</time>
+</trkpt>
+<trkpt lat="40.240641650" lon="-74.667618300">
+ <ele>20.799999</ele>
+<time>2007-03-10T19:32:44Z</time>
+</trkpt>
+<trkpt lat="40.240633300" lon="-74.667631600">
+ <ele>20.500000</ele>
+<time>2007-03-10T19:32:45Z</time>
+</trkpt>
+<trkpt lat="40.240595000" lon="-74.667666600">
+ <ele>20.100000</ele>
+<time>2007-03-10T19:32:47Z</time>
+</trkpt>
+<trkpt lat="40.240585000" lon="-74.667685000">
+ <ele>19.500000</ele>
+<time>2007-03-10T19:32:48Z</time>
+</trkpt>
+<trkpt lat="40.240578300" lon="-74.667710000">
+ <ele>20.500000</ele>
+<time>2007-03-10T19:32:49Z</time>
+</trkpt>
+<trkpt lat="40.240568300" lon="-74.667731600">
+ <ele>21.100000</ele>
+<time>2007-03-10T19:32:50Z</time>
+</trkpt>
+<trkpt lat="40.240538300" lon="-74.667821600">
+ <ele>21.100000</ele>
+<time>2007-03-10T19:32:54Z</time>
+</trkpt>
+<trkpt lat="40.240540000" lon="-74.667846600">
+ <ele>23.100000</ele>
+<time>2007-03-10T19:32:55Z</time>
+</trkpt>
+<trkpt lat="40.240538300" lon="-74.667866600">
+ <ele>23.000000</ele>
+<time>2007-03-10T19:32:56Z</time>
+</trkpt>
+<trkpt lat="40.240511650" lon="-74.667928300">
+ <ele>23.000000</ele>
+<time>2007-03-10T19:33:01Z</time>
+</trkpt>
+<trkpt lat="40.240508300" lon="-74.667936600">
+ <ele>25.000000</ele>
+<time>2007-03-10T19:33:02Z</time>
+</trkpt>
+<trkpt lat="40.240508300" lon="-74.667951600">
+ <ele>25.400000</ele>
+<time>2007-03-10T19:33:03Z</time>
+</trkpt>
+<trkpt lat="40.240505000" lon="-74.667961600">
+ <ele>24.900000</ele>
+<time>2007-03-10T19:33:04Z</time>
+</trkpt>
+<trkpt lat="40.240493300" lon="-74.667975000">
+ <ele>24.299999</ele>
+<time>2007-03-10T19:33:05Z</time>
+</trkpt>
+<trkpt lat="40.240480000" lon="-74.667985000">
+ <ele>22.900000</ele>
+<time>2007-03-10T19:33:06Z</time>
+</trkpt>
+<trkpt lat="40.240478300" lon="-74.668003300">
+ <ele>22.600000</ele>
+<time>2007-03-10T19:33:07Z</time>
+</trkpt>
+<trkpt lat="40.240470000" lon="-74.668086600">
+ <ele>22.600000</ele>
+<time>2007-03-10T19:33:11Z</time>
+</trkpt>
+<trkpt lat="40.240471650" lon="-74.668105000">
+ <ele>19.900000</ele>
+<time>2007-03-10T19:33:12Z</time>
+</trkpt>
+<trkpt lat="40.240463300" lon="-74.668120000">
+ <ele>19.299999</ele>
+<time>2007-03-10T19:33:13Z</time>
+</trkpt>
+<trkpt lat="40.240455000" lon="-74.668128300">
+ <ele>19.100000</ele>
+<time>2007-03-10T19:33:14Z</time>
+</trkpt>
+<trkpt lat="40.240443300" lon="-74.668138300">
+ <ele>18.900000</ele>
+<time>2007-03-10T19:33:15Z</time>
+</trkpt>
+<trkpt lat="40.240416650" lon="-74.668153300">
+ <ele>18.900000</ele>
+<time>2007-03-10T19:33:17Z</time>
+</trkpt>
+<trkpt lat="40.240408300" lon="-74.668161600">
+ <ele>18.000000</ele>
+<time>2007-03-10T19:33:18Z</time>
+</trkpt>
+<trkpt lat="40.240405000" lon="-74.668178300">
+ <ele>17.200001</ele>
+<time>2007-03-10T19:33:19Z</time>
+</trkpt>
+<trkpt lat="40.240400000" lon="-74.668195000">
+ <ele>16.500000</ele>
+<time>2007-03-10T19:33:20Z</time>
+</trkpt>
+<trkpt lat="40.240448300" lon="-74.668300000">
+ <ele>16.500000</ele>
+<time>2007-03-10T19:33:26Z</time>
+</trkpt>
+<trkpt lat="40.240443300" lon="-74.668315000">
+ <ele>16.500000</ele>
+<time>2007-03-10T19:33:27Z</time>
+</trkpt>
+<trkpt lat="40.240445000" lon="-74.668338300">
+ <ele>13.100000</ele>
+<time>2007-03-10T19:33:28Z</time>
+</trkpt>
+<trkpt lat="40.240453300" lon="-74.668366600">
+ <ele>12.700000</ele>
+<time>2007-03-10T19:33:29Z</time>
+</trkpt>
+<trkpt lat="40.240455000" lon="-74.668391600">
+ <ele>12.800000</ele>
+<time>2007-03-10T19:33:30Z</time>
+</trkpt>
+<trkpt lat="40.240418300" lon="-74.668460000">
+ <ele>12.800000</ele>
+<time>2007-03-10T19:33:33Z</time>
+</trkpt>
+<trkpt lat="40.240401650" lon="-74.668483300">
+ <ele>12.100000</ele>
+<time>2007-03-10T19:33:34Z</time>
+</trkpt>
+<trkpt lat="40.240393300" lon="-74.668513300">
+ <ele>12.800000</ele>
+<time>2007-03-10T19:33:35Z</time>
+</trkpt>
+<trkpt lat="40.240388300" lon="-74.668535000">
+ <ele>12.900000</ele>
+<time>2007-03-10T19:33:36Z</time>
+</trkpt>
+<trkpt lat="40.240351650" lon="-74.668685000">
+ <ele>14.600000</ele>
+<time>2007-03-10T19:33:43Z</time>
+</trkpt>
+<trkpt lat="40.240338300" lon="-74.668696600">
+ <ele>14.300000</ele>
+<time>2007-03-10T19:33:44Z</time>
+</trkpt>
+<trkpt lat="40.240335000" lon="-74.668715000">
+ <ele>15.300000</ele>
+<time>2007-03-10T19:33:45Z</time>
+</trkpt>
+<trkpt lat="40.240343300" lon="-74.668764900">
+ <ele>15.300000</ele>
+<time>2007-03-10T19:33:49Z</time>
+</trkpt>
+<trkpt lat="40.240345000" lon="-74.668773300">
+ <ele>15.100000</ele>
+<time>2007-03-10T19:33:50Z</time>
+</trkpt>
+<trkpt lat="40.240351650" lon="-74.668785000">
+ <ele>15.000000</ele>
+<time>2007-03-10T19:33:51Z</time>
+</trkpt>
+<trkpt lat="40.240361650" lon="-74.668801600">
+ <ele>15.500000</ele>
+<time>2007-03-10T19:33:52Z</time>
+</trkpt>
+<trkpt lat="40.240338300" lon="-74.668891600">
+ <ele>15.500000</ele>
+<time>2007-03-10T19:33:58Z</time>
+</trkpt>
+<trkpt lat="40.240335000" lon="-74.668906600">
+ <ele>16.500000</ele>
+<time>2007-03-10T19:33:59Z</time>
+</trkpt>
+<trkpt lat="40.240321650" lon="-74.668916600">
+ <ele>18.299999</ele>
+<time>2007-03-10T19:34:00Z</time>
+</trkpt>
+<trkpt lat="40.240306650" lon="-74.668921600">
+ <ele>19.500000</ele>
+<time>2007-03-10T19:34:01Z</time>
+</trkpt>
+<trkpt lat="40.240251650" lon="-74.668911600">
+ <ele>19.500000</ele>
+<time>2007-03-10T19:34:06Z</time>
+</trkpt>
+<trkpt lat="40.240236650" lon="-74.668906600">
+ <ele>22.500000</ele>
+<time>2007-03-10T19:34:07Z</time>
+</trkpt>
+<trkpt lat="40.240225000" lon="-74.668903300">
+ <ele>23.299999</ele>
+<time>2007-03-10T19:34:08Z</time>
+</trkpt>
+<trkpt lat="40.240208300" lon="-74.668898300">
+ <ele>23.299999</ele>
+<time>2007-03-10T19:34:09Z</time>
+</trkpt>
+<trkpt lat="40.240200000" lon="-74.668893300">
+ <ele>22.700001</ele>
+<time>2007-03-10T19:34:10Z</time>
+</trkpt>
+<trkpt lat="40.240160000" lon="-74.668875000">
+ <ele>22.700001</ele>
+<time>2007-03-10T19:34:12Z</time>
+</trkpt>
+<trkpt lat="40.240139950" lon="-74.668868300">
+ <ele>22.799999</ele>
+<time>2007-03-10T19:34:13Z</time>
+</trkpt>
+<trkpt lat="40.240125000" lon="-74.668870000">
+ <ele>23.400000</ele>
+<time>2007-03-10T19:34:14Z</time>
+</trkpt>
+<trkpt lat="40.240108300" lon="-74.668866600">
+ <ele>24.000000</ele>
+<time>2007-03-10T19:34:15Z</time>
+</trkpt>
+<trkpt lat="40.240038300" lon="-74.668854900">
+ <ele>24.000000</ele>
+<time>2007-03-10T19:34:20Z</time>
+</trkpt>
+<trkpt lat="40.240030000" lon="-74.668856600">
+ <ele>21.100000</ele>
+<time>2007-03-10T19:34:21Z</time>
+</trkpt>
+<trkpt lat="40.240018300" lon="-74.668856600">
+ <ele>20.100000</ele>
+<time>2007-03-10T19:34:22Z</time>
+</trkpt>
+<trkpt lat="40.240004950" lon="-74.668856600">
+ <ele>19.799999</ele>
+<time>2007-03-10T19:34:23Z</time>
+</trkpt>
+<trkpt lat="40.239985000" lon="-74.668848300">
+ <ele>19.500000</ele>
+<time>2007-03-10T19:34:24Z</time>
+</trkpt>
+<trkpt lat="40.239973300" lon="-74.668841600">
+ <ele>19.500000</ele>
+<time>2007-03-10T19:34:25Z</time>
+</trkpt>
+<trkpt lat="40.239958300" lon="-74.668833300">
+ <ele>19.299999</ele>
+<time>2007-03-10T19:34:26Z</time>
+</trkpt>
+<trkpt lat="40.239935000" lon="-74.668815000">
+ <ele>18.600000</ele>
+<time>2007-03-10T19:34:27Z</time>
+</trkpt>
+<trkpt lat="40.239880000" lon="-74.668751600">
+ <ele>18.600000</ele>
+<time>2007-03-10T19:34:32Z</time>
+</trkpt>
+<trkpt lat="40.239865000" lon="-74.668741600">
+ <ele>16.799999</ele>
+<time>2007-03-10T19:34:33Z</time>
+</trkpt>
+<trkpt lat="40.239849950" lon="-74.668731600">
+ <ele>16.200001</ele>
+<time>2007-03-10T19:34:34Z</time>
+</trkpt>
+<trkpt lat="40.239828300" lon="-74.668716600">
+ <ele>15.800000</ele>
+<time>2007-03-10T19:34:35Z</time>
+</trkpt>
+<trkpt lat="40.239770000" lon="-74.668686600">
+ <ele>17.100000</ele>
+<time>2007-03-10T19:34:39Z</time>
+</trkpt>
+<trkpt lat="40.239758300" lon="-74.668683300">
+ <ele>16.600000</ele>
+<time>2007-03-10T19:34:40Z</time>
+</trkpt>
+<trkpt lat="40.239745000" lon="-74.668678300">
+ <ele>16.700001</ele>
+<time>2007-03-10T19:34:41Z</time>
+</trkpt>
+<trkpt lat="40.239703300" lon="-74.668666600">
+ <ele>16.700001</ele>
+<time>2007-03-10T19:34:43Z</time>
+</trkpt>
+<trkpt lat="40.239680000" lon="-74.668655000">
+ <ele>16.799999</ele>
+<time>2007-03-10T19:34:44Z</time>
+</trkpt>
+<trkpt lat="40.239655000" lon="-74.668645000">
+ <ele>17.700001</ele>
+<time>2007-03-10T19:34:45Z</time>
+</trkpt>
+<trkpt lat="40.239560000" lon="-74.668608300">
+ <ele>17.700001</ele>
+<time>2007-03-10T19:34:48Z</time>
+</trkpt>
+<trkpt lat="40.239536650" lon="-74.668591600">
+ <ele>17.400000</ele>
+<time>2007-03-10T19:34:49Z</time>
+</trkpt>
+<trkpt lat="40.239525000" lon="-74.668583300">
+ <ele>16.900000</ele>
+<time>2007-03-10T19:34:50Z</time>
+</trkpt>
+<trkpt lat="40.239511650" lon="-74.668576600">
+ <ele>16.700001</ele>
+<time>2007-03-10T19:34:51Z</time>
+</trkpt>
+<trkpt lat="40.239490000" lon="-74.668561600">
+ <ele>16.700001</ele>
+<time>2007-03-10T19:34:55Z</time>
+</trkpt>
+<trkpt lat="40.239486650" lon="-74.668555000">
+ <ele>18.100000</ele>
+<time>2007-03-10T19:34:56Z</time>
+</trkpt>
+<trkpt lat="40.239490000" lon="-74.668556600">
+ <ele>18.700001</ele>
+<time>2007-03-10T19:34:57Z</time>
+</trkpt>
+<trkpt lat="40.239488300" lon="-74.668560000">
+ <ele>18.400000</ele>
+<time>2007-03-10T19:34:58Z</time>
+</trkpt>
+<trkpt lat="40.239481650" lon="-74.668563300">
+ <ele>17.500000</ele>
+<time>2007-03-10T19:34:59Z</time>
+</trkpt>
+<trkpt lat="40.239415000" lon="-74.668556600">
+ <ele>17.000000</ele>
+<time>2007-03-10T19:35:03Z</time>
+</trkpt>
+<trkpt lat="40.239401650" lon="-74.668555000">
+ <ele>17.700001</ele>
+<time>2007-03-10T19:35:04Z</time>
+</trkpt>
+<trkpt lat="40.239386650" lon="-74.668551600">
+ <ele>18.200001</ele>
+<time>2007-03-10T19:35:05Z</time>
+</trkpt>
+<trkpt lat="40.239301650" lon="-74.668523300">
+ <ele>20.400000</ele>
+<time>2007-03-10T19:35:10Z</time>
+</trkpt>
+<trkpt lat="40.239285000" lon="-74.668511600">
+ <ele>21.700001</ele>
+<time>2007-03-10T19:35:11Z</time>
+</trkpt>
+<trkpt lat="40.239263300" lon="-74.668501600">
+ <ele>21.600000</ele>
+<time>2007-03-10T19:35:12Z</time>
+</trkpt>
+<trkpt lat="40.239216650" lon="-74.668475000">
+ <ele>21.600000</ele>
+<time>2007-03-10T19:35:16Z</time>
+</trkpt>
+<trkpt lat="40.239206650" lon="-74.668471600">
+ <ele>25.200001</ele>
+<time>2007-03-10T19:35:17Z</time>
+</trkpt>
+<trkpt lat="40.239196650" lon="-74.668473300">
+ <ele>26.200001</ele>
+<time>2007-03-10T19:35:18Z</time>
+</trkpt>
+<trkpt lat="40.239191650" lon="-74.668476600">
+ <ele>27.000000</ele>
+<time>2007-03-10T19:35:19Z</time>
+</trkpt>
+<trkpt lat="40.239160000" lon="-74.668473300">
+ <ele>27.000000</ele>
+<time>2007-03-10T19:35:22Z</time>
+</trkpt>
+<trkpt lat="40.239135000" lon="-74.668463300">
+ <ele>28.500000</ele>
+<time>2007-03-10T19:35:23Z</time>
+</trkpt>
+<trkpt lat="40.239121650" lon="-74.668460000">
+ <ele>28.299999</ele>
+<time>2007-03-10T19:35:24Z</time>
+</trkpt>
+<trkpt lat="40.239115000" lon="-74.668458300">
+ <ele>28.799999</ele>
+<time>2007-03-10T19:35:25Z</time>
+</trkpt>
+<trkpt lat="40.239006650" lon="-74.668435000">
+ <ele>27.700001</ele>
+<time>2007-03-10T19:35:32Z</time>
+</trkpt>
+<trkpt lat="40.238993300" lon="-74.668430000">
+ <ele>27.900000</ele>
+<time>2007-03-10T19:35:33Z</time>
+</trkpt>
+<trkpt lat="40.238973300" lon="-74.668428300">
+ <ele>28.500000</ele>
+<time>2007-03-10T19:35:34Z</time>
+</trkpt>
+<trkpt lat="40.238965000" lon="-74.668430000">
+ <ele>28.900000</ele>
+<time>2007-03-10T19:35:35Z</time>
+</trkpt>
+<trkpt lat="40.238938300" lon="-74.668421600">
+ <ele>28.900000</ele>
+<time>2007-03-10T19:35:38Z</time>
+</trkpt>
+<trkpt lat="40.238926650" lon="-74.668413300">
+ <ele>30.000000</ele>
+<time>2007-03-10T19:35:39Z</time>
+</trkpt>
+<trkpt lat="40.238920000" lon="-74.668415000">
+ <ele>29.700001</ele>
+<time>2007-03-10T19:35:40Z</time>
+</trkpt>
+<trkpt lat="40.238905000" lon="-74.668406600">
+ <ele>27.700001</ele>
+<time>2007-03-10T19:35:41Z</time>
+</trkpt>
+<trkpt lat="40.238860000" lon="-74.668403300">
+ <ele>27.700001</ele>
+<time>2007-03-10T19:35:47Z</time>
+</trkpt>
+<trkpt lat="40.238845000" lon="-74.668395000">
+ <ele>26.600000</ele>
+<time>2007-03-10T19:35:48Z</time>
+</trkpt>
+<trkpt lat="40.238830000" lon="-74.668386600">
+ <ele>27.400000</ele>
+<time>2007-03-10T19:35:49Z</time>
+</trkpt>
+<trkpt lat="40.238806650" lon="-74.668370000">
+ <ele>27.100000</ele>
+<time>2007-03-10T19:35:50Z</time>
+</trkpt>
+<trkpt lat="40.238740000" lon="-74.668335000">
+ <ele>27.100000</ele>
+<time>2007-03-10T19:35:53Z</time>
+</trkpt>
+<trkpt lat="40.238726650" lon="-74.668326600">
+ <ele>26.600000</ele>
+<time>2007-03-10T19:35:54Z</time>
+</trkpt>
+<trkpt lat="40.238713300" lon="-74.668321600">
+ <ele>26.600000</ele>
+<time>2007-03-10T19:35:55Z</time>
+</trkpt>
+<trkpt lat="40.238686650" lon="-74.668328300">
+ <ele>26.600000</ele>
+<time>2007-03-10T19:35:58Z</time>
+</trkpt>
+<trkpt lat="40.238678300" lon="-74.668325000">
+ <ele>26.299999</ele>
+<time>2007-03-10T19:35:59Z</time>
+</trkpt>
+<trkpt lat="40.238670000" lon="-74.668315000">
+ <ele>27.200001</ele>
+<time>2007-03-10T19:36:00Z</time>
+</trkpt>
+<trkpt lat="40.238630000" lon="-74.668311600">
+ <ele>27.200001</ele>
+<time>2007-03-10T19:36:03Z</time>
+</trkpt>
+<trkpt lat="40.238600000" lon="-74.668310000">
+ <ele>28.200001</ele>
+<time>2007-03-10T19:36:04Z</time>
+</trkpt>
+<trkpt lat="40.238576650" lon="-74.668305000">
+ <ele>28.500000</ele>
+<time>2007-03-10T19:36:05Z</time>
+</trkpt>
+<trkpt lat="40.238528300" lon="-74.668320000">
+ <ele>28.500000</ele>
+<time>2007-03-10T19:36:08Z</time>
+</trkpt>
+<trkpt lat="40.238516650" lon="-74.668325000">
+ <ele>31.000000</ele>
+<time>2007-03-10T19:36:09Z</time>
+</trkpt>
+<trkpt lat="40.238498300" lon="-74.668326600">
+ <ele>32.099998</ele>
+<time>2007-03-10T19:36:10Z</time>
+</trkpt>
+<trkpt lat="40.238475000" lon="-74.668328300">
+ <ele>32.099998</ele>
+<time>2007-03-10T19:36:12Z</time>
+</trkpt>
+<trkpt lat="40.238463300" lon="-74.668328300">
+ <ele>34.299999</ele>
+<time>2007-03-10T19:36:13Z</time>
+</trkpt>
+<trkpt lat="40.238441650" lon="-74.668325000">
+ <ele>34.900002</ele>
+<time>2007-03-10T19:36:14Z</time>
+</trkpt>
+<trkpt lat="40.238418300" lon="-74.668323300">
+ <ele>35.000000</ele>
+<time>2007-03-10T19:36:15Z</time>
+</trkpt>
+<trkpt lat="40.238386650" lon="-74.668330000">
+ <ele>35.000000</ele>
+<time>2007-03-10T19:36:17Z</time>
+</trkpt>
+<trkpt lat="40.238373300" lon="-74.668338300">
+ <ele>34.900002</ele>
+<time>2007-03-10T19:36:18Z</time>
+</trkpt>
+<trkpt lat="40.238358300" lon="-74.668338300">
+ <ele>35.299999</ele>
+<time>2007-03-10T19:36:19Z</time>
+</trkpt>
+<trkpt lat="40.238349950" lon="-74.668336600">
+ <ele>36.500000</ele>
+<time>2007-03-10T19:36:20Z</time>
+</trkpt>
+<trkpt lat="40.238320000" lon="-74.668306600">
+ <ele>36.500000</ele>
+<time>2007-03-10T19:36:23Z</time>
+</trkpt>
+<trkpt lat="40.238321650" lon="-74.668300000">
+ <ele>38.599998</ele>
+<time>2007-03-10T19:36:24Z</time>
+</trkpt>
+<trkpt lat="40.238321650" lon="-74.668295000">
+ <ele>38.799999</ele>
+<time>2007-03-10T19:36:25Z</time>
+</trkpt>
+<trkpt lat="40.238320000" lon="-74.668283300">
+ <ele>39.200001</ele>
+<time>2007-03-10T19:36:26Z</time>
+</trkpt>
+<trkpt lat="40.238406650" lon="-74.668198300">
+ <ele>39.200001</ele>
+<time>2007-03-10T19:36:34Z</time>
+</trkpt>
+<trkpt lat="40.238420000" lon="-74.668188300">
+ <ele>38.900002</ele>
+<time>2007-03-10T19:36:35Z</time>
+</trkpt>
+<trkpt lat="40.238426650" lon="-74.668175000">
+ <ele>38.400002</ele>
+<time>2007-03-10T19:36:36Z</time>
+</trkpt>
+<trkpt lat="40.238446650" lon="-74.668113300">
+ <ele>38.400002</ele>
+<time>2007-03-10T19:36:40Z</time>
+</trkpt>
+<trkpt lat="40.238456650" lon="-74.668103300">
+ <ele>35.299999</ele>
+<time>2007-03-10T19:36:41Z</time>
+</trkpt>
+<trkpt lat="40.238458300" lon="-74.668090000">
+ <ele>34.299999</ele>
+<time>2007-03-10T19:36:42Z</time>
+</trkpt>
+<trkpt lat="40.238460000" lon="-74.668085000">
+ <ele>33.799999</ele>
+<time>2007-03-10T19:36:43Z</time>
+</trkpt>
+<trkpt lat="40.238470000" lon="-74.668040000">
+ <ele>31.400000</ele>
+<time>2007-03-10T19:36:46Z</time>
+</trkpt>
+<trkpt lat="40.238476650" lon="-74.668021600">
+ <ele>30.400000</ele>
+<time>2007-03-10T19:36:47Z</time>
+</trkpt>
+<trkpt lat="40.238478300" lon="-74.668003300">
+ <ele>29.900000</ele>
+<time>2007-03-10T19:36:48Z</time>
+</trkpt>
+<trkpt lat="40.238475000" lon="-74.667983300">
+ <ele>29.400000</ele>
+<time>2007-03-10T19:36:49Z</time>
+</trkpt>
+<trkpt lat="40.238475000" lon="-74.667966600">
+ <ele>29.200001</ele>
+<time>2007-03-10T19:36:50Z</time>
+</trkpt>
+<trkpt lat="40.238411650" lon="-74.667871600">
+ <ele>29.200001</ele>
+<time>2007-03-10T19:36:56Z</time>
+</trkpt>
+<trkpt lat="40.238405000" lon="-74.667853300">
+ <ele>28.600000</ele>
+<time>2007-03-10T19:36:57Z</time>
+</trkpt>
+<trkpt lat="40.238400000" lon="-74.667840000">
+ <ele>27.900000</ele>
+<time>2007-03-10T19:36:58Z</time>
+</trkpt>
+<trkpt lat="40.238391650" lon="-74.667816600">
+ <ele>27.000000</ele>
+<time>2007-03-10T19:36:59Z</time>
+</trkpt>
+<trkpt lat="40.238381650" lon="-74.667793300">
+ <ele>25.700001</ele>
+<time>2007-03-10T19:37:00Z</time>
+</trkpt>
+<trkpt lat="40.238290000" lon="-74.667651600">
+ <ele>25.700001</ele>
+<time>2007-03-10T19:37:06Z</time>
+</trkpt>
+<trkpt lat="40.238291650" lon="-74.667625000">
+ <ele>22.400000</ele>
+<time>2007-03-10T19:37:07Z</time>
+</trkpt>
+<trkpt lat="40.238290000" lon="-74.667591600">
+ <ele>22.200001</ele>
+<time>2007-03-10T19:37:08Z</time>
+</trkpt>
+<trkpt lat="40.238298300" lon="-74.667568300">
+ <ele>22.000000</ele>
+<time>2007-03-10T19:37:09Z</time>
+</trkpt>
+<trkpt lat="40.238313300" lon="-74.667558300">
+ <ele>21.100000</ele>
+<time>2007-03-10T19:37:10Z</time>
+</trkpt>
+<trkpt lat="40.238330000" lon="-74.667463300">
+ <ele>18.299999</ele>
+<time>2007-03-10T19:37:15Z</time>
+</trkpt>
+<trkpt lat="40.238340000" lon="-74.667456600">
+ <ele>19.100000</ele>
+<time>2007-03-10T19:37:16Z</time>
+</trkpt>
+<trkpt lat="40.238349950" lon="-74.667446600">
+ <ele>18.799999</ele>
+<time>2007-03-10T19:37:17Z</time>
+</trkpt>
+<trkpt lat="40.238351650" lon="-74.667273300">
+ <ele>18.799999</ele>
+<time>2007-03-10T19:37:26Z</time>
+</trkpt>
+<trkpt lat="40.238341650" lon="-74.667251600">
+ <ele>23.600000</ele>
+<time>2007-03-10T19:37:27Z</time>
+</trkpt>
+<trkpt lat="40.238345000" lon="-74.667233300">
+ <ele>24.100000</ele>
+<time>2007-03-10T19:37:28Z</time>
+</trkpt>
+<trkpt lat="40.238349950" lon="-74.667213300">
+ <ele>24.299999</ele>
+<time>2007-03-10T19:37:29Z</time>
+</trkpt>
+<trkpt lat="40.238361650" lon="-74.667196600">
+ <ele>25.400000</ele>
+<time>2007-03-10T19:37:30Z</time>
+</trkpt>
+<trkpt lat="40.238378300" lon="-74.667183300">
+ <ele>25.400000</ele>
+<time>2007-03-10T19:37:31Z</time>
+</trkpt>
+<trkpt lat="40.238375000" lon="-74.667165000">
+ <ele>25.100000</ele>
+<time>2007-03-10T19:37:32Z</time>
+</trkpt>
+<trkpt lat="40.238386650" lon="-74.667156600">
+ <ele>26.000000</ele>
+<time>2007-03-10T19:37:33Z</time>
+</trkpt>
+<trkpt lat="40.238383300" lon="-74.667138300">
+ <ele>26.900000</ele>
+<time>2007-03-10T19:37:34Z</time>
+</trkpt>
+<trkpt lat="40.238390000" lon="-74.667120000">
+ <ele>28.200001</ele>
+<time>2007-03-10T19:37:35Z</time>
+</trkpt>
+<trkpt lat="40.238393300" lon="-74.667058300">
+ <ele>28.200001</ele>
+<time>2007-03-10T19:37:38Z</time>
+</trkpt>
+<trkpt lat="40.238405000" lon="-74.667036600">
+ <ele>33.599998</ele>
+<time>2007-03-10T19:37:39Z</time>
+</trkpt>
+<trkpt lat="40.238416650" lon="-74.667015000">
+ <ele>34.599998</ele>
+<time>2007-03-10T19:37:40Z</time>
+</trkpt>
+<trkpt lat="40.238421650" lon="-74.666995000">
+ <ele>34.500000</ele>
+<time>2007-03-10T19:37:41Z</time>
+</trkpt>
+<trkpt lat="40.238505000" lon="-74.666901600">
+ <ele>34.200001</ele>
+<time>2007-03-10T19:37:47Z</time>
+</trkpt>
+<trkpt lat="40.238518300" lon="-74.666886600">
+ <ele>33.799999</ele>
+<time>2007-03-10T19:37:48Z</time>
+</trkpt>
+<trkpt lat="40.238526650" lon="-74.666871600">
+ <ele>33.400002</ele>
+<time>2007-03-10T19:37:49Z</time>
+</trkpt>
+<trkpt lat="40.238531650" lon="-74.666856600">
+ <ele>32.299999</ele>
+<time>2007-03-10T19:37:50Z</time>
+</trkpt>
+<trkpt lat="40.238540000" lon="-74.666828300">
+ <ele>32.299999</ele>
+<time>2007-03-10T19:37:52Z</time>
+</trkpt>
+<trkpt lat="40.238548300" lon="-74.666815000">
+ <ele>31.400000</ele>
+<time>2007-03-10T19:37:53Z</time>
+</trkpt>
+<trkpt lat="40.238563300" lon="-74.666801600">
+ <ele>30.600000</ele>
+<time>2007-03-10T19:37:54Z</time>
+</trkpt>
+<trkpt lat="40.238580000" lon="-74.666788300">
+ <ele>30.799999</ele>
+<time>2007-03-10T19:37:55Z</time>
+</trkpt>
+<trkpt lat="40.238615000" lon="-74.666708300">
+ <ele>29.799999</ele>
+<time>2007-03-10T19:37:59Z</time>
+</trkpt>
+<trkpt lat="40.238620000" lon="-74.666691600">
+ <ele>28.900000</ele>
+<time>2007-03-10T19:38:00Z</time>
+</trkpt>
+<trkpt lat="40.238626650" lon="-74.666670000">
+ <ele>28.000000</ele>
+<time>2007-03-10T19:38:01Z</time>
+</trkpt>
+<trkpt lat="40.238688300" lon="-74.666616600">
+ <ele>23.400000</ele>
+<time>2007-03-10T19:38:06Z</time>
+</trkpt>
+<trkpt lat="40.238695000" lon="-74.666611600">
+ <ele>23.100000</ele>
+<time>2007-03-10T19:38:07Z</time>
+</trkpt>
+<trkpt lat="40.238700000" lon="-74.666608300">
+ <ele>22.500000</ele>
+<time>2007-03-10T19:38:08Z</time>
+</trkpt>
+<trkpt lat="40.238713300" lon="-74.666603300">
+ <ele>21.799999</ele>
+<time>2007-03-10T19:38:09Z</time>
+</trkpt>
+<trkpt lat="40.238770000" lon="-74.666586600">
+ <ele>20.500000</ele>
+<time>2007-03-10T19:38:12Z</time>
+</trkpt>
+<trkpt lat="40.238780000" lon="-74.666575000">
+ <ele>19.900000</ele>
+<time>2007-03-10T19:38:13Z</time>
+</trkpt>
+<trkpt lat="40.238790000" lon="-74.666560000">
+ <ele>20.000000</ele>
+<time>2007-03-10T19:38:14Z</time>
+</trkpt>
+<trkpt lat="40.238793300" lon="-74.666545000">
+ <ele>19.200001</ele>
+<time>2007-03-10T19:38:15Z</time>
+</trkpt>
+<trkpt lat="40.238870000" lon="-74.666418300">
+ <ele>19.200001</ele>
+<time>2007-03-10T19:38:22Z</time>
+</trkpt>
+<trkpt lat="40.238876650" lon="-74.666405000">
+ <ele>18.000000</ele>
+<time>2007-03-10T19:38:23Z</time>
+</trkpt>
+<trkpt lat="40.238893300" lon="-74.666398300">
+ <ele>18.299999</ele>
+<time>2007-03-10T19:38:24Z</time>
+</trkpt>
+<trkpt lat="40.238910000" lon="-74.666383300">
+ <ele>18.200001</ele>
+<time>2007-03-10T19:38:25Z</time>
+</trkpt>
+<trkpt lat="40.238975000" lon="-74.666313300">
+ <ele>18.200001</ele>
+<time>2007-03-10T19:38:31Z</time>
+</trkpt>
+<trkpt lat="40.238981650" lon="-74.666303300">
+ <ele>19.500000</ele>
+<time>2007-03-10T19:38:32Z</time>
+</trkpt>
+<trkpt lat="40.238990000" lon="-74.666300000">
+ <ele>19.000000</ele>
+<time>2007-03-10T19:38:33Z</time>
+</trkpt>
+<trkpt lat="40.238991650" lon="-74.666296600">
+ <ele>19.200001</ele>
+<time>2007-03-10T19:38:34Z</time>
+</trkpt>
+<trkpt lat="40.238988300" lon="-74.666288300">
+ <ele>19.400000</ele>
+<time>2007-03-10T19:38:35Z</time>
+</trkpt>
+<trkpt lat="40.239000000" lon="-74.666261600">
+ <ele>19.400000</ele>
+<time>2007-03-10T19:38:39Z</time>
+</trkpt>
+<trkpt lat="40.239018300" lon="-74.666260000">
+ <ele>23.100000</ele>
+<time>2007-03-10T19:38:40Z</time>
+</trkpt>
+<trkpt lat="40.239019950" lon="-74.666250000">
+ <ele>23.000000</ele>
+<time>2007-03-10T19:38:41Z</time>
+</trkpt>
+<trkpt lat="40.239043300" lon="-74.666245000">
+ <ele>23.900000</ele>
+<time>2007-03-10T19:38:42Z</time>
+</trkpt>
+<trkpt lat="40.239135000" lon="-74.666138300">
+ <ele>23.900000</ele>
+<time>2007-03-10T19:38:50Z</time>
+</trkpt>
+<trkpt lat="40.239160000" lon="-74.666130000">
+ <ele>28.299999</ele>
+<time>2007-03-10T19:38:51Z</time>
+</trkpt>
+<trkpt lat="40.239175000" lon="-74.666121600">
+ <ele>28.000000</ele>
+<time>2007-03-10T19:38:52Z</time>
+</trkpt>
+<trkpt lat="40.239191650" lon="-74.666115000">
+ <ele>27.299999</ele>
+<time>2007-03-10T19:38:53Z</time>
+</trkpt>
+<trkpt lat="40.239248300" lon="-74.666068300">
+ <ele>27.299999</ele>
+<time>2007-03-10T19:38:56Z</time>
+</trkpt>
+<trkpt lat="40.239255000" lon="-74.666046600">
+ <ele>24.700001</ele>
+<time>2007-03-10T19:38:57Z</time>
+</trkpt>
+<trkpt lat="40.239275000" lon="-74.666034900">
+ <ele>25.100000</ele>
+<time>2007-03-10T19:38:58Z</time>
+</trkpt>
+<trkpt lat="40.239286650" lon="-74.666018300">
+ <ele>25.000000</ele>
+<time>2007-03-10T19:38:59Z</time>
+</trkpt>
+<trkpt lat="40.239305000" lon="-74.666001600">
+ <ele>25.400000</ele>
+<time>2007-03-10T19:39:00Z</time>
+</trkpt>
+<trkpt lat="40.239368300" lon="-74.665906600">
+ <ele>25.400000</ele>
+<time>2007-03-10T19:39:05Z</time>
+</trkpt>
+<trkpt lat="40.239370000" lon="-74.665888300">
+ <ele>23.799999</ele>
+<time>2007-03-10T19:39:06Z</time>
+</trkpt>
+<trkpt lat="40.239380000" lon="-74.665878300">
+ <ele>22.900000</ele>
+<time>2007-03-10T19:39:07Z</time>
+</trkpt>
+<trkpt lat="40.239386650" lon="-74.665868300">
+ <ele>23.100000</ele>
+<time>2007-03-10T19:39:08Z</time>
+</trkpt>
+<trkpt lat="40.239390000" lon="-74.665853300">
+ <ele>23.000000</ele>
+<time>2007-03-10T19:39:09Z</time>
+</trkpt>
+<trkpt lat="40.239405000" lon="-74.665836600">
+ <ele>23.000000</ele>
+<time>2007-03-10T19:39:12Z</time>
+</trkpt>
+<trkpt lat="40.239406650" lon="-74.665826600">
+ <ele>24.400000</ele>
+<time>2007-03-10T19:39:13Z</time>
+</trkpt>
+<trkpt lat="40.239411650" lon="-74.665818300">
+ <ele>24.299999</ele>
+<time>2007-03-10T19:39:14Z</time>
+</trkpt>
+<trkpt lat="40.239418300" lon="-74.665813300">
+ <ele>24.600000</ele>
+<time>2007-03-10T19:39:15Z</time>
+</trkpt>
+<trkpt lat="40.239486650" lon="-74.665735000">
+ <ele>26.400000</ele>
+<time>2007-03-10T19:39:22Z</time>
+</trkpt>
+<trkpt lat="40.239486650" lon="-74.665718300">
+ <ele>26.000000</ele>
+<time>2007-03-10T19:39:23Z</time>
+</trkpt>
+<trkpt lat="40.239490000" lon="-74.665695000">
+ <ele>25.000000</ele>
+<time>2007-03-10T19:39:24Z</time>
+</trkpt>
+<trkpt lat="40.239500000" lon="-74.665673300">
+ <ele>24.900000</ele>
+<time>2007-03-10T19:39:25Z</time>
+</trkpt>
+<trkpt lat="40.239570000" lon="-74.665620000">
+ <ele>24.900000</ele>
+<time>2007-03-10T19:39:29Z</time>
+</trkpt>
+<trkpt lat="40.239578300" lon="-74.665611600">
+ <ele>24.900000</ele>
+<time>2007-03-10T19:39:30Z</time>
+</trkpt>
+<trkpt lat="40.239590000" lon="-74.665603300">
+ <ele>25.100000</ele>
+<time>2007-03-10T19:39:31Z</time>
+</trkpt>
+<trkpt lat="40.239633300" lon="-74.665580000">
+ <ele>25.100000</ele>
+<time>2007-03-10T19:39:34Z</time>
+</trkpt>
+<trkpt lat="40.239646650" lon="-74.665563300">
+ <ele>25.799999</ele>
+<time>2007-03-10T19:39:35Z</time>
+</trkpt>
+<trkpt lat="40.239655000" lon="-74.665553300">
+ <ele>26.200001</ele>
+<time>2007-03-10T19:39:36Z</time>
+</trkpt>
+<trkpt lat="40.239669950" lon="-74.665548300">
+ <ele>26.600000</ele>
+<time>2007-03-10T19:39:37Z</time>
+</trkpt>
+<trkpt lat="40.239708300" lon="-74.665518300">
+ <ele>26.600000</ele>
+<time>2007-03-10T19:39:41Z</time>
+</trkpt>
+<trkpt lat="40.239716650" lon="-74.665511600">
+ <ele>26.900000</ele>
+<time>2007-03-10T19:39:42Z</time>
+</trkpt>
+<trkpt lat="40.239726650" lon="-74.665508300">
+ <ele>27.100000</ele>
+<time>2007-03-10T19:39:43Z</time>
+</trkpt>
+<trkpt lat="40.239731650" lon="-74.665498300">
+ <ele>26.400000</ele>
+<time>2007-03-10T19:39:44Z</time>
+</trkpt>
+<trkpt lat="40.239735000" lon="-74.665443300">
+ <ele>25.400000</ele>
+<time>2007-03-10T19:39:47Z</time>
+</trkpt>
+<trkpt lat="40.239740000" lon="-74.665430000">
+ <ele>25.400000</ele>
+<time>2007-03-10T19:39:48Z</time>
+</trkpt>
+<trkpt lat="40.239743300" lon="-74.665415000">
+ <ele>25.299999</ele>
+<time>2007-03-10T19:39:49Z</time>
+</trkpt>
+<trkpt lat="40.239746650" lon="-74.665403300">
+ <ele>26.100000</ele>
+<time>2007-03-10T19:39:50Z</time>
+</trkpt>
+<trkpt lat="40.239770000" lon="-74.665423300">
+ <ele>27.500000</ele>
+<time>2007-03-10T19:39:54Z</time>
+</trkpt>
+<trkpt lat="40.239771650" lon="-74.665440000">
+ <ele>28.100000</ele>
+<time>2007-03-10T19:39:55Z</time>
+</trkpt>
+<trkpt lat="40.239776650" lon="-74.665460000">
+ <ele>28.500000</ele>
+<time>2007-03-10T19:39:56Z</time>
+</trkpt>
+<trkpt lat="40.239843300" lon="-74.665643300">
+ <ele>28.500000</ele>
+<time>2007-03-10T19:40:03Z</time>
+</trkpt>
+<trkpt lat="40.239856650" lon="-74.665661600">
+ <ele>35.299999</ele>
+<time>2007-03-10T19:40:04Z</time>
+</trkpt>
+<trkpt lat="40.239868300" lon="-74.665674900">
+ <ele>36.900002</ele>
+<time>2007-03-10T19:40:05Z</time>
+</trkpt>
+<trkpt lat="40.239868300" lon="-74.665686600">
+ <ele>36.700001</ele>
+<time>2007-03-10T19:40:06Z</time>
+</trkpt>
+<trkpt lat="40.239908300" lon="-74.665741600">
+ <ele>36.700001</ele>
+<time>2007-03-10T19:40:11Z</time>
+</trkpt>
+<trkpt lat="40.239910000" lon="-74.665755000">
+ <ele>38.400002</ele>
+<time>2007-03-10T19:40:12Z</time>
+</trkpt>
+<trkpt lat="40.239916650" lon="-74.665766600">
+ <ele>38.599998</ele>
+<time>2007-03-10T19:40:13Z</time>
+</trkpt>
+<trkpt lat="40.239926650" lon="-74.665775000">
+ <ele>38.599998</ele>
+<time>2007-03-10T19:40:14Z</time>
+</trkpt>
+<trkpt lat="40.239931650" lon="-74.665783300">
+ <ele>38.599998</ele>
+<time>2007-03-10T19:40:15Z</time>
+</trkpt>
+<trkpt lat="40.239976650" lon="-74.665890000">
+ <ele>38.599998</ele>
+<time>2007-03-10T19:40:22Z</time>
+</trkpt>
+<trkpt lat="40.239983300" lon="-74.665908300">
+ <ele>38.900002</ele>
+<time>2007-03-10T19:40:23Z</time>
+</trkpt>
+<trkpt lat="40.239976650" lon="-74.665915000">
+ <ele>38.299999</ele>
+<time>2007-03-10T19:40:24Z</time>
+</trkpt>
+<trkpt lat="40.239983300" lon="-74.665931600">
+ <ele>38.700001</ele>
+<time>2007-03-10T19:40:25Z</time>
+</trkpt>
+<trkpt lat="40.240011650" lon="-74.665995000">
+ <ele>38.700001</ele>
+<time>2007-03-10T19:40:31Z</time>
+</trkpt>
+<trkpt lat="40.240025000" lon="-74.665998300">
+ <ele>38.200001</ele>
+<time>2007-03-10T19:40:32Z</time>
+</trkpt>
+<trkpt lat="40.240038300" lon="-74.666000000">
+ <ele>37.700001</ele>
+<time>2007-03-10T19:40:33Z</time>
+</trkpt>
+<trkpt lat="40.240049950" lon="-74.666011600">
+ <ele>37.599998</ele>
+<time>2007-03-10T19:40:34Z</time>
+</trkpt>
+<trkpt lat="40.240168300" lon="-74.666124900">
+ <ele>37.599998</ele>
+<time>2007-03-10T19:40:41Z</time>
+</trkpt>
+<trkpt lat="40.240184950" lon="-74.666138300">
+ <ele>37.500000</ele>
+<time>2007-03-10T19:40:42Z</time>
+</trkpt>
+<trkpt lat="40.240255000" lon="-74.666176600">
+ <ele>37.500000</ele>
+<time>2007-03-10T19:40:45Z</time>
+</trkpt>
+<trkpt lat="40.240268300" lon="-74.666180000">
+ <ele>35.799999</ele>
+<time>2007-03-10T19:40:46Z</time>
+</trkpt>
+<trkpt lat="40.240280000" lon="-74.666181600">
+ <ele>34.599998</ele>
+<time>2007-03-10T19:40:47Z</time>
+</trkpt>
+<trkpt lat="40.240326650" lon="-74.666211600">
+ <ele>34.599998</ele>
+<time>2007-03-10T19:40:51Z</time>
+</trkpt>
+<trkpt lat="40.240338300" lon="-74.666218300">
+ <ele>34.900002</ele>
+<time>2007-03-10T19:40:52Z</time>
+</trkpt>
+<trkpt lat="40.240350000" lon="-74.666228300">
+ <ele>35.400002</ele>
+<time>2007-03-10T19:40:53Z</time>
+</trkpt>
+<trkpt lat="40.240355000" lon="-74.666233300">
+ <ele>36.000000</ele>
+<time>2007-03-10T19:40:54Z</time>
+</trkpt>
+<trkpt lat="40.240361650" lon="-74.666241600">
+ <ele>36.599998</ele>
+<time>2007-03-10T19:40:55Z</time>
+</trkpt>
+</trkseg>
+</trk>
+</gpx>
<?xml version="1.0" encoding="UTF-8"?>
<gpx
- version="1.0"
+ version="1.1"
creator="GPSBabel - http://www.gpsbabel.org"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-xmlns="http://www.topografix.com/GPX/1/0"
-xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">
+xmlns="http://www.topografix.com/GPX/1/1"
+xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">
+<metadata>
<time>1970-01-01T00:00:00Z</time>
<bounds minlat="42.401051000" minlon="-71.126602000" maxlat="42.468655000" maxlon="-71.102973000"/>
+</metadata>
<rte>
<rtept lat="42.438878000" lon="-71.119277000">
<ele>44.586548</ele>
<?xml version="1.0" encoding="UTF-8"?>
<gpx
- version="1.0"
+ version="1.1"
creator="GPSBabel - http://www.gpsbabel.org"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-xmlns="http://www.topografix.com/GPX/1/0"
-xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">
+xmlns="http://www.topografix.com/GPX/1/1"
+xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">
+<metadata>
<time>1970-01-01T00:00:00Z</time>
<bounds minlat="42.430950000" minlon="-71.122845000" maxlat="42.467110000" maxlon="-71.105116000"/>
+</metadata>
<wpt lat="42.430950000" lon="-71.107628000">
<ele>23.469600</ele>
<time>2001-06-02T00:18:15Z</time>
<bounds minlat="54.785117200" minlon="-2.345095800" maxlat="54.787984800" maxlon="-2.342500800"/>
<trk>
<trkseg>
+<trkpt lat="54.786894200" lon="-2.344305400">
+ <name>TP0001</name>
+</trkpt>
<trkpt lat="54.786918600" lon="-2.344296200">
- <name>WP0001</name>
+ <name>TP0002</name>
</trkpt>
<trkpt lat="54.786917800" lon="-2.344315400">
- <name>WP0002</name>
+ <name>TP0003</name>
</trkpt>
<trkpt lat="54.786918500" lon="-2.344317400">
- <name>WP0003</name>
+ <name>TP0004</name>
</trkpt>
<trkpt lat="54.786921300" lon="-2.344313000">
- <name>WP0004</name>
+ <name>TP0005</name>
</trkpt>
<trkpt lat="54.786923900" lon="-2.344310300">
- <name>WP0005</name>
+ <name>TP0006</name>
</trkpt>
<trkpt lat="54.786926200" lon="-2.344311600">
- <name>WP0006</name>
+ <name>TP0007</name>
</trkpt>
<trkpt lat="54.786925900" lon="-2.344315900">
- <name>WP0007</name>
+ <name>TP0008</name>
</trkpt>
<trkpt lat="54.786924000" lon="-2.344320400">
- <name>WP0008</name>
+ <name>TP0009</name>
</trkpt>
<trkpt lat="54.786922100" lon="-2.344322900">
- <name>WP0009</name>
+ <name>TP0010</name>
</trkpt>
<trkpt lat="54.786919800" lon="-2.344325500">
- <name>WP0010</name>
+ <name>TP0011</name>
</trkpt>
<trkpt lat="54.786917100" lon="-2.344328300">
- <name>WP0011</name>
+ <name>TP0012</name>
</trkpt>
<trkpt lat="54.786913900" lon="-2.344332500">
- <name>WP0012</name>
+ <name>TP0013</name>
</trkpt>
<trkpt lat="54.786910500" lon="-2.344337100">
- <name>WP0013</name>
+ <name>TP0014</name>
</trkpt>
<trkpt lat="54.786907000" lon="-2.344341500">
- <name>WP0014</name>
+ <name>TP0015</name>
</trkpt>
<trkpt lat="54.786904000" lon="-2.344345500">
- <name>WP0015</name>
+ <name>TP0016</name>
</trkpt>
<trkpt lat="54.786901500" lon="-2.344348100">
- <name>WP0016</name>
+ <name>TP0017</name>
</trkpt>
<trkpt lat="54.786899100" lon="-2.344349500">
- <name>WP0017</name>
+ <name>TP0018</name>
</trkpt>
<trkpt lat="54.786896800" lon="-2.344349800">
- <name>WP0018</name>
+ <name>TP0019</name>
</trkpt>
<trkpt lat="54.786894700" lon="-2.344350500">
- <name>WP0019</name>
+ <name>TP0020</name>
</trkpt>
<trkpt lat="54.786893000" lon="-2.344352300">
- <name>WP0020</name>
+ <name>TP0021</name>
</trkpt>
<trkpt lat="54.786891400" lon="-2.344354300">
- <name>WP0021</name>
+ <name>TP0022</name>
</trkpt>
<trkpt lat="54.786889700" lon="-2.344355900">
- <name>WP0022</name>
+ <name>TP0023</name>
</trkpt>
<trkpt lat="54.786888400" lon="-2.344356700">
- <name>WP0023</name>
+ <name>TP0024</name>
</trkpt>
<trkpt lat="54.786887400" lon="-2.344356700">
- <name>WP0024</name>
+ <name>TP0025</name>
</trkpt>
<trkpt lat="54.786886600" lon="-2.344357000">
- <name>WP0025</name>
+ <name>TP0026</name>
</trkpt>
<trkpt lat="54.786886000" lon="-2.344357200">
- <name>WP0026</name>
+ <name>TP0027</name>
</trkpt>
<trkpt lat="54.786885400" lon="-2.344357400">
- <name>WP0027</name>
+ <name>TP0028</name>
</trkpt>
<trkpt lat="54.786884900" lon="-2.344356900">
- <name>WP0028</name>
+ <name>TP0029</name>
</trkpt>
<trkpt lat="54.786884800" lon="-2.344356300">
- <name>WP0029</name>
+ <name>TP0030</name>
</trkpt>
<trkpt lat="54.786877300" lon="-2.344355400">
- <name>WP0030</name>
+ <name>TP0031</name>
</trkpt>
<trkpt lat="54.786875900" lon="-2.344370000">
- <name>WP0031</name>
+ <name>TP0032</name>
</trkpt>
<trkpt lat="54.786883500" lon="-2.344370000">
- <name>WP0032</name>
+ <name>TP0033</name>
</trkpt>
<trkpt lat="54.786881400" lon="-2.344368600">
- <name>WP0033</name>
+ <name>TP0034</name>
</trkpt>
<trkpt lat="54.786878700" lon="-2.344367600">
- <name>WP0034</name>
+ <name>TP0035</name>
</trkpt>
<trkpt lat="54.786876400" lon="-2.344365300">
- <name>WP0035</name>
+ <name>TP0036</name>
</trkpt>
<trkpt lat="54.786877400" lon="-2.344361000">
- <name>WP0036</name>
+ <name>TP0037</name>
</trkpt>
<trkpt lat="54.786939600" lon="-2.344332500">
- <name>WP0037</name>
+ <name>TP0038</name>
</trkpt>
<trkpt lat="54.787010100" lon="-2.344387100">
- <name>WP0038</name>
+ <name>TP0039</name>
</trkpt>
<trkpt lat="54.787079800" lon="-2.344423000">
- <name>WP0039</name>
+ <name>TP0040</name>
</trkpt>
<trkpt lat="54.787159200" lon="-2.344461600">
- <name>WP0040</name>
+ <name>TP0041</name>
</trkpt>
<trkpt lat="54.787268800" lon="-2.344447800">
- <name>WP0041</name>
+ <name>TP0042</name>
</trkpt>
<trkpt lat="54.787316800" lon="-2.344428600">
- <name>WP0042</name>
+ <name>TP0043</name>
</trkpt>
<trkpt lat="54.787358600" lon="-2.344494600">
- <name>WP0043</name>
+ <name>TP0044</name>
</trkpt>
<trkpt lat="54.787398000" lon="-2.344587300">
- <name>WP0044</name>
+ <name>TP0045</name>
</trkpt>
<trkpt lat="54.787446000" lon="-2.344635900">
- <name>WP0045</name>
+ <name>TP0046</name>
</trkpt>
<trkpt lat="54.787489200" lon="-2.344701500">
- <name>WP0046</name>
+ <name>TP0047</name>
</trkpt>
<trkpt lat="54.787536100" lon="-2.344777300">
- <name>WP0047</name>
+ <name>TP0048</name>
</trkpt>
<trkpt lat="54.787576800" lon="-2.344848600">
- <name>WP0048</name>
+ <name>TP0049</name>
</trkpt>
<trkpt lat="54.787619000" lon="-2.344905600">
- <name>WP0049</name>
+ <name>TP0050</name>
</trkpt>
<trkpt lat="54.787654600" lon="-2.344976100">
- <name>WP0050</name>
+ <name>TP0051</name>
</trkpt>
<trkpt lat="54.787706000" lon="-2.345057400">
- <name>WP0051</name>
+ <name>TP0052</name>
</trkpt>
<trkpt lat="54.787704600" lon="-2.345093500">
- <name>WP0052</name>
+ <name>TP0053</name>
</trkpt>
<trkpt lat="54.787650000" lon="-2.345038300">
- <name>WP0053</name>
+ <name>TP0054</name>
</trkpt>
<trkpt lat="54.787599300" lon="-2.344979500">
- <name>WP0054</name>
+ <name>TP0055</name>
</trkpt>
<trkpt lat="54.787556600" lon="-2.344911400">
- <name>WP0055</name>
+ <name>TP0056</name>
</trkpt>
<trkpt lat="54.787516700" lon="-2.344837400">
- <name>WP0056</name>
+ <name>TP0057</name>
</trkpt>
<trkpt lat="54.787474300" lon="-2.344746700">
- <name>WP0057</name>
+ <name>TP0058</name>
</trkpt>
<trkpt lat="54.787424700" lon="-2.344667700">
- <name>WP0058</name>
+ <name>TP0059</name>
</trkpt>
<trkpt lat="54.787376900" lon="-2.344594500">
- <name>WP0059</name>
+ <name>TP0060</name>
</trkpt>
<trkpt lat="54.787337800" lon="-2.344539200">
- <name>WP0060</name>
+ <name>TP0061</name>
</trkpt>
<trkpt lat="54.787292000" lon="-2.344480900">
- <name>WP0061</name>
+ <name>TP0062</name>
</trkpt>
<trkpt lat="54.787233600" lon="-2.344424200">
- <name>WP0062</name>
+ <name>TP0063</name>
</trkpt>
<trkpt lat="54.787188100" lon="-2.344418700">
- <name>WP0063</name>
+ <name>TP0064</name>
</trkpt>
<trkpt lat="54.787137900" lon="-2.344400400">
- <name>WP0064</name>
+ <name>TP0065</name>
</trkpt>
<trkpt lat="54.787093100" lon="-2.344371800">
- <name>WP0065</name>
+ <name>TP0066</name>
</trkpt>
<trkpt lat="54.787020700" lon="-2.344353100">
- <name>WP0066</name>
+ <name>TP0067</name>
</trkpt>
<trkpt lat="54.786968300" lon="-2.344298000">
- <name>WP0067</name>
+ <name>TP0068</name>
</trkpt>
<trkpt lat="54.786953700" lon="-2.344270600">
- <name>WP0068</name>
+ <name>TP0069</name>
</trkpt>
<trkpt lat="54.786928100" lon="-2.344276200">
- <name>WP0069</name>
+ <name>TP0070</name>
</trkpt>
<trkpt lat="54.786947500" lon="-2.344239500">
- <name>WP0070</name>
+ <name>TP0071</name>
</trkpt>
<trkpt lat="54.786874000" lon="-2.344211000">
- <name>WP0071</name>
+ <name>TP0072</name>
</trkpt>
<trkpt lat="54.786889500" lon="-2.344175300">
- <name>WP0072</name>
+ <name>TP0073</name>
</trkpt>
<trkpt lat="54.786905700" lon="-2.344154600">
- <name>WP0073</name>
+ <name>TP0074</name>
</trkpt>
<trkpt lat="54.786887300" lon="-2.344152700">
- <name>WP0074</name>
+ <name>TP0075</name>
</trkpt>
<trkpt lat="54.786967100" lon="-2.344200300">
- <name>WP0075</name>
+ <name>TP0076</name>
</trkpt>
<trkpt lat="54.786950400" lon="-2.344192500">
- <name>WP0076</name>
+ <name>TP0077</name>
</trkpt>
<trkpt lat="54.786550600" lon="-2.344644800">
- <name>WP0077</name>
+ <name>TP0078</name>
</trkpt>
<trkpt lat="54.786423800" lon="-2.344905900">
- <name>WP0078</name>
+ <name>TP0079</name>
</trkpt>
<trkpt lat="54.786339400" lon="-2.344960500">
- <name>WP0079</name>
+ <name>TP0080</name>
</trkpt>
<trkpt lat="54.786129600" lon="-2.345095800">
- <name>WP0080</name>
+ <name>TP0081</name>
</trkpt>
<trkpt lat="54.786113000" lon="-2.345044900">
- <name>WP0081</name>
+ <name>TP0082</name>
</trkpt>
<trkpt lat="54.786210000" lon="-2.344944400">
- <name>WP0082</name>
+ <name>TP0083</name>
</trkpt>
<trkpt lat="54.786279400" lon="-2.344882300">
- <name>WP0083</name>
+ <name>TP0084</name>
</trkpt>
<trkpt lat="54.786328600" lon="-2.344835700">
- <name>WP0084</name>
+ <name>TP0085</name>
</trkpt>
<trkpt lat="54.786377000" lon="-2.344791200">
- <name>WP0085</name>
+ <name>TP0086</name>
</trkpt>
<trkpt lat="54.786418000" lon="-2.344751600">
- <name>WP0086</name>
+ <name>TP0087</name>
</trkpt>
<trkpt lat="54.786450500" lon="-2.344721800">
- <name>WP0087</name>
+ <name>TP0088</name>
</trkpt>
<trkpt lat="54.786480100" lon="-2.344698000">
- <name>WP0088</name>
+ <name>TP0089</name>
</trkpt>
<trkpt lat="54.786506500" lon="-2.344674100">
- <name>WP0089</name>
+ <name>TP0090</name>
</trkpt>
<trkpt lat="54.786529400" lon="-2.344655300">
- <name>WP0090</name>
+ <name>TP0091</name>
</trkpt>
<trkpt lat="54.786550300" lon="-2.344636900">
- <name>WP0091</name>
+ <name>TP0092</name>
</trkpt>
<trkpt lat="54.786568700" lon="-2.344621400">
- <name>WP0092</name>
+ <name>TP0093</name>
</trkpt>
<trkpt lat="54.786586200" lon="-2.344606000">
- <name>WP0093</name>
+ <name>TP0094</name>
</trkpt>
<trkpt lat="54.786601800" lon="-2.344590800">
- <name>WP0094</name>
+ <name>TP0095</name>
</trkpt>
<trkpt lat="54.786616000" lon="-2.344576900">
- <name>WP0095</name>
+ <name>TP0096</name>
</trkpt>
<trkpt lat="54.786630100" lon="-2.344563400">
- <name>WP0096</name>
+ <name>TP0097</name>
</trkpt>
<trkpt lat="54.786643500" lon="-2.344550500">
- <name>WP0097</name>
+ <name>TP0098</name>
</trkpt>
<trkpt lat="54.786656400" lon="-2.344538400">
- <name>WP0098</name>
+ <name>TP0099</name>
</trkpt>
<trkpt lat="54.786712800" lon="-2.344309700">
- <name>WP0099</name>
+ <name>TP0100</name>
</trkpt>
<trkpt lat="54.786421700" lon="-2.344238300">
- <name>WP0100</name>
+ <name>TP0101</name>
</trkpt>
<trkpt lat="54.786106300" lon="-2.344361100">
- <name>WP0101</name>
+ <name>TP0102</name>
</trkpt>
<trkpt lat="54.785876000" lon="-2.344429400">
- <name>WP0102</name>
+ <name>TP0103</name>
</trkpt>
<trkpt lat="54.785637300" lon="-2.344343800">
- <name>WP0103</name>
+ <name>TP0104</name>
</trkpt>
<trkpt lat="54.785565000" lon="-2.344340400">
- <name>WP0104</name>
+ <name>TP0105</name>
</trkpt>
<trkpt lat="54.785501100" lon="-2.344222400">
- <name>WP0105</name>
+ <name>TP0106</name>
</trkpt>
<trkpt lat="54.785521000" lon="-2.344218800">
- <name>WP0106</name>
+ <name>TP0107</name>
</trkpt>
<trkpt lat="54.785462300" lon="-2.344312400">
- <name>WP0107</name>
+ <name>TP0108</name>
</trkpt>
<trkpt lat="54.785276400" lon="-2.344252900">
- <name>WP0108</name>
+ <name>TP0109</name>
</trkpt>
<trkpt lat="54.785179600" lon="-2.344116300">
- <name>WP0109</name>
+ <name>TP0110</name>
</trkpt>
<trkpt lat="54.785117200" lon="-2.344006700">
- <name>WP0110</name>
+ <name>TP0111</name>
</trkpt>
<trkpt lat="54.785218000" lon="-2.344177300">
- <name>WP0111</name>
+ <name>TP0112</name>
</trkpt>
<trkpt lat="54.785293900" lon="-2.344022300">
- <name>WP0112</name>
+ <name>TP0113</name>
</trkpt>
<trkpt lat="54.785521400" lon="-2.344255100">
- <name>WP0113</name>
+ <name>TP0114</name>
</trkpt>
<trkpt lat="54.785671200" lon="-2.344188200">
- <name>WP0114</name>
+ <name>TP0115</name>
</trkpt>
<trkpt lat="54.785927500" lon="-2.344016000">
- <name>WP0115</name>
+ <name>TP0116</name>
</trkpt>
<trkpt lat="54.786170000" lon="-2.344095900">
- <name>WP0116</name>
+ <name>TP0117</name>
</trkpt>
<trkpt lat="54.786300400" lon="-2.344209100">
- <name>WP0117</name>
+ <name>TP0118</name>
</trkpt>
<trkpt lat="54.786436200" lon="-2.344380400">
- <name>WP0118</name>
+ <name>TP0119</name>
</trkpt>
<trkpt lat="54.786480200" lon="-2.344508600">
- <name>WP0119</name>
+ <name>TP0120</name>
</trkpt>
<trkpt lat="54.786509900" lon="-2.344486200">
- <name>WP0120</name>
+ <name>TP0121</name>
</trkpt>
<trkpt lat="54.786535000" lon="-2.344489800">
- <name>WP0121</name>
+ <name>TP0122</name>
</trkpt>
<trkpt lat="54.786657100" lon="-2.344486000">
- <name>WP0122</name>
+ <name>TP0123</name>
</trkpt>
<trkpt lat="54.786667100" lon="-2.344606900">
- <name>WP0123</name>
+ <name>TP0124</name>
</trkpt>
<trkpt lat="54.786687600" lon="-2.344578700">
- <name>WP0124</name>
+ <name>TP0125</name>
</trkpt>
<trkpt lat="54.786707600" lon="-2.344565300">
- <name>WP0125</name>
+ <name>TP0126</name>
</trkpt>
<trkpt lat="54.786715700" lon="-2.344577800">
- <name>WP0126</name>
+ <name>TP0127</name>
</trkpt>
<trkpt lat="54.786721300" lon="-2.344563900">
- <name>WP0127</name>
+ <name>TP0128</name>
</trkpt>
<trkpt lat="54.786725800" lon="-2.344570900">
- <name>WP0128</name>
+ <name>TP0129</name>
</trkpt>
<trkpt lat="54.786755500" lon="-2.344623600">
- <name>WP0129</name>
+ <name>TP0130</name>
</trkpt>
<trkpt lat="54.786780200" lon="-2.344553000">
- <name>WP0130</name>
+ <name>TP0131</name>
</trkpt>
<trkpt lat="54.786783900" lon="-2.344515800">
- <name>WP0131</name>
+ <name>TP0132</name>
</trkpt>
<trkpt lat="54.786801900" lon="-2.344472200">
- <name>WP0132</name>
+ <name>TP0133</name>
</trkpt>
<trkpt lat="54.786801800" lon="-2.344466100">
- <name>WP0133</name>
+ <name>TP0134</name>
</trkpt>
<trkpt lat="54.786801300" lon="-2.344469800">
- <name>WP0134</name>
+ <name>TP0135</name>
</trkpt>
<trkpt lat="54.786803700" lon="-2.344463600">
- <name>WP0135</name>
+ <name>TP0136</name>
</trkpt>
<trkpt lat="54.786806400" lon="-2.344457400">
- <name>WP0136</name>
+ <name>TP0137</name>
</trkpt>
<trkpt lat="54.786808300" lon="-2.344454200">
- <name>WP0137</name>
+ <name>TP0138</name>
</trkpt>
<trkpt lat="54.786809100" lon="-2.344457100">
- <name>WP0138</name>
+ <name>TP0139</name>
</trkpt>
<trkpt lat="54.786811800" lon="-2.344452300">
- <name>WP0139</name>
+ <name>TP0140</name>
</trkpt>
<trkpt lat="54.786815500" lon="-2.344450300">
- <name>WP0140</name>
+ <name>TP0141</name>
</trkpt>
<trkpt lat="54.786818200" lon="-2.344449000">
- <name>WP0141</name>
+ <name>TP0142</name>
</trkpt>
<trkpt lat="54.786820300" lon="-2.344445100">
- <name>WP0142</name>
+ <name>TP0143</name>
</trkpt>
<trkpt lat="54.786850700" lon="-2.344378700">
- <name>WP0143</name>
+ <name>TP0144</name>
</trkpt>
<trkpt lat="54.786851100" lon="-2.344379500">
- <name>WP0144</name>
+ <name>TP0145</name>
</trkpt>
<trkpt lat="54.786851700" lon="-2.344372600">
- <name>WP0145</name>
+ <name>TP0146</name>
</trkpt>
<trkpt lat="54.786850500" lon="-2.344371500">
- <name>WP0146</name>
+ <name>TP0147</name>
</trkpt>
<trkpt lat="54.786851700" lon="-2.344361900">
- <name>WP0147</name>
+ <name>TP0148</name>
</trkpt>
<trkpt lat="54.786852200" lon="-2.344355400">
- <name>WP0148</name>
+ <name>TP0149</name>
</trkpt>
<trkpt lat="54.786855700" lon="-2.344344300">
- <name>WP0149</name>
+ <name>TP0150</name>
</trkpt>
<trkpt lat="54.786856800" lon="-2.344342000">
- <name>WP0150</name>
+ <name>TP0151</name>
</trkpt>
<trkpt lat="54.786854800" lon="-2.344344100">
- <name>WP0151</name>
+ <name>TP0152</name>
</trkpt>
<trkpt lat="54.786854300" lon="-2.344339000">
- <name>WP0152</name>
+ <name>TP0153</name>
</trkpt>
<trkpt lat="54.786854300" lon="-2.344334100">
- <name>WP0153</name>
+ <name>TP0154</name>
</trkpt>
<trkpt lat="54.786852500" lon="-2.344335600">
- <name>WP0154</name>
+ <name>TP0155</name>
</trkpt>
<trkpt lat="54.786852100" lon="-2.344330900">
- <name>WP0155</name>
+ <name>TP0156</name>
</trkpt>
<trkpt lat="54.786854400" lon="-2.344318100">
- <name>WP0156</name>
+ <name>TP0157</name>
</trkpt>
<trkpt lat="54.786856800" lon="-2.344306700">
- <name>WP0157</name>
+ <name>TP0158</name>
</trkpt>
<trkpt lat="54.786858400" lon="-2.344299800">
- <name>WP0158</name>
+ <name>TP0159</name>
</trkpt>
<trkpt lat="54.786858200" lon="-2.344299800">
- <name>WP0159</name>
+ <name>TP0160</name>
</trkpt>
<trkpt lat="54.786857500" lon="-2.344300600">
- <name>WP0160</name>
+ <name>TP0161</name>
</trkpt>
<trkpt lat="54.786856000" lon="-2.344304100">
- <name>WP0161</name>
+ <name>TP0162</name>
</trkpt>
<trkpt lat="54.786854600" lon="-2.344307000">
- <name>WP0162</name>
+ <name>TP0163</name>
</trkpt>
<trkpt lat="54.786853500" lon="-2.344309200">
- <name>WP0163</name>
+ <name>TP0164</name>
</trkpt>
<trkpt lat="54.786852700" lon="-2.344310700">
- <name>WP0164</name>
+ <name>TP0165</name>
</trkpt>
<trkpt lat="54.786851700" lon="-2.344313200">
- <name>WP0165</name>
+ <name>TP0166</name>
</trkpt>
<trkpt lat="54.786851100" lon="-2.344314400">
- <name>WP0166</name>
+ <name>TP0167</name>
</trkpt>
<trkpt lat="54.786850500" lon="-2.344316200">
- <name>WP0167</name>
+ <name>TP0168</name>
</trkpt>
<trkpt lat="54.786848600" lon="-2.344321700">
- <name>WP0168</name>
+ <name>TP0169</name>
</trkpt>
<trkpt lat="54.786846900" lon="-2.344326700">
- <name>WP0169</name>
+ <name>TP0170</name>
</trkpt>
<trkpt lat="54.786845300" lon="-2.344330700">
- <name>WP0170</name>
+ <name>TP0171</name>
</trkpt>
<trkpt lat="54.786843800" lon="-2.344334000">
- <name>WP0171</name>
+ <name>TP0172</name>
</trkpt>
<trkpt lat="54.786842400" lon="-2.344336100">
- <name>WP0172</name>
+ <name>TP0173</name>
</trkpt>
<trkpt lat="54.786841200" lon="-2.344337700">
- <name>WP0173</name>
+ <name>TP0174</name>
</trkpt>
<trkpt lat="54.786840300" lon="-2.344339500">
- <name>WP0174</name>
+ <name>TP0175</name>
</trkpt>
<trkpt lat="54.786840200" lon="-2.344340700">
- <name>WP0175</name>
+ <name>TP0176</name>
</trkpt>
<trkpt lat="54.786840400" lon="-2.344342600">
- <name>WP0176</name>
+ <name>TP0177</name>
</trkpt>
<trkpt lat="54.786840000" lon="-2.344345200">
- <name>WP0177</name>
+ <name>TP0178</name>
</trkpt>
<trkpt lat="54.786839700" lon="-2.344347800">
- <name>WP0178</name>
+ <name>TP0179</name>
</trkpt>
<trkpt lat="54.786839900" lon="-2.344349600">
- <name>WP0179</name>
+ <name>TP0180</name>
</trkpt>
<trkpt lat="54.786839900" lon="-2.344350700">
- <name>WP0180</name>
+ <name>TP0181</name>
</trkpt>
<trkpt lat="54.786840200" lon="-2.344350700">
- <name>WP0181</name>
+ <name>TP0182</name>
</trkpt>
<trkpt lat="54.786840900" lon="-2.344350000">
- <name>WP0182</name>
+ <name>TP0183</name>
</trkpt>
<trkpt lat="54.786842300" lon="-2.344348300">
- <name>WP0183</name>
+ <name>TP0184</name>
</trkpt>
<trkpt lat="54.786844000" lon="-2.344346000">
- <name>WP0184</name>
+ <name>TP0185</name>
</trkpt>
<trkpt lat="54.786845900" lon="-2.344344300">
- <name>WP0185</name>
+ <name>TP0186</name>
</trkpt>
<trkpt lat="54.786847900" lon="-2.344343000">
- <name>WP0186</name>
+ <name>TP0187</name>
</trkpt>
<trkpt lat="54.786849500" lon="-2.344343100">
- <name>WP0187</name>
+ <name>TP0188</name>
</trkpt>
<trkpt lat="54.786850000" lon="-2.344344700">
- <name>WP0188</name>
+ <name>TP0189</name>
</trkpt>
<trkpt lat="54.786850500" lon="-2.344345600">
- <name>WP0189</name>
+ <name>TP0190</name>
</trkpt>
<trkpt lat="54.786851100" lon="-2.344345900">
- <name>WP0190</name>
+ <name>TP0191</name>
</trkpt>
<trkpt lat="54.786851900" lon="-2.344345400">
- <name>WP0191</name>
+ <name>TP0192</name>
</trkpt>
<trkpt lat="54.786852700" lon="-2.344344700">
- <name>WP0192</name>
+ <name>TP0193</name>
</trkpt>
<trkpt lat="54.786853500" lon="-2.344343600">
- <name>WP0193</name>
+ <name>TP0194</name>
</trkpt>
<trkpt lat="54.786854300" lon="-2.344342300">
- <name>WP0194</name>
+ <name>TP0195</name>
</trkpt>
<trkpt lat="54.786855100" lon="-2.344340600">
- <name>WP0195</name>
+ <name>TP0196</name>
</trkpt>
<trkpt lat="54.786856200" lon="-2.344338400">
- <name>WP0196</name>
+ <name>TP0197</name>
</trkpt>
<trkpt lat="54.786857000" lon="-2.344336600">
- <name>WP0197</name>
+ <name>TP0198</name>
</trkpt>
<trkpt lat="54.786858200" lon="-2.344334500">
- <name>WP0198</name>
+ <name>TP0199</name>
</trkpt>
<trkpt lat="54.786859900" lon="-2.344332700">
- <name>WP0199</name>
+ <name>TP0200</name>
</trkpt>
<trkpt lat="54.786862100" lon="-2.344330500">
- <name>WP0200</name>
+ <name>TP0201</name>
</trkpt>
<trkpt lat="54.786864100" lon="-2.344328100">
- <name>WP0201</name>
+ <name>TP0202</name>
</trkpt>
<trkpt lat="54.787010400" lon="-2.344104300">
- <name>WP0202</name>
+ <name>TP0203</name>
</trkpt>
<trkpt lat="54.787229300" lon="-2.343736200">
- <name>WP0203</name>
+ <name>TP0204</name>
</trkpt>
<trkpt lat="54.787421800" lon="-2.343407600">
- <name>WP0204</name>
+ <name>TP0205</name>
</trkpt>
<trkpt lat="54.787607100" lon="-2.343151200">
- <name>WP0205</name>
+ <name>TP0206</name>
</trkpt>
<trkpt lat="54.787730000" lon="-2.342980300">
- <name>WP0206</name>
+ <name>TP0207</name>
</trkpt>
<trkpt lat="54.787984800" lon="-2.342500800">
- <name>WP0207</name>
+ <name>TP0208</name>
</trkpt>
<trkpt lat="54.787651300" lon="-2.342851000">
- <name>WP0208</name>
+ <name>TP0209</name>
</trkpt>
<trkpt lat="54.787296200" lon="-2.343383500">
- <name>WP0209</name>
+ <name>TP0210</name>
</trkpt>
<trkpt lat="54.787039700" lon="-2.343788000">
- <name>WP0210</name>
+ <name>TP0211</name>
</trkpt>
<trkpt lat="54.786803800" lon="-2.344073800">
- <name>WP0211</name>
+ <name>TP0212</name>
</trkpt>
<trkpt lat="54.786802300" lon="-2.344003800">
- <name>WP0212</name>
+ <name>TP0213</name>
</trkpt>
<trkpt lat="54.786616200" lon="-2.344166600">
- <name>WP0213</name>
+ <name>TP0214</name>
</trkpt>
<trkpt lat="54.786540500" lon="-2.344416600">
- <name>WP0214</name>
+ <name>TP0215</name>
</trkpt>
<trkpt lat="54.786501700" lon="-2.344660800">
- <name>WP0215</name>
+ <name>TP0216</name>
</trkpt>
<trkpt lat="54.786513700" lon="-2.344705000">
- <name>WP0216</name>
+ <name>TP0217</name>
</trkpt>
<trkpt lat="54.786760100" lon="-2.344360500">
- <name>WP0217</name>
+ <name>TP0218</name>
</trkpt>
<trkpt lat="54.787114900" lon="-2.343841500">
- <name>WP0218</name>
+ <name>TP0219</name>
</trkpt>
<trkpt lat="54.786823000" lon="-2.344343500">
- <name>WP0219</name>
+ <name>TP0220</name>
</trkpt>
<trkpt lat="54.786727900" lon="-2.344510000">
- <name>WP0220</name>
+ <name>TP0221</name>
</trkpt>
<trkpt lat="54.786797300" lon="-2.344411700">
- <name>WP0221</name>
+ <name>TP0222</name>
</trkpt>
<trkpt lat="54.786798000" lon="-2.344388300">
- <name>WP0222</name>
+ <name>TP0223</name>
</trkpt>
<trkpt lat="54.787078000" lon="-2.343880200">
- <name>WP0223</name>
+ <name>TP0224</name>
</trkpt>
<trkpt lat="54.787064400" lon="-2.343910000">
- <name>WP0224</name>
+ <name>TP0225</name>
</trkpt>
<trkpt lat="54.787059700" lon="-2.343934800">
- <name>WP0225</name>
+ <name>TP0226</name>
</trkpt>
<trkpt lat="54.787079300" lon="-2.343931200">
- <name>WP0226</name>
+ <name>TP0227</name>
</trkpt>
<trkpt lat="54.787085100" lon="-2.343997400">
- <name>WP0227</name>
+ <name>TP0228</name>
</trkpt>
<trkpt lat="54.787090000" lon="-2.343998400">
- <name>WP0228</name>
+ <name>TP0229</name>
</trkpt>
<trkpt lat="54.787363500" lon="-2.343572600">
- <name>WP0229</name>
+ <name>TP0230</name>
</trkpt>
<trkpt lat="54.787468300" lon="-2.343368600">
- <name>WP0230</name>
+ <name>TP0231</name>
</trkpt>
<trkpt lat="54.787640700" lon="-2.343024900">
- <name>WP0231</name>
+ <name>TP0232</name>
</trkpt>
<trkpt lat="54.787859200" lon="-2.342704200">
- <name>WP0232</name>
+ <name>TP0233</name>
</trkpt>
<trkpt lat="54.787842200" lon="-2.342921800">
- <name>WP0233</name>
+ <name>TP0234</name>
</trkpt>
<trkpt lat="54.787355300" lon="-2.343799700">
- <name>WP0234</name>
+ <name>TP0235</name>
</trkpt>
<trkpt lat="54.787075000" lon="-2.344206800">
- <name>WP0235</name>
+ <name>TP0236</name>
</trkpt>
<trkpt lat="54.787010700" lon="-2.344363000">
- <name>WP0236</name>
+ <name>TP0237</name>
</trkpt>
<trkpt lat="54.786777100" lon="-2.344770400">
- <name>WP0237</name>
+ <name>TP0238</name>
</trkpt>
<trkpt lat="54.786630800" lon="-2.344906200">
- <name>WP0238</name>
+ <name>TP0239</name>
</trkpt>
<trkpt lat="54.786659200" lon="-2.344849700">
- <name>WP0239</name>
+ <name>TP0240</name>
</trkpt>
<trkpt lat="54.786524100" lon="-2.345018400">
- <name>WP0240</name>
+ <name>TP0241</name>
</trkpt>
<trkpt lat="54.786864600" lon="-2.344376200">
- <name>WP0241</name>
+ <name>TP0242</name>
</trkpt>
<trkpt lat="54.787250300" lon="-2.343633900">
- <name>WP0242</name>
+ <name>TP0243</name>
</trkpt>
<trkpt lat="54.787807600" lon="-2.342578800">
- <name>WP0243</name>
+ <name>TP0244</name>
</trkpt>
<trkpt lat="54.787178600" lon="-2.344040000">
- <name>WP0244</name>
+ <name>TP0245</name>
</trkpt>
<trkpt lat="54.786722100" lon="-2.344530500">
- <name>WP0245</name>
+ <name>TP0246</name>
</trkpt>
<trkpt lat="54.786872300" lon="-2.344456200">
- <name>WP0246</name>
+ <name>TP0247</name>
</trkpt>
<trkpt lat="54.786790900" lon="-2.344473100">
- <name>WP0247</name>
+ <name>TP0248</name>
</trkpt>
<trkpt lat="54.786866200" lon="-2.344096600">
- <name>WP0248</name>
+ <name>TP0249</name>
</trkpt>
<trkpt lat="54.786926000" lon="-2.344155900">
- <name>WP0249</name>
+ <name>TP0250</name>
</trkpt>
<trkpt lat="54.787223500" lon="-2.343181500">
- <name>WP0250</name>
+ <name>TP0251</name>
</trkpt>
<trkpt lat="54.787151700" lon="-2.343740700">
- <name>WP0251</name>
+ <name>TP0252</name>
</trkpt>
<trkpt lat="54.787281000" lon="-2.343534000">
- <name>WP0252</name>
+ <name>TP0253</name>
</trkpt>
<trkpt lat="54.787392100" lon="-2.343651100">
- <name>WP0253</name>
+ <name>TP0254</name>
</trkpt>
<trkpt lat="54.787738600" lon="-2.342950500">
- <name>WP0254</name>
+ <name>TP0255</name>
</trkpt>
<trkpt lat="54.787550500" lon="-2.343047500">
- <name>WP0255</name>
+ <name>TP0256</name>
</trkpt>
<trkpt lat="54.786874100" lon="-2.344481700">
- <name>WP0256</name>
+ <name>TP0257</name>
</trkpt>
<trkpt lat="54.787425000" lon="-2.342911400">
- <name>WP0257</name>
+ <name>TP0258</name>
</trkpt>
<trkpt lat="54.787020700" lon="-2.344089400">
- <name>WP0258</name>
+ <name>TP0259</name>
</trkpt>
<trkpt lat="54.787111400" lon="-2.344023100">
- <name>WP0259</name>
+ <name>TP0260</name>
</trkpt>
</trkseg>
</trk>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<gpx
+ version="1.0"
+creator="GPSBabel - http://www.gpsbabel.org"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xmlns="http://www.topografix.com/GPX/1/0"
+xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd">
+<bounds minlat="54.773463300" minlon="-2.438874900" maxlat="54.812476600" maxlon="-2.341913300"/>
+<wpt lat="54.810261600" lon="-2.395806600">
+ <ele>378.000000</ele>
+ <name>WP0001</name>
+ <cmt>WP0001</cmt>
+ <desc>WP0001</desc>
+</wpt>
+<wpt lat="54.810425000" lon="-2.396746600">
+ <ele>379.000000</ele>
+ <name>WP0002</name>
+ <cmt>WP0002</cmt>
+ <desc>WP0002</desc>
+</wpt>
+<wpt lat="54.810838300" lon="-2.403213300">
+ <ele>379.000000</ele>
+ <name>WP0003</name>
+ <cmt>WP0003</cmt>
+ <desc>WP0003</desc>
+</wpt>
+<wpt lat="54.810708300" lon="-2.407425000">
+ <ele>377.000000</ele>
+ <name>WP0004</name>
+ <cmt>WP0004</cmt>
+ <desc>WP0004</desc>
+</wpt>
+<wpt lat="54.782281600" lon="-2.351400000">
+ <ele>531.000000</ele>
+ <name>WP0005</name>
+ <cmt>WP0005</cmt>
+ <desc>WP0005</desc>
+</wpt>
+<trk>
+<trkseg>
+<trkpt lat="54.786888300" lon="-2.343875000">
+ <ele>435.000000</ele>
+ <name>TP0001</name>
+</trkpt>
+<trkpt lat="54.786904900" lon="-2.343893300">
+ <ele>434.000000</ele>
+ <name>TP0002</name>
+</trkpt>
+<trkpt lat="54.786888300" lon="-2.343855000">
+ <ele>435.000000</ele>
+ <name>TP0003</name>
+</trkpt>
+<trkpt lat="54.786880000" lon="-2.343851600">
+ <ele>434.000000</ele>
+ <name>TP0004</name>
+</trkpt>
+<trkpt lat="54.786858300" lon="-2.343836600">
+ <ele>434.000000</ele>
+ <name>TP0005</name>
+</trkpt>
+<trkpt lat="54.786829900" lon="-2.343806600">
+ <ele>434.000000</ele>
+ <name>TP0006</name>
+</trkpt>
+<trkpt lat="54.786804900" lon="-2.343768300">
+ <ele>433.000000</ele>
+ <name>TP0007</name>
+</trkpt>
+<trkpt lat="54.786781600" lon="-2.343720000">
+ <ele>433.000000</ele>
+ <name>TP0008</name>
+</trkpt>
+<trkpt lat="54.786758300" lon="-2.343659900">
+ <ele>434.000000</ele>
+ <name>TP0009</name>
+</trkpt>
+<trkpt lat="54.786741600" lon="-2.343593300">
+ <ele>434.000000</ele>
+ <name>TP0010</name>
+</trkpt>
+<trkpt lat="54.786734900" lon="-2.343523300">
+ <ele>433.000000</ele>
+ <name>TP0011</name>
+</trkpt>
+<trkpt lat="54.786733300" lon="-2.343444900">
+ <ele>433.000000</ele>
+ <name>TP0012</name>
+</trkpt>
+<trkpt lat="54.786736600" lon="-2.343371600">
+ <ele>433.000000</ele>
+ <name>TP0013</name>
+</trkpt>
+<trkpt lat="54.786746600" lon="-2.343300000">
+ <ele>433.000000</ele>
+ <name>TP0014</name>
+</trkpt>
+<trkpt lat="54.786766600" lon="-2.343223300">
+ <ele>433.000000</ele>
+ <name>TP0015</name>
+</trkpt>
+<trkpt lat="54.786798300" lon="-2.343136600">
+ <ele>432.000000</ele>
+ <name>TP0016</name>
+</trkpt>
+<trkpt lat="54.786843300" lon="-2.343070000">
+ <ele>431.000000</ele>
+ <name>TP0017</name>
+</trkpt>
+<trkpt lat="54.786898300" lon="-2.343009900">
+ <ele>430.000000</ele>
+ <name>TP0018</name>
+</trkpt>
+<trkpt lat="54.787014900" lon="-2.342900000">
+ <ele>430.000000</ele>
+ <name>TP0019</name>
+</trkpt>
+<trkpt lat="54.787143300" lon="-2.342806600">
+ <ele>430.000000</ele>
+ <name>TP0020</name>
+</trkpt>
+<trkpt lat="54.787254900" lon="-2.342644900">
+ <ele>431.000000</ele>
+ <name>TP0021</name>
+</trkpt>
+<trkpt lat="54.787345000" lon="-2.342473300">
+ <ele>431.000000</ele>
+ <name>TP0022</name>
+</trkpt>
+<trkpt lat="54.787423300" lon="-2.342328300">
+ <ele>430.000000</ele>
+ <name>TP0023</name>
+</trkpt>
+<trkpt lat="54.787453200" lon="-2.342288300">
+ <ele>430.000000</ele>
+ <name>TP0024</name>
+</trkpt>
+<trkpt lat="54.787491600" lon="-2.342243300">
+ <ele>430.000000</ele>
+ <name>TP0025</name>
+</trkpt>
+<trkpt lat="54.787791600" lon="-2.341931600">
+ <ele>431.000000</ele>
+ <name>TP0026</name>
+</trkpt>
+<trkpt lat="54.787821600" lon="-2.341916600">
+ <ele>431.000000</ele>
+ <name>TP0027</name>
+</trkpt>
+<trkpt lat="54.787845000" lon="-2.341913300">
+ <ele>431.000000</ele>
+ <name>TP0028</name>
+</trkpt>
+<trkpt lat="54.787858300" lon="-2.341929900">
+ <ele>431.000000</ele>
+ <name>TP0029</name>
+</trkpt>
+<trkpt lat="54.787884900" lon="-2.341964900">
+ <ele>431.000000</ele>
+ <name>TP0030</name>
+</trkpt>
+<trkpt lat="54.787913300" lon="-2.342038300">
+ <ele>430.000000</ele>
+ <name>TP0031</name>
+</trkpt>
+<trkpt lat="54.787939900" lon="-2.342134900">
+ <ele>430.000000</ele>
+ <name>TP0032</name>
+</trkpt>
+<trkpt lat="54.788096600" lon="-2.342793300">
+ <ele>428.000000</ele>
+ <name>TP0033</name>
+</trkpt>
+<trkpt lat="54.788196600" lon="-2.343084900">
+ <ele>427.000000</ele>
+ <name>TP0034</name>
+</trkpt>
+<trkpt lat="54.788513300" lon="-2.343803300">
+ <ele>426.000000</ele>
+ <name>TP0035</name>
+</trkpt>
+<trkpt lat="54.788908300" lon="-2.344671600">
+ <ele>426.000000</ele>
+ <name>TP0036</name>
+</trkpt>
+<trkpt lat="54.789201600" lon="-2.345398300">
+ <ele>426.000000</ele>
+ <name>TP0037</name>
+</trkpt>
+<trkpt lat="54.789271600" lon="-2.345471600">
+ <ele>427.000000</ele>
+ <name>TP0038</name>
+</trkpt>
+<trkpt lat="54.789426600" lon="-2.345634900">
+ <ele>427.000000</ele>
+ <name>TP0039</name>
+</trkpt>
+<trkpt lat="54.789693300" lon="-2.345966600">
+ <ele>428.000000</ele>
+ <name>TP0040</name>
+</trkpt>
+<trkpt lat="54.789935000" lon="-2.346304900">
+ <ele>426.000000</ele>
+ <name>TP0041</name>
+</trkpt>
+<trkpt lat="54.790330000" lon="-2.347021600">
+ <ele>425.000000</ele>
+ <name>TP0042</name>
+</trkpt>
+<trkpt lat="54.791056600" lon="-2.348380000">
+ <ele>428.000000</ele>
+ <name>TP0043</name>
+</trkpt>
+<trkpt lat="54.791163300" lon="-2.348504900">
+ <ele>429.000000</ele>
+ <name>TP0044</name>
+</trkpt>
+<trkpt lat="54.791276600" lon="-2.348599900">
+ <ele>429.000000</ele>
+ <name>TP0045</name>
+</trkpt>
+<trkpt lat="54.791751600" lon="-2.348926600">
+ <ele>431.000000</ele>
+ <name>TP0046</name>
+</trkpt>
+<trkpt lat="54.791864900" lon="-2.349045000">
+ <ele>431.000000</ele>
+ <name>TP0047</name>
+</trkpt>
+<trkpt lat="54.791971600" lon="-2.349203300">
+ <ele>432.000000</ele>
+ <name>TP0048</name>
+</trkpt>
+<trkpt lat="54.793465000" lon="-2.351658300">
+ <ele>444.000000</ele>
+ <name>TP0049</name>
+</trkpt>
+<trkpt lat="54.793750000" lon="-2.352244900">
+ <ele>445.000000</ele>
+ <name>TP0050</name>
+</trkpt>
+<trkpt lat="54.794794900" lon="-2.354739900">
+ <ele>448.000000</ele>
+ <name>TP0051</name>
+</trkpt>
+<trkpt lat="54.795784900" lon="-2.357973300">
+ <ele>432.000000</ele>
+ <name>TP0052</name>
+</trkpt>
+<trkpt lat="54.796133300" lon="-2.359068300">
+ <ele>426.000000</ele>
+ <name>TP0053</name>
+</trkpt>
+<trkpt lat="54.796541600" lon="-2.359993300">
+ <ele>420.000000</ele>
+ <name>TP0054</name>
+</trkpt>
+<trkpt lat="54.797225000" lon="-2.361403300">
+ <ele>409.000000</ele>
+ <name>TP0055</name>
+</trkpt>
+<trkpt lat="54.797311600" lon="-2.361546600">
+ <ele>408.000000</ele>
+ <name>TP0056</name>
+</trkpt>
+<trkpt lat="54.797506600" lon="-2.361806600">
+ <ele>405.000000</ele>
+ <name>TP0057</name>
+</trkpt>
+<trkpt lat="54.798508300" lon="-2.362931600">
+ <ele>393.000000</ele>
+ <name>TP0058</name>
+</trkpt>
+<trkpt lat="54.798581600" lon="-2.362979900">
+ <ele>392.000000</ele>
+ <name>TP0059</name>
+</trkpt>
+<trkpt lat="54.798713300" lon="-2.363058300">
+ <ele>392.000000</ele>
+ <name>TP0060</name>
+</trkpt>
+<trkpt lat="54.798766600" lon="-2.363143300">
+ <ele>392.000000</ele>
+ <name>TP0061</name>
+</trkpt>
+<trkpt lat="54.798809900" lon="-2.363271600">
+ <ele>391.000000</ele>
+ <name>TP0062</name>
+</trkpt>
+<trkpt lat="54.798988300" lon="-2.363968300">
+ <ele>391.000000</ele>
+ <name>TP0063</name>
+</trkpt>
+<trkpt lat="54.799468300" lon="-2.365268300">
+ <ele>387.000000</ele>
+ <name>TP0064</name>
+</trkpt>
+<trkpt lat="54.799643300" lon="-2.365638300">
+ <ele>386.000000</ele>
+ <name>TP0065</name>
+</trkpt>
+<trkpt lat="54.800014900" lon="-2.366415000">
+ <ele>383.000000</ele>
+ <name>TP0066</name>
+</trkpt>
+<trkpt lat="54.801574900" lon="-2.370154900">
+ <ele>373.000000</ele>
+ <name>TP0067</name>
+</trkpt>
+<trkpt lat="54.802280000" lon="-2.371363300">
+ <ele>372.000000</ele>
+ <name>TP0068</name>
+</trkpt>
+<trkpt lat="54.802545000" lon="-2.371685000">
+ <ele>372.000000</ele>
+ <name>TP0069</name>
+</trkpt>
+<trkpt lat="54.805436600" lon="-2.374725000">
+ <ele>369.000000</ele>
+ <name>TP0070</name>
+</trkpt>
+<trkpt lat="54.805856600" lon="-2.375245000">
+ <ele>364.000000</ele>
+ <name>TP0071</name>
+</trkpt>
+<trkpt lat="54.806201600" lon="-2.375616600">
+ <ele>361.000000</ele>
+ <name>TP0072</name>
+</trkpt>
+<trkpt lat="54.806253300" lon="-2.375713300">
+ <ele>360.000000</ele>
+ <name>TP0073</name>
+</trkpt>
+<trkpt lat="54.806281600" lon="-2.375828300">
+ <ele>359.000000</ele>
+ <name>TP0074</name>
+</trkpt>
+<trkpt lat="54.806283300" lon="-2.375971600">
+ <ele>359.000000</ele>
+ <name>TP0075</name>
+</trkpt>
+<trkpt lat="54.806269900" lon="-2.376126600">
+ <ele>359.000000</ele>
+ <name>TP0076</name>
+</trkpt>
+<trkpt lat="54.806083300" lon="-2.378666600">
+ <ele>364.000000</ele>
+ <name>TP0077</name>
+</trkpt>
+<trkpt lat="54.806091600" lon="-2.378888300">
+ <ele>363.000000</ele>
+ <name>TP0078</name>
+</trkpt>
+<trkpt lat="54.806159900" lon="-2.379575000">
+ <ele>364.000000</ele>
+ <name>TP0079</name>
+</trkpt>
+<trkpt lat="54.806203200" lon="-2.379791600">
+ <ele>363.000000</ele>
+ <name>TP0080</name>
+</trkpt>
+<trkpt lat="54.806261600" lon="-2.379996600">
+ <ele>364.000000</ele>
+ <name>TP0081</name>
+</trkpt>
+<trkpt lat="54.806976600" lon="-2.382251600">
+ <ele>369.000000</ele>
+ <name>TP0082</name>
+</trkpt>
+<trkpt lat="54.807211600" lon="-2.382851600">
+ <ele>369.000000</ele>
+ <name>TP0083</name>
+</trkpt>
+<trkpt lat="54.807756600" lon="-2.384263300">
+ <ele>369.000000</ele>
+ <name>TP0084</name>
+</trkpt>
+<trkpt lat="54.807903300" lon="-2.384749900">
+ <ele>368.000000</ele>
+ <name>TP0085</name>
+</trkpt>
+<trkpt lat="54.807963300" lon="-2.385013300">
+ <ele>368.000000</ele>
+ <name>TP0086</name>
+</trkpt>
+<trkpt lat="54.808046600" lon="-2.385580000">
+ <ele>370.000000</ele>
+ <name>TP0087</name>
+</trkpt>
+<trkpt lat="54.808189900" lon="-2.386458300">
+ <ele>373.000000</ele>
+ <name>TP0088</name>
+</trkpt>
+<trkpt lat="54.808486600" lon="-2.387616600">
+ <ele>375.000000</ele>
+ <name>TP0089</name>
+</trkpt>
+<trkpt lat="54.809138300" lon="-2.389901600">
+ <ele>380.000000</ele>
+ <name>TP0090</name>
+</trkpt>
+<trkpt lat="54.810261600" lon="-2.395806600">
+ <ele>378.000000</ele>
+ <name>TP0091</name>
+</trkpt>
+<trkpt lat="54.810425000" lon="-2.396746600">
+ <ele>379.000000</ele>
+ <name>TP0092</name>
+</trkpt>
+<trkpt lat="54.810465000" lon="-2.397070000">
+ <ele>379.000000</ele>
+ <name>TP0093</name>
+</trkpt>
+<trkpt lat="54.810703300" lon="-2.400176600">
+ <ele>376.000000</ele>
+ <name>TP0094</name>
+</trkpt>
+<trkpt lat="54.810836600" lon="-2.402903300">
+ <ele>378.000000</ele>
+ <name>TP0095</name>
+</trkpt>
+<trkpt lat="54.810838300" lon="-2.403213300">
+ <ele>379.000000</ele>
+ <name>TP0096</name>
+</trkpt>
+<trkpt lat="54.810778300" lon="-2.405486600">
+ <ele>378.000000</ele>
+ <name>TP0097</name>
+</trkpt>
+<trkpt lat="54.810708300" lon="-2.407425000">
+ <ele>377.000000</ele>
+ <name>TP0098</name>
+</trkpt>
+<trkpt lat="54.810301600" lon="-2.415730000">
+ <ele>368.000000</ele>
+ <name>TP0099</name>
+</trkpt>
+<trkpt lat="54.810726600" lon="-2.427608300">
+ <ele>341.000000</ele>
+ <name>TP0100</name>
+</trkpt>
+<trkpt lat="54.810713300" lon="-2.427753300">
+ <ele>341.000000</ele>
+ <name>TP0101</name>
+</trkpt>
+<trkpt lat="54.810705000" lon="-2.427815000">
+ <ele>341.000000</ele>
+ <name>TP0102</name>
+</trkpt>
+<trkpt lat="54.810721600" lon="-2.427898300">
+ <ele>341.000000</ele>
+ <name>TP0103</name>
+</trkpt>
+<trkpt lat="54.810731600" lon="-2.427976600">
+ <ele>341.000000</ele>
+ <name>TP0104</name>
+</trkpt>
+<trkpt lat="54.810745000" lon="-2.428183300">
+ <ele>340.000000</ele>
+ <name>TP0105</name>
+</trkpt>
+<trkpt lat="54.810893300" lon="-2.432644900">
+ <ele>337.000000</ele>
+ <name>TP0106</name>
+</trkpt>
+<trkpt lat="54.810870000" lon="-2.434921600">
+ <ele>330.000000</ele>
+ <name>TP0107</name>
+</trkpt>
+<trkpt lat="54.810815000" lon="-2.436650000">
+ <ele>324.000000</ele>
+ <name>TP0108</name>
+</trkpt>
+<trkpt lat="54.810821600" lon="-2.436785000">
+ <ele>324.000000</ele>
+ <name>TP0109</name>
+</trkpt>
+<trkpt lat="54.810843300" lon="-2.437066600">
+ <ele>322.000000</ele>
+ <name>TP0110</name>
+</trkpt>
+<trkpt lat="54.810838300" lon="-2.437113300">
+ <ele>322.000000</ele>
+ <name>TP0111</name>
+</trkpt>
+<trkpt lat="54.810831600" lon="-2.437151600">
+ <ele>321.000000</ele>
+ <name>TP0112</name>
+</trkpt>
+<trkpt lat="54.810839900" lon="-2.437179900">
+ <ele>321.000000</ele>
+ <name>TP0113</name>
+</trkpt>
+<trkpt lat="54.810861600" lon="-2.437225000">
+ <ele>321.000000</ele>
+ <name>TP0114</name>
+</trkpt>
+<trkpt lat="54.810974900" lon="-2.437418300">
+ <ele>319.000000</ele>
+ <name>TP0115</name>
+</trkpt>
+<trkpt lat="54.811169900" lon="-2.437681600">
+ <ele>317.000000</ele>
+ <name>TP0116</name>
+</trkpt>
+<trkpt lat="54.811318200" lon="-2.437833300">
+ <ele>317.000000</ele>
+ <name>TP0117</name>
+</trkpt>
+<trkpt lat="54.811848300" lon="-2.438341600">
+ <ele>311.000000</ele>
+ <name>TP0118</name>
+</trkpt>
+<trkpt lat="54.812298300" lon="-2.438710000">
+ <ele>304.000000</ele>
+ <name>TP0119</name>
+</trkpt>
+<trkpt lat="54.812306600" lon="-2.438705000">
+ <ele>304.000000</ele>
+ <name>TP0120</name>
+</trkpt>
+<trkpt lat="54.812333300" lon="-2.438688300">
+ <ele>303.000000</ele>
+ <name>TP0121</name>
+</trkpt>
+<trkpt lat="54.812343300" lon="-2.438681600">
+ <ele>303.000000</ele>
+ <name>TP0122</name>
+</trkpt>
+<trkpt lat="54.812371600" lon="-2.438710000">
+ <ele>303.000000</ele>
+ <name>TP0123</name>
+</trkpt>
+<trkpt lat="54.812423300" lon="-2.438741600">
+ <ele>303.000000</ele>
+ <name>TP0124</name>
+</trkpt>
+<trkpt lat="54.812473300" lon="-2.438778300">
+ <ele>303.000000</ele>
+ <name>TP0125</name>
+</trkpt>
+<trkpt lat="54.812474900" lon="-2.438804900">
+ <ele>303.000000</ele>
+ <name>TP0126</name>
+</trkpt>
+<trkpt lat="54.812476600" lon="-2.438824900">
+ <ele>303.000000</ele>
+ <name>TP0127</name>
+</trkpt>
+<trkpt lat="54.812470000" lon="-2.438845000">
+ <ele>303.000000</ele>
+ <name>TP0128</name>
+</trkpt>
+<trkpt lat="54.812455000" lon="-2.438866600">
+ <ele>303.000000</ele>
+ <name>TP0129</name>
+</trkpt>
+<trkpt lat="54.812434900" lon="-2.438874900">
+ <ele>303.000000</ele>
+ <name>TP0130</name>
+</trkpt>
+<trkpt lat="54.812415000" lon="-2.438861600">
+ <ele>303.000000</ele>
+ <name>TP0131</name>
+</trkpt>
+<trkpt lat="54.812396600" lon="-2.438831600">
+ <ele>303.000000</ele>
+ <name>TP0132</name>
+</trkpt>
+<trkpt lat="54.812355000" lon="-2.438748300">
+ <ele>304.000000</ele>
+ <name>TP0133</name>
+</trkpt>
+<trkpt lat="54.812330000" lon="-2.438708300">
+ <ele>305.000000</ele>
+ <name>TP0134</name>
+</trkpt>
+<trkpt lat="54.812273300" lon="-2.438640000">
+ <ele>306.000000</ele>
+ <name>TP0135</name>
+</trkpt>
+<trkpt lat="54.812238300" lon="-2.438613300">
+ <ele>306.000000</ele>
+ <name>TP0136</name>
+</trkpt>
+<trkpt lat="54.811619900" lon="-2.438131600">
+ <ele>314.000000</ele>
+ <name>TP0137</name>
+</trkpt>
+<trkpt lat="54.811475000" lon="-2.437983300">
+ <ele>315.000000</ele>
+ <name>TP0138</name>
+</trkpt>
+<trkpt lat="54.811294900" lon="-2.437768300">
+ <ele>316.000000</ele>
+ <name>TP0139</name>
+</trkpt>
+<trkpt lat="54.810590000" lon="-2.436898300">
+ <ele>323.000000</ele>
+ <name>TP0140</name>
+</trkpt>
+<trkpt lat="54.810281600" lon="-2.436569900">
+ <ele>325.000000</ele>
+ <name>TP0141</name>
+</trkpt>
+<trkpt lat="54.809750000" lon="-2.435833300">
+ <ele>327.000000</ele>
+ <name>TP0142</name>
+</trkpt>
+<trkpt lat="54.809646600" lon="-2.435661600">
+ <ele>327.000000</ele>
+ <name>TP0143</name>
+</trkpt>
+<trkpt lat="54.809551600" lon="-2.435469900">
+ <ele>326.000000</ele>
+ <name>TP0144</name>
+</trkpt>
+<trkpt lat="54.809345000" lon="-2.435046600">
+ <ele>326.000000</ele>
+ <name>TP0145</name>
+</trkpt>
+<trkpt lat="54.809076600" lon="-2.434638300">
+ <ele>328.000000</ele>
+ <name>TP0146</name>
+</trkpt>
+<trkpt lat="54.808763300" lon="-2.434291600">
+ <ele>334.000000</ele>
+ <name>TP0147</name>
+</trkpt>
+<trkpt lat="54.808596600" lon="-2.434156600">
+ <ele>336.000000</ele>
+ <name>TP0148</name>
+</trkpt>
+<trkpt lat="54.808423300" lon="-2.434048300">
+ <ele>339.000000</ele>
+ <name>TP0149</name>
+</trkpt>
+<trkpt lat="54.807174900" lon="-2.433451600">
+ <ele>347.000000</ele>
+ <name>TP0150</name>
+</trkpt>
+<trkpt lat="54.806393300" lon="-2.433155000">
+ <ele>348.000000</ele>
+ <name>TP0151</name>
+</trkpt>
+<trkpt lat="54.805398300" lon="-2.432618300">
+ <ele>356.000000</ele>
+ <name>TP0152</name>
+</trkpt>
+<trkpt lat="54.802378200" lon="-2.430253300">
+ <ele>367.000000</ele>
+ <name>TP0153</name>
+</trkpt>
+<trkpt lat="54.800840000" lon="-2.428853300">
+ <ele>378.000000</ele>
+ <name>TP0154</name>
+</trkpt>
+<trkpt lat="54.800123300" lon="-2.428023300">
+ <ele>382.000000</ele>
+ <name>TP0155</name>
+</trkpt>
+<trkpt lat="54.798156600" lon="-2.425250000">
+ <ele>379.000000</ele>
+ <name>TP0156</name>
+</trkpt>
+<trkpt lat="54.797971600" lon="-2.425106600">
+ <ele>379.000000</ele>
+ <name>TP0157</name>
+</trkpt>
+<trkpt lat="54.797771600" lon="-2.425013300">
+ <ele>379.000000</ele>
+ <name>TP0158</name>
+</trkpt>
+<trkpt lat="54.797561600" lon="-2.424966600">
+ <ele>381.000000</ele>
+ <name>TP0159</name>
+</trkpt>
+<trkpt lat="54.788566600" lon="-2.423833300">
+ <ele>418.000000</ele>
+ <name>TP0160</name>
+</trkpt>
+<trkpt lat="54.788334900" lon="-2.423734900">
+ <ele>418.000000</ele>
+ <name>TP0161</name>
+</trkpt>
+<trkpt lat="54.788111600" lon="-2.423599900">
+ <ele>419.000000</ele>
+ <name>TP0162</name>
+</trkpt>
+<trkpt lat="54.787233300" lon="-2.423016600">
+ <ele>419.000000</ele>
+ <name>TP0163</name>
+</trkpt>
+<trkpt lat="54.787005000" lon="-2.422933300">
+ <ele>419.000000</ele>
+ <name>TP0164</name>
+</trkpt>
+<trkpt lat="54.786771600" lon="-2.422893300">
+ <ele>419.000000</ele>
+ <name>TP0165</name>
+</trkpt>
+<trkpt lat="54.786538300" lon="-2.422891600">
+ <ele>419.000000</ele>
+ <name>TP0166</name>
+</trkpt>
+<trkpt lat="54.785221600" lon="-2.422911600">
+ <ele>423.000000</ele>
+ <name>TP0167</name>
+</trkpt>
+<trkpt lat="54.784829900" lon="-2.422811600">
+ <ele>422.000000</ele>
+ <name>TP0168</name>
+</trkpt>
+<trkpt lat="54.784650000" lon="-2.422718300">
+ <ele>423.000000</ele>
+ <name>TP0169</name>
+</trkpt>
+<trkpt lat="54.784481600" lon="-2.422578300">
+ <ele>424.000000</ele>
+ <name>TP0170</name>
+</trkpt>
+<trkpt lat="54.784328200" lon="-2.422391600">
+ <ele>425.000000</ele>
+ <name>TP0171</name>
+</trkpt>
+<trkpt lat="54.784201600" lon="-2.422161600">
+ <ele>427.000000</ele>
+ <name>TP0172</name>
+</trkpt>
+<trkpt lat="54.784108300" lon="-2.421893300">
+ <ele>429.000000</ele>
+ <name>TP0173</name>
+</trkpt>
+<trkpt lat="54.784043300" lon="-2.421600000">
+ <ele>430.000000</ele>
+ <name>TP0174</name>
+</trkpt>
+<trkpt lat="54.781776600" lon="-2.409976600">
+ <ele>451.000000</ele>
+ <name>TP0175</name>
+</trkpt>
+<trkpt lat="54.781664900" lon="-2.409648300">
+ <ele>452.000000</ele>
+ <name>TP0176</name>
+</trkpt>
+<trkpt lat="54.780730000" lon="-2.407160000">
+ <ele>453.000000</ele>
+ <name>TP0177</name>
+</trkpt>
+<trkpt lat="54.780341600" lon="-2.405881600">
+ <ele>453.000000</ele>
+ <name>TP0178</name>
+</trkpt>
+<trkpt lat="54.780081600" lon="-2.405311600">
+ <ele>453.000000</ele>
+ <name>TP0179</name>
+</trkpt>
+<trkpt lat="54.778968300" lon="-2.403060000">
+ <ele>458.000000</ele>
+ <name>TP0180</name>
+</trkpt>
+<trkpt lat="54.778769900" lon="-2.402401600">
+ <ele>459.000000</ele>
+ <name>TP0181</name>
+</trkpt>
+<trkpt lat="54.778396600" lon="-2.401121600">
+ <ele>462.000000</ele>
+ <name>TP0182</name>
+</trkpt>
+<trkpt lat="54.778169900" lon="-2.400588300">
+ <ele>462.000000</ele>
+ <name>TP0183</name>
+</trkpt>
+<trkpt lat="54.777958300" lon="-2.400071600">
+ <ele>462.000000</ele>
+ <name>TP0184</name>
+</trkpt>
+<trkpt lat="54.777878300" lon="-2.399804900">
+ <ele>462.000000</ele>
+ <name>TP0185</name>
+</trkpt>
+<trkpt lat="54.777026600" lon="-2.396114900">
+ <ele>451.000000</ele>
+ <name>TP0186</name>
+</trkpt>
+<trkpt lat="54.776948300" lon="-2.395564900">
+ <ele>449.000000</ele>
+ <name>TP0187</name>
+</trkpt>
+<trkpt lat="54.776911600" lon="-2.395001600">
+ <ele>448.000000</ele>
+ <name>TP0188</name>
+</trkpt>
+<trkpt lat="54.776916600" lon="-2.394453300">
+ <ele>447.000000</ele>
+ <name>TP0189</name>
+</trkpt>
+<trkpt lat="54.776926600" lon="-2.393678300">
+ <ele>447.000000</ele>
+ <name>TP0190</name>
+</trkpt>
+<trkpt lat="54.776883300" lon="-2.393166600">
+ <ele>446.000000</ele>
+ <name>TP0191</name>
+</trkpt>
+<trkpt lat="54.776425000" lon="-2.389998300">
+ <ele>434.000000</ele>
+ <name>TP0192</name>
+</trkpt>
+<trkpt lat="54.776376600" lon="-2.389810000">
+ <ele>434.000000</ele>
+ <name>TP0193</name>
+</trkpt>
+<trkpt lat="54.776308300" lon="-2.389658300">
+ <ele>434.000000</ele>
+ <name>TP0194</name>
+</trkpt>
+<trkpt lat="54.776224900" lon="-2.389556600">
+ <ele>434.000000</ele>
+ <name>TP0195</name>
+</trkpt>
+<trkpt lat="54.776131600" lon="-2.389513300">
+ <ele>434.000000</ele>
+ <name>TP0196</name>
+</trkpt>
+<trkpt lat="54.776036600" lon="-2.389528300">
+ <ele>434.000000</ele>
+ <name>TP0197</name>
+</trkpt>
+<trkpt lat="54.775950000" lon="-2.389588300">
+ <ele>434.000000</ele>
+ <name>TP0198</name>
+</trkpt>
+<trkpt lat="54.775869900" lon="-2.389673300">
+ <ele>434.000000</ele>
+ <name>TP0199</name>
+</trkpt>
+<trkpt lat="54.775421600" lon="-2.390260000">
+ <ele>434.000000</ele>
+ <name>TP0200</name>
+</trkpt>
+<trkpt lat="54.775148300" lon="-2.390599900">
+ <ele>436.000000</ele>
+ <name>TP0201</name>
+</trkpt>
+<trkpt lat="54.775055000" lon="-2.390693300">
+ <ele>437.000000</ele>
+ <name>TP0202</name>
+</trkpt>
+<trkpt lat="54.774955000" lon="-2.390766600">
+ <ele>438.000000</ele>
+ <name>TP0203</name>
+</trkpt>
+<trkpt lat="54.774851600" lon="-2.390820000">
+ <ele>438.000000</ele>
+ <name>TP0204</name>
+</trkpt>
+<trkpt lat="54.773601600" lon="-2.391266600">
+ <ele>438.000000</ele>
+ <name>TP0205</name>
+</trkpt>
+<trkpt lat="54.773549900" lon="-2.391251600">
+ <ele>437.000000</ele>
+ <name>TP0206</name>
+</trkpt>
+<trkpt lat="54.773511600" lon="-2.391199900">
+ <ele>438.000000</ele>
+ <name>TP0207</name>
+</trkpt>
+<trkpt lat="54.773491600" lon="-2.391115000">
+ <ele>438.000000</ele>
+ <name>TP0208</name>
+</trkpt>
+<trkpt lat="54.773481600" lon="-2.391008300">
+ <ele>439.000000</ele>
+ <name>TP0209</name>
+</trkpt>
+<trkpt lat="54.773463300" lon="-2.390601600">
+ <ele>442.000000</ele>
+ <name>TP0210</name>
+</trkpt>
+<trkpt lat="54.773476600" lon="-2.389571600">
+ <ele>447.000000</ele>
+ <name>TP0211</name>
+</trkpt>
+<trkpt lat="54.773820000" lon="-2.378883300">
+ <ele>499.000000</ele>
+ <name>TP0212</name>
+</trkpt>
+<trkpt lat="54.773753300" lon="-2.378283300">
+ <ele>499.000000</ele>
+ <name>TP0213</name>
+</trkpt>
+<trkpt lat="54.773753300" lon="-2.378058300">
+ <ele>500.000000</ele>
+ <name>TP0214</name>
+</trkpt>
+<trkpt lat="54.773773300" lon="-2.377823300">
+ <ele>501.000000</ele>
+ <name>TP0215</name>
+</trkpt>
+<trkpt lat="54.773850000" lon="-2.377334900">
+ <ele>503.000000</ele>
+ <name>TP0216</name>
+</trkpt>
+<trkpt lat="54.773961600" lon="-2.376848300">
+ <ele>507.000000</ele>
+ <name>TP0217</name>
+</trkpt>
+<trkpt lat="54.774771600" lon="-2.373601600">
+ <ele>521.000000</ele>
+ <name>TP0218</name>
+</trkpt>
+<trkpt lat="54.774845000" lon="-2.373066600">
+ <ele>523.000000</ele>
+ <name>TP0219</name>
+</trkpt>
+<trkpt lat="54.775214900" lon="-2.369345000">
+ <ele>544.000000</ele>
+ <name>TP0220</name>
+</trkpt>
+<trkpt lat="54.775211600" lon="-2.369111600">
+ <ele>545.000000</ele>
+ <name>TP0221</name>
+</trkpt>
+<trkpt lat="54.775159900" lon="-2.368650000">
+ <ele>547.000000</ele>
+ <name>TP0222</name>
+</trkpt>
+<trkpt lat="54.775025000" lon="-2.367623300">
+ <ele>551.000000</ele>
+ <name>TP0223</name>
+</trkpt>
+<trkpt lat="54.775038200" lon="-2.367426600">
+ <ele>551.000000</ele>
+ <name>TP0224</name>
+</trkpt>
+<trkpt lat="54.775091600" lon="-2.367238300">
+ <ele>553.000000</ele>
+ <name>TP0225</name>
+</trkpt>
+<trkpt lat="54.775165000" lon="-2.367064900">
+ <ele>555.000000</ele>
+ <name>TP0226</name>
+</trkpt>
+<trkpt lat="54.775343300" lon="-2.366756600">
+ <ele>560.000000</ele>
+ <name>TP0227</name>
+</trkpt>
+<trkpt lat="54.775528200" lon="-2.366473300">
+ <ele>563.000000</ele>
+ <name>TP0228</name>
+</trkpt>
+<trkpt lat="54.775604900" lon="-2.366301600">
+ <ele>565.000000</ele>
+ <name>TP0229</name>
+</trkpt>
+<trkpt lat="54.778101600" lon="-2.359294900">
+ <ele>603.000000</ele>
+ <name>TP0230</name>
+</trkpt>
+<trkpt lat="54.778278300" lon="-2.358960000">
+ <ele>603.000000</ele>
+ <name>TP0231</name>
+</trkpt>
+<trkpt lat="54.779294900" lon="-2.357069900">
+ <ele>590.000000</ele>
+ <name>TP0232</name>
+</trkpt>
+<trkpt lat="54.779351600" lon="-2.357001600">
+ <ele>590.000000</ele>
+ <name>TP0233</name>
+</trkpt>
+<trkpt lat="54.779648200" lon="-2.356699900">
+ <ele>586.000000</ele>
+ <name>TP0234</name>
+</trkpt>
+<trkpt lat="54.779784900" lon="-2.356500000">
+ <ele>585.000000</ele>
+ <name>TP0235</name>
+</trkpt>
+<trkpt lat="54.779856600" lon="-2.356361600">
+ <ele>583.000000</ele>
+ <name>TP0236</name>
+</trkpt>
+<trkpt lat="54.780335000" lon="-2.355318300">
+ <ele>574.000000</ele>
+ <name>TP0237</name>
+</trkpt>
+<trkpt lat="54.780719900" lon="-2.354239900">
+ <ele>563.000000</ele>
+ <name>TP0238</name>
+</trkpt>
+<trkpt lat="54.781054900" lon="-2.353219900">
+ <ele>554.000000</ele>
+ <name>TP0239</name>
+</trkpt>
+<trkpt lat="54.781328300" lon="-2.352574900">
+ <ele>547.000000</ele>
+ <name>TP0240</name>
+</trkpt>
+<trkpt lat="54.781418300" lon="-2.352443300">
+ <ele>545.000000</ele>
+ <name>TP0241</name>
+</trkpt>
+<trkpt lat="54.782281600" lon="-2.351400000">
+ <ele>531.000000</ele>
+ <name>TP0242</name>
+</trkpt>
+<trkpt lat="54.782341600" lon="-2.351331600">
+ <ele>532.000000</ele>
+ <name>TP0243</name>
+</trkpt>
+<trkpt lat="54.782450000" lon="-2.351241600">
+ <ele>530.000000</ele>
+ <name>TP0244</name>
+</trkpt>
+<trkpt lat="54.783184900" lon="-2.350700000">
+ <ele>524.000000</ele>
+ <name>TP0245</name>
+</trkpt>
+<trkpt lat="54.783406600" lon="-2.350455000">
+ <ele>522.000000</ele>
+ <name>TP0246</name>
+</trkpt>
+<trkpt lat="54.783524900" lon="-2.350296600">
+ <ele>520.000000</ele>
+ <name>TP0247</name>
+</trkpt>
+<trkpt lat="54.783868300" lon="-2.349748300">
+ <ele>513.000000</ele>
+ <name>TP0248</name>
+</trkpt>
+<trkpt lat="54.785045000" lon="-2.347659900">
+ <ele>488.000000</ele>
+ <name>TP0249</name>
+</trkpt>
+<trkpt lat="54.785116600" lon="-2.347568300">
+ <ele>486.000000</ele>
+ <name>TP0250</name>
+</trkpt>
+<trkpt lat="54.785788300" lon="-2.346845000">
+ <ele>476.000000</ele>
+ <name>TP0251</name>
+</trkpt>
+<trkpt lat="54.786218300" lon="-2.346419900">
+ <ele>468.000000</ele>
+ <name>TP0252</name>
+</trkpt>
+<trkpt lat="54.786350000" lon="-2.346223300">
+ <ele>464.000000</ele>
+ <name>TP0253</name>
+</trkpt>
+<trkpt lat="54.786666600" lon="-2.345745000">
+ <ele>454.000000</ele>
+ <name>TP0254</name>
+</trkpt>
+<trkpt lat="54.786888300" lon="-2.345465000">
+ <ele>448.000000</ele>
+ <name>TP0255</name>
+</trkpt>
+<trkpt lat="54.786926600" lon="-2.345376600">
+ <ele>447.000000</ele>
+ <name>TP0256</name>
+</trkpt>
+<trkpt lat="54.786953300" lon="-2.345276600">
+ <ele>446.000000</ele>
+ <name>TP0257</name>
+</trkpt>
+<trkpt lat="54.787145000" lon="-2.344398300">
+ <ele>440.000000</ele>
+ <name>TP0258</name>
+</trkpt>
+<trkpt lat="54.787168300" lon="-2.344331600">
+ <ele>439.000000</ele>
+ <name>TP0259</name>
+</trkpt>
+<trkpt lat="54.787168300" lon="-2.344293300">
+ <ele>439.000000</ele>
+ <name>TP0260</name>
+</trkpt>
+<trkpt lat="54.787164900" lon="-2.344254900">
+ <ele>439.000000</ele>
+ <name>TP0261</name>
+</trkpt>
+<trkpt lat="54.787156600" lon="-2.344218300">
+ <ele>439.000000</ele>
+ <name>TP0262</name>
+</trkpt>
+<trkpt lat="54.787139900" lon="-2.344179900">
+ <ele>439.000000</ele>
+ <name>TP0263</name>
+</trkpt>
+<trkpt lat="54.787114900" lon="-2.344158300">
+ <ele>439.000000</ele>
+ <name>TP0264</name>
+</trkpt>
+<trkpt lat="54.787066600" lon="-2.344123300">
+ <ele>439.000000</ele>
+ <name>TP0265</name>
+</trkpt>
+<trkpt lat="54.787026600" lon="-2.344096600">
+ <ele>440.000000</ele>
+ <name>TP0266</name>
+</trkpt>
+<trkpt lat="54.787008300" lon="-2.344091600">
+ <ele>440.000000</ele>
+ <name>TP0267</name>
+</trkpt>
+<trkpt lat="54.786986600" lon="-2.344088300">
+ <ele>439.000000</ele>
+ <name>TP0268</name>
+</trkpt>
+<trkpt lat="54.786936600" lon="-2.344063300">
+ <ele>439.000000</ele>
+ <name>TP0269</name>
+</trkpt>
+<trkpt lat="54.786913300" lon="-2.344038300">
+ <ele>439.000000</ele>
+ <name>TP0270</name>
+</trkpt>
+<trkpt lat="54.786893200" lon="-2.344019900">
+ <ele>439.000000</ele>
+ <name>TP0271</name>
+</trkpt>
+<trkpt lat="54.786899900" lon="-2.344026600">
+ <ele>439.000000</ele>
+ <name>TP0272</name>
+</trkpt>
+<trkpt lat="54.786904900" lon="-2.344041600">
+ <ele>439.000000</ele>
+ <name>TP0273</name>
+</trkpt>
+<trkpt lat="54.786918300" lon="-2.344124900">
+ <ele>439.000000</ele>
+ <name>TP0274</name>
+</trkpt>
+<trkpt lat="54.786916600" lon="-2.344124900">
+ <ele>439.000000</ele>
+ <name>TP0275</name>
+</trkpt>
+<trkpt lat="54.786926600" lon="-2.344168300">
+ <ele>439.000000</ele>
+ <name>TP0276</name>
+</trkpt>
+</trkseg>
+</trk>
+<trk>
+<trkseg>
+<trkpt lat="54.787003300" lon="-2.344136600">
+ <ele>438.000000</ele>
+ <name>TP0277</name>
+</trkpt>
+<trkpt lat="54.787016600" lon="-2.344141600">
+ <ele>438.000000</ele>
+ <name>TP0278</name>
+</trkpt>
+<trkpt lat="54.787046600" lon="-2.344109900">
+ <ele>438.000000</ele>
+ <name>TP0279</name>
+</trkpt>
+<trkpt lat="54.787048300" lon="-2.344135000">
+ <ele>438.000000</ele>
+ <name>TP0280</name>
+</trkpt>
+<trkpt lat="54.787048300" lon="-2.344139900">
+ <ele>438.000000</ele>
+ <name>TP0281</name>
+</trkpt>
+<trkpt lat="54.786858300" lon="-2.344611600">
+ <ele>438.000000</ele>
+ <name>TP0282</name>
+</trkpt>
+<trkpt lat="54.786866600" lon="-2.344616600">
+ <ele>438.000000</ele>
+ <name>TP0283</name>
+</trkpt>
+<trkpt lat="54.786973300" lon="-2.344453300">
+ <ele>438.000000</ele>
+ <name>TP0284</name>
+</trkpt>
+<trkpt lat="54.787065000" lon="-2.344263300">
+ <ele>438.000000</ele>
+ <name>TP0285</name>
+</trkpt>
+<trkpt lat="54.787096600" lon="-2.344181600">
+ <ele>438.000000</ele>
+ <name>TP0286</name>
+</trkpt>
+<trkpt lat="54.787118300" lon="-2.344081600">
+ <ele>438.000000</ele>
+ <name>TP0287</name>
+</trkpt>
+<trkpt lat="54.787065000" lon="-2.344088300">
+ <ele>438.000000</ele>
+ <name>TP0288</name>
+</trkpt>
+<trkpt lat="54.787059900" lon="-2.344079900">
+ <ele>438.000000</ele>
+ <name>TP0289</name>
+</trkpt>
+<trkpt lat="54.787061600" lon="-2.343953300">
+ <ele>438.000000</ele>
+ <name>TP0290</name>
+</trkpt>
+<trkpt lat="54.787084900" lon="-2.343946600">
+ <ele>438.000000</ele>
+ <name>TP0291</name>
+</trkpt>
+<trkpt lat="54.787088300" lon="-2.343961600">
+ <ele>438.000000</ele>
+ <name>TP0292</name>
+</trkpt>
+<trkpt lat="54.787066600" lon="-2.344133300">
+ <ele>438.000000</ele>
+ <name>TP0293</name>
+</trkpt>
+<trkpt lat="54.786948300" lon="-2.344063300">
+ <ele>438.000000</ele>
+ <name>TP0294</name>
+</trkpt>
+<trkpt lat="54.786954900" lon="-2.344058300">
+ <ele>438.000000</ele>
+ <name>TP0295</name>
+</trkpt>
+<trkpt lat="54.786965000" lon="-2.344054900">
+ <ele>438.000000</ele>
+ <name>TP0296</name>
+</trkpt>
+<trkpt lat="54.786971600" lon="-2.344044900">
+ <ele>438.000000</ele>
+ <name>TP0297</name>
+</trkpt>
+<trkpt lat="54.786984900" lon="-2.344030000">
+ <ele>438.000000</ele>
+ <name>TP0298</name>
+</trkpt>
+<trkpt lat="54.786999900" lon="-2.344011600">
+ <ele>438.000000</ele>
+ <name>TP0299</name>
+</trkpt>
+<trkpt lat="54.787011600" lon="-2.344000000">
+ <ele>438.000000</ele>
+ <name>TP0300</name>
+</trkpt>
+<trkpt lat="54.787031600" lon="-2.343974900">
+ <ele>438.000000</ele>
+ <name>TP0301</name>
+</trkpt>
+<trkpt lat="54.787046600" lon="-2.343946600">
+ <ele>438.000000</ele>
+ <name>TP0302</name>
+</trkpt>
+<trkpt lat="54.787088300" lon="-2.343883300">
+ <ele>438.000000</ele>
+ <name>TP0303</name>
+</trkpt>
+<trkpt lat="54.787111600" lon="-2.343849900">
+ <ele>438.000000</ele>
+ <name>TP0304</name>
+</trkpt>
+<trkpt lat="54.787228300" lon="-2.343698300">
+ <ele>438.000000</ele>
+ <name>TP0305</name>
+</trkpt>
+<trkpt lat="54.786956600" lon="-2.344033300">
+ <ele>438.000000</ele>
+ <name>TP0306</name>
+</trkpt>
+<trkpt lat="54.786953300" lon="-2.344036600">
+ <ele>438.000000</ele>
+ <name>TP0307</name>
+</trkpt>
+<trkpt lat="54.786980000" lon="-2.344003300">
+ <ele>416.000000</ele>
+ <name>TP0308</name>
+</trkpt>
+<trkpt lat="54.786976600" lon="-2.344009900">
+ <ele>416.000000</ele>
+ <name>TP0309</name>
+</trkpt>
+<trkpt lat="54.786983300" lon="-2.344009900">
+ <ele>416.000000</ele>
+ <name>TP0310</name>
+</trkpt>
+<trkpt lat="54.786998300" lon="-2.344009900">
+ <ele>416.000000</ele>
+ <name>TP0311</name>
+</trkpt>
+<trkpt lat="54.787003300" lon="-2.344009900">
+ <ele>416.000000</ele>
+ <name>TP0312</name>
+</trkpt>
+<trkpt lat="54.787016600" lon="-2.344009900">
+ <ele>416.000000</ele>
+ <name>TP0313</name>
+</trkpt>
+<trkpt lat="54.787021600" lon="-2.344009900">
+ <ele>416.000000</ele>
+ <name>TP0314</name>
+</trkpt>
+<trkpt lat="54.787028300" lon="-2.344011600">
+ <ele>416.000000</ele>
+ <name>TP0315</name>
+</trkpt>
+<trkpt lat="54.787018300" lon="-2.344021600">
+ <ele>416.000000</ele>
+ <name>TP0316</name>
+</trkpt>
+<trkpt lat="54.787021600" lon="-2.344018300">
+ <ele>416.000000</ele>
+ <name>TP0317</name>
+</trkpt>
+<trkpt lat="54.787029900" lon="-2.344023300">
+ <ele>416.000000</ele>
+ <name>TP0318</name>
+</trkpt>
+<trkpt lat="54.787031600" lon="-2.344026600">
+ <ele>416.000000</ele>
+ <name>TP0319</name>
+</trkpt>
+<trkpt lat="54.787021600" lon="-2.344035000">
+ <ele>416.000000</ele>
+ <name>TP0320</name>
+</trkpt>
+<trkpt lat="54.787020000" lon="-2.344036600">
+ <ele>416.000000</ele>
+ <name>TP0321</name>
+</trkpt>
+<trkpt lat="54.787016600" lon="-2.344044900">
+ <ele>417.000000</ele>
+ <name>TP0322</name>
+</trkpt>
+<trkpt lat="54.787023300" lon="-2.344050000">
+ <ele>417.000000</ele>
+ <name>TP0323</name>
+</trkpt>
+<trkpt lat="54.787021600" lon="-2.344059900">
+ <ele>417.000000</ele>
+ <name>TP0324</name>
+</trkpt>
+<trkpt lat="54.787020000" lon="-2.344056600">
+ <ele>417.000000</ele>
+ <name>TP0325</name>
+</trkpt>
+<trkpt lat="54.787021600" lon="-2.344051600">
+ <ele>417.000000</ele>
+ <name>TP0326</name>
+</trkpt>
+<trkpt lat="54.787028300" lon="-2.344041600">
+ <ele>418.000000</ele>
+ <name>TP0327</name>
+</trkpt>
+<trkpt lat="54.787028300" lon="-2.344033300">
+ <ele>418.000000</ele>
+ <name>TP0328</name>
+</trkpt>
+<trkpt lat="54.787020000" lon="-2.344039900">
+ <ele>418.000000</ele>
+ <name>TP0329</name>
+</trkpt>
+<trkpt lat="54.787024900" lon="-2.344019900">
+ <ele>418.000000</ele>
+ <name>TP0330</name>
+</trkpt>
+<trkpt lat="54.787018300" lon="-2.344031600">
+ <ele>418.000000</ele>
+ <name>TP0331</name>
+</trkpt>
+<trkpt lat="54.787026600" lon="-2.344000000">
+ <ele>418.000000</ele>
+ <name>TP0332</name>
+</trkpt>
+<trkpt lat="54.787020000" lon="-2.344004900">
+ <ele>418.000000</ele>
+ <name>TP0333</name>
+</trkpt>
+<trkpt lat="54.787020000" lon="-2.344006600">
+ <ele>418.000000</ele>
+ <name>TP0334</name>
+</trkpt>
+<trkpt lat="54.787018300" lon="-2.344013300">
+ <ele>418.000000</ele>
+ <name>TP0335</name>
+</trkpt>
+<trkpt lat="54.787018300" lon="-2.344030000">
+ <ele>418.000000</ele>
+ <name>TP0336</name>
+</trkpt>
+<trkpt lat="54.787011600" lon="-2.344059900">
+ <ele>418.000000</ele>
+ <name>TP0337</name>
+</trkpt>
+<trkpt lat="54.787018300" lon="-2.344051600">
+ <ele>418.000000</ele>
+ <name>TP0338</name>
+</trkpt>
+<trkpt lat="54.787018300" lon="-2.344056600">
+ <ele>418.000000</ele>
+ <name>TP0339</name>
+</trkpt>
+<trkpt lat="54.787003300" lon="-2.344066600">
+ <ele>419.000000</ele>
+ <name>TP0340</name>
+</trkpt>
+<trkpt lat="54.787008300" lon="-2.344068300">
+ <ele>419.000000</ele>
+ <name>TP0341</name>
+</trkpt>
+<trkpt lat="54.787006600" lon="-2.344073300">
+ <ele>419.000000</ele>
+ <name>TP0342</name>
+</trkpt>
+<trkpt lat="54.787005000" lon="-2.344074900">
+ <ele>419.000000</ele>
+ <name>TP0343</name>
+</trkpt>
+<trkpt lat="54.787011600" lon="-2.344086600">
+ <ele>419.000000</ele>
+ <name>TP0344</name>
+</trkpt>
+<trkpt lat="54.787014900" lon="-2.344094900">
+ <ele>419.000000</ele>
+ <name>TP0345</name>
+</trkpt>
+<trkpt lat="54.787020000" lon="-2.344098300">
+ <ele>419.000000</ele>
+ <name>TP0346</name>
+</trkpt>
+<trkpt lat="54.787020000" lon="-2.344093300">
+ <ele>419.000000</ele>
+ <name>TP0347</name>
+</trkpt>
+<trkpt lat="54.787016600" lon="-2.344106600">
+ <ele>419.000000</ele>
+ <name>TP0348</name>
+</trkpt>
+<trkpt lat="54.787005000" lon="-2.344124900">
+ <ele>419.000000</ele>
+ <name>TP0349</name>
+</trkpt>
+<trkpt lat="54.786996600" lon="-2.344141600">
+ <ele>419.000000</ele>
+ <name>TP0350</name>
+</trkpt>
+<trkpt lat="54.786978300" lon="-2.344156600">
+ <ele>419.000000</ele>
+ <name>TP0351</name>
+</trkpt>
+<trkpt lat="54.786965000" lon="-2.344171600">
+ <ele>419.000000</ele>
+ <name>TP0352</name>
+</trkpt>
+<trkpt lat="54.786953300" lon="-2.344184900">
+ <ele>419.000000</ele>
+ <name>TP0353</name>
+</trkpt>
+<trkpt lat="54.786939900" lon="-2.344193300">
+ <ele>419.000000</ele>
+ <name>TP0354</name>
+</trkpt>
+<trkpt lat="54.786933300" lon="-2.344209900">
+ <ele>419.000000</ele>
+ <name>TP0355</name>
+</trkpt>
+<trkpt lat="54.786919900" lon="-2.344225000">
+ <ele>419.000000</ele>
+ <name>TP0356</name>
+</trkpt>
+<trkpt lat="54.786898300" lon="-2.344236600">
+ <ele>419.000000</ele>
+ <name>TP0357</name>
+</trkpt>
+<trkpt lat="54.786866600" lon="-2.344271600">
+ <ele>420.000000</ele>
+ <name>TP0358</name>
+</trkpt>
+<trkpt lat="54.786868300" lon="-2.344234900">
+ <ele>420.000000</ele>
+ <name>TP0359</name>
+</trkpt>
+<trkpt lat="54.786881600" lon="-2.344228300">
+ <ele>420.000000</ele>
+ <name>TP0360</name>
+</trkpt>
+<trkpt lat="54.786888300" lon="-2.344225000">
+ <ele>420.000000</ele>
+ <name>TP0361</name>
+</trkpt>
+<trkpt lat="54.786901600" lon="-2.344218300">
+ <ele>420.000000</ele>
+ <name>TP0362</name>
+</trkpt>
+<trkpt lat="54.786914900" lon="-2.344223300">
+ <ele>420.000000</ele>
+ <name>TP0363</name>
+</trkpt>
+<trkpt lat="54.786929900" lon="-2.344221600">
+ <ele>420.000000</ele>
+ <name>TP0364</name>
+</trkpt>
+<trkpt lat="54.786953300" lon="-2.344219900">
+ <ele>420.000000</ele>
+ <name>TP0365</name>
+</trkpt>
+<trkpt lat="54.786986600" lon="-2.344206600">
+ <ele>420.000000</ele>
+ <name>TP0366</name>
+</trkpt>
+<trkpt lat="54.786983300" lon="-2.344206600">
+ <ele>420.000000</ele>
+ <name>TP0367</name>
+</trkpt>
+<trkpt lat="54.787008300" lon="-2.344206600">
+ <ele>421.000000</ele>
+ <name>TP0368</name>
+</trkpt>
+<trkpt lat="54.787028300" lon="-2.344208300">
+ <ele>421.000000</ele>
+ <name>TP0369</name>
+</trkpt>
+<trkpt lat="54.787041600" lon="-2.344209900">
+ <ele>421.000000</ele>
+ <name>TP0370</name>
+</trkpt>
+<trkpt lat="54.787054900" lon="-2.344209900">
+ <ele>421.000000</ele>
+ <name>TP0371</name>
+</trkpt>
+<trkpt lat="54.787063300" lon="-2.344208300">
+ <ele>421.000000</ele>
+ <name>TP0372</name>
+</trkpt>
+<trkpt lat="54.787075000" lon="-2.344208300">
+ <ele>421.000000</ele>
+ <name>TP0373</name>
+</trkpt>
+<trkpt lat="54.787084900" lon="-2.344208300">
+ <ele>421.000000</ele>
+ <name>TP0374</name>
+</trkpt>
+<trkpt lat="54.787094900" lon="-2.344208300">
+ <ele>421.000000</ele>
+ <name>TP0375</name>
+</trkpt>
+<trkpt lat="54.787103200" lon="-2.344208300">
+ <ele>421.000000</ele>
+ <name>TP0376</name>
+</trkpt>
+<trkpt lat="54.787116600" lon="-2.344208300">
+ <ele>421.000000</ele>
+ <name>TP0377</name>
+</trkpt>
+<trkpt lat="54.787124900" lon="-2.344208300">
+ <ele>421.000000</ele>
+ <name>TP0378</name>
+</trkpt>
+<trkpt lat="54.787175000" lon="-2.344206600">
+ <ele>421.000000</ele>
+ <name>TP0379</name>
+</trkpt>
+<trkpt lat="54.787171600" lon="-2.344206600">
+ <ele>421.000000</ele>
+ <name>TP0380</name>
+</trkpt>
+<trkpt lat="54.787160000" lon="-2.344205000">
+ <ele>421.000000</ele>
+ <name>TP0381</name>
+</trkpt>
+<trkpt lat="54.787148300" lon="-2.344203300">
+ <ele>421.000000</ele>
+ <name>TP0382</name>
+</trkpt>
+<trkpt lat="54.787044900" lon="-2.344186600">
+ <ele>421.000000</ele>
+ <name>TP0383</name>
+</trkpt>
+<trkpt lat="54.787054900" lon="-2.344186600">
+ <ele>421.000000</ele>
+ <name>TP0384</name>
+</trkpt>
+<trkpt lat="54.787066600" lon="-2.344186600">
+ <ele>421.000000</ele>
+ <name>TP0385</name>
+</trkpt>
+<trkpt lat="54.787121600" lon="-2.344191600">
+ <ele>421.000000</ele>
+ <name>TP0386</name>
+</trkpt>
+<trkpt lat="54.787154900" lon="-2.344196600">
+ <ele>421.000000</ele>
+ <name>TP0387</name>
+</trkpt>
+<trkpt lat="54.787179900" lon="-2.344199900">
+ <ele>421.000000</ele>
+ <name>TP0388</name>
+</trkpt>
+<trkpt lat="54.787194900" lon="-2.344203300">
+ <ele>421.000000</ele>
+ <name>TP0389</name>
+</trkpt>
+<trkpt lat="54.787203300" lon="-2.344205000">
+ <ele>421.000000</ele>
+ <name>TP0390</name>
+</trkpt>
+<trkpt lat="54.787209900" lon="-2.344206600">
+ <ele>421.000000</ele>
+ <name>TP0391</name>
+</trkpt>
+<trkpt lat="54.787213300" lon="-2.344206600">
+ <ele>421.000000</ele>
+ <name>TP0392</name>
+</trkpt>
+<trkpt lat="54.787215000" lon="-2.344206600">
+ <ele>421.000000</ele>
+ <name>TP0393</name>
+</trkpt>
+<trkpt lat="54.787218300" lon="-2.344208300">
+ <ele>421.000000</ele>
+ <name>TP0394</name>
+</trkpt>
+<trkpt lat="54.787216600" lon="-2.344208300">
+ <ele>421.000000</ele>
+ <name>TP0395</name>
+</trkpt>
+<trkpt lat="54.787218300" lon="-2.344208300">
+ <ele>421.000000</ele>
+ <name>TP0396</name>
+</trkpt>
+<trkpt lat="54.787201600" lon="-2.344209900">
+ <ele>421.000000</ele>
+ <name>TP0397</name>
+</trkpt>
+<trkpt lat="54.787190000" lon="-2.344213300">
+ <ele>421.000000</ele>
+ <name>TP0398</name>
+</trkpt>
+<trkpt lat="54.787176600" lon="-2.344198300">
+ <ele>421.000000</ele>
+ <name>TP0399</name>
+</trkpt>
+<trkpt lat="54.787168300" lon="-2.344190000">
+ <ele>421.000000</ele>
+ <name>TP0400</name>
+</trkpt>
+<trkpt lat="54.787156600" lon="-2.344176600">
+ <ele>421.000000</ele>
+ <name>TP0401</name>
+</trkpt>
+<trkpt lat="54.787148300" lon="-2.344166600">
+ <ele>421.000000</ele>
+ <name>TP0402</name>
+</trkpt>
+<trkpt lat="54.787136600" lon="-2.344153300">
+ <ele>421.000000</ele>
+ <name>TP0403</name>
+</trkpt>
+<trkpt lat="54.787126600" lon="-2.344143300">
+ <ele>421.000000</ele>
+ <name>TP0404</name>
+</trkpt>
+<trkpt lat="54.787114900" lon="-2.344131600">
+ <ele>421.000000</ele>
+ <name>TP0405</name>
+</trkpt>
+<trkpt lat="54.787105000" lon="-2.344123300">
+ <ele>421.000000</ele>
+ <name>TP0406</name>
+</trkpt>
+<trkpt lat="54.787094900" lon="-2.344111600">
+ <ele>421.000000</ele>
+ <name>TP0407</name>
+</trkpt>
+<trkpt lat="54.787084900" lon="-2.344103300">
+ <ele>421.000000</ele>
+ <name>TP0408</name>
+</trkpt>
+<trkpt lat="54.787076600" lon="-2.344094900">
+ <ele>421.000000</ele>
+ <name>TP0409</name>
+</trkpt>
+<trkpt lat="54.787061600" lon="-2.344088300">
+ <ele>421.000000</ele>
+ <name>TP0410</name>
+</trkpt>
+<trkpt lat="54.787043300" lon="-2.344101600">
+ <ele>420.000000</ele>
+ <name>TP0411</name>
+</trkpt>
+<trkpt lat="54.787029900" lon="-2.344089900">
+ <ele>416.000000</ele>
+ <name>TP0412</name>
+</trkpt>
+<trkpt lat="54.787016600" lon="-2.344078300">
+ <ele>413.000000</ele>
+ <name>TP0413</name>
+</trkpt>
+<trkpt lat="54.787005000" lon="-2.344070000">
+ <ele>410.000000</ele>
+ <name>TP0414</name>
+</trkpt>
+<trkpt lat="54.786988300" lon="-2.344058300">
+ <ele>407.000000</ele>
+ <name>TP0415</name>
+</trkpt>
+<trkpt lat="54.786980000" lon="-2.344056600">
+ <ele>406.000000</ele>
+ <name>TP0416</name>
+</trkpt>
+<trkpt lat="54.786978300" lon="-2.344065000">
+ <ele>408.000000</ele>
+ <name>TP0417</name>
+</trkpt>
+<trkpt lat="54.786983300" lon="-2.344096600">
+ <ele>415.000000</ele>
+ <name>TP0418</name>
+</trkpt>
+<trkpt lat="54.786984900" lon="-2.344073300">
+ <ele>415.000000</ele>
+ <name>TP0419</name>
+</trkpt>
+<trkpt lat="54.786981600" lon="-2.344068300">
+ <ele>415.000000</ele>
+ <name>TP0420</name>
+</trkpt>
+<trkpt lat="54.786974900" lon="-2.344066600">
+ <ele>415.000000</ele>
+ <name>TP0421</name>
+</trkpt>
+<trkpt lat="54.786969900" lon="-2.344068300">
+ <ele>415.000000</ele>
+ <name>TP0422</name>
+</trkpt>
+<trkpt lat="54.786971600" lon="-2.344063300">
+ <ele>415.000000</ele>
+ <name>TP0423</name>
+</trkpt>
+<trkpt lat="54.786966600" lon="-2.344071600">
+ <ele>415.000000</ele>
+ <name>TP0424</name>
+</trkpt>
+<trkpt lat="54.786966600" lon="-2.344076600">
+ <ele>415.000000</ele>
+ <name>TP0425</name>
+</trkpt>
+<trkpt lat="54.786963200" lon="-2.344074900">
+ <ele>415.000000</ele>
+ <name>TP0426</name>
+</trkpt>
+<trkpt lat="54.786963200" lon="-2.344079900">
+ <ele>415.000000</ele>
+ <name>TP0427</name>
+</trkpt>
+<trkpt lat="54.786961600" lon="-2.344089900">
+ <ele>415.000000</ele>
+ <name>TP0428</name>
+</trkpt>
+<trkpt lat="54.786961600" lon="-2.344103300">
+ <ele>415.000000</ele>
+ <name>TP0429</name>
+</trkpt>
+<trkpt lat="54.786976600" lon="-2.344111600">
+ <ele>415.000000</ele>
+ <name>TP0430</name>
+</trkpt>
+<trkpt lat="54.786976600" lon="-2.344114900">
+ <ele>415.000000</ele>
+ <name>TP0431</name>
+</trkpt>
+<trkpt lat="54.786983300" lon="-2.344108300">
+ <ele>415.000000</ele>
+ <name>TP0432</name>
+</trkpt>
+<trkpt lat="54.787006600" lon="-2.344096600">
+ <ele>415.000000</ele>
+ <name>TP0433</name>
+</trkpt>
+<trkpt lat="54.787020000" lon="-2.344086600">
+ <ele>415.000000</ele>
+ <name>TP0434</name>
+</trkpt>
+<trkpt lat="54.787029900" lon="-2.344078300">
+ <ele>415.000000</ele>
+ <name>TP0435</name>
+</trkpt>
+<trkpt lat="54.787044900" lon="-2.344066600">
+ <ele>415.000000</ele>
+ <name>TP0436</name>
+</trkpt>
+<trkpt lat="54.787058300" lon="-2.344054900">
+ <ele>415.000000</ele>
+ <name>TP0437</name>
+</trkpt>
+<trkpt lat="54.787063300" lon="-2.344048300">
+ <ele>416.000000</ele>
+ <name>TP0438</name>
+</trkpt>
+<trkpt lat="54.787069900" lon="-2.344043300">
+ <ele>416.000000</ele>
+ <name>TP0439</name>
+</trkpt>
+<trkpt lat="54.787078300" lon="-2.344036600">
+ <ele>416.000000</ele>
+ <name>TP0440</name>
+</trkpt>
+<trkpt lat="54.787105000" lon="-2.344015000">
+ <ele>416.000000</ele>
+ <name>TP0441</name>
+</trkpt>
+<trkpt lat="54.787118300" lon="-2.344003300">
+ <ele>416.000000</ele>
+ <name>TP0442</name>
+</trkpt>
+<trkpt lat="54.787131600" lon="-2.343993300">
+ <ele>416.000000</ele>
+ <name>TP0443</name>
+</trkpt>
+<trkpt lat="54.787141600" lon="-2.343986600">
+ <ele>416.000000</ele>
+ <name>TP0444</name>
+</trkpt>
+<trkpt lat="54.787154900" lon="-2.343976600">
+ <ele>416.000000</ele>
+ <name>TP0445</name>
+</trkpt>
+<trkpt lat="54.787164900" lon="-2.343968300">
+ <ele>416.000000</ele>
+ <name>TP0446</name>
+</trkpt>
+<trkpt lat="54.787186600" lon="-2.343953300">
+ <ele>416.000000</ele>
+ <name>TP0447</name>
+</trkpt>
+<trkpt lat="54.787181600" lon="-2.343956600">
+ <ele>416.000000</ele>
+ <name>TP0448</name>
+</trkpt>
+<trkpt lat="54.787183300" lon="-2.343958300">
+ <ele>417.000000</ele>
+ <name>TP0449</name>
+</trkpt>
+<trkpt lat="54.787188300" lon="-2.343954900">
+ <ele>417.000000</ele>
+ <name>TP0450</name>
+</trkpt>
+<trkpt lat="54.787186600" lon="-2.343958300">
+ <ele>417.000000</ele>
+ <name>TP0451</name>
+</trkpt>
+<trkpt lat="54.787205000" lon="-2.343946600">
+ <ele>419.000000</ele>
+ <name>TP0452</name>
+</trkpt>
+<trkpt lat="54.787215000" lon="-2.343919900">
+ <ele>419.000000</ele>
+ <name>TP0453</name>
+</trkpt>
+<trkpt lat="54.787211600" lon="-2.343908300">
+ <ele>419.000000</ele>
+ <name>TP0454</name>
+</trkpt>
+<trkpt lat="54.787184900" lon="-2.343913300">
+ <ele>419.000000</ele>
+ <name>TP0455</name>
+</trkpt>
+<trkpt lat="54.787146600" lon="-2.343933300">
+ <ele>419.000000</ele>
+ <name>TP0456</name>
+</trkpt>
+<trkpt lat="54.787090000" lon="-2.343974900">
+ <ele>419.000000</ele>
+ <name>TP0457</name>
+</trkpt>
+<trkpt lat="54.787079900" lon="-2.344003300">
+ <ele>419.000000</ele>
+ <name>TP0458</name>
+</trkpt>
+<trkpt lat="54.787078300" lon="-2.344018300">
+ <ele>419.000000</ele>
+ <name>TP0459</name>
+</trkpt>
+<trkpt lat="54.787066600" lon="-2.344071600">
+ <ele>419.000000</ele>
+ <name>TP0460</name>
+</trkpt>
+<trkpt lat="54.787038300" lon="-2.344128300">
+ <ele>419.000000</ele>
+ <name>TP0461</name>
+</trkpt>
+</trkseg>
+</trk>
+<trk>
+<trkseg>
+<trkpt lat="54.786956600" lon="-2.344183300">
+ <ele>423.000000</ele>
+ <name>TP0462</name>
+</trkpt>
+<trkpt lat="54.786951600" lon="-2.344188300">
+ <ele>423.000000</ele>
+ <name>TP0463</name>
+</trkpt>
+</trkseg>
+</trk>
+<trk>
+<trkseg>
+<trkpt lat="54.786939900" lon="-2.344269900">
+ <ele>431.000000</ele>
+ <name>TP0464</name>
+</trkpt>
+<trkpt lat="54.786959900" lon="-2.344316600">
+ <ele>431.000000</ele>
+ <name>TP0465</name>
+</trkpt>
+<trkpt lat="54.786956600" lon="-2.344331600">
+ <ele>432.000000</ele>
+ <name>TP0466</name>
+</trkpt>
+<trkpt lat="54.786956600" lon="-2.344346600">
+ <ele>432.000000</ele>
+ <name>TP0467</name>
+</trkpt>
+</trkseg>
+</trk>
+<trk>
+<trkseg>
+<trkpt lat="54.786941600" lon="-2.344359900">
+ <ele>451.000000</ele>
+ <name>TP0468</name>
+</trkpt>
+<trkpt lat="54.786938300" lon="-2.344369900">
+ <ele>451.000000</ele>
+ <name>TP0469</name>
+</trkpt>
+<trkpt lat="54.786936600" lon="-2.344363300">
+ <ele>451.000000</ele>
+ <name>TP0470</name>
+</trkpt>
+<trkpt lat="54.786929900" lon="-2.344369900">
+ <ele>450.000000</ele>
+ <name>TP0471</name>
+</trkpt>
+<trkpt lat="54.786935000" lon="-2.344371600">
+ <ele>450.000000</ele>
+ <name>TP0472</name>
+</trkpt>
+<trkpt lat="54.786946600" lon="-2.344376600">
+ <ele>450.000000</ele>
+ <name>TP0473</name>
+</trkpt>
+<trkpt lat="54.786950000" lon="-2.344373300">
+ <ele>450.000000</ele>
+ <name>TP0474</name>
+</trkpt>
+<trkpt lat="54.786948300" lon="-2.344376600">
+ <ele>450.000000</ele>
+ <name>TP0475</name>
+</trkpt>
+<trkpt lat="54.786954900" lon="-2.344373300">
+ <ele>450.000000</ele>
+ <name>TP0476</name>
+</trkpt>
+<trkpt lat="54.786958300" lon="-2.344369900">
+ <ele>450.000000</ele>
+ <name>TP0477</name>
+</trkpt>
+<trkpt lat="54.786965000" lon="-2.344365000">
+ <ele>450.000000</ele>
+ <name>TP0478</name>
+</trkpt>
+<trkpt lat="54.786969900" lon="-2.344361600">
+ <ele>450.000000</ele>
+ <name>TP0479</name>
+</trkpt>
+<trkpt lat="54.786991600" lon="-2.344346600">
+ <ele>450.000000</ele>
+ <name>TP0480</name>
+</trkpt>
+<trkpt lat="54.787005000" lon="-2.344333300">
+ <ele>450.000000</ele>
+ <name>TP0481</name>
+</trkpt>
+<trkpt lat="54.787011600" lon="-2.344324900">
+ <ele>450.000000</ele>
+ <name>TP0482</name>
+</trkpt>
+<trkpt lat="54.787016600" lon="-2.344318300">
+ <ele>450.000000</ele>
+ <name>TP0483</name>
+</trkpt>
+<trkpt lat="54.787021600" lon="-2.344316600">
+ <ele>450.000000</ele>
+ <name>TP0484</name>
+</trkpt>
+<trkpt lat="54.787018300" lon="-2.344319900">
+ <ele>450.000000</ele>
+ <name>TP0485</name>
+</trkpt>
+<trkpt lat="54.787026600" lon="-2.344321600">
+ <ele>450.000000</ele>
+ <name>TP0486</name>
+</trkpt>
+<trkpt lat="54.787029900" lon="-2.344324900">
+ <ele>450.000000</ele>
+ <name>TP0487</name>
+</trkpt>
+<trkpt lat="54.787026600" lon="-2.344330000">
+ <ele>450.000000</ele>
+ <name>TP0488</name>
+</trkpt>
+<trkpt lat="54.787029900" lon="-2.344324900">
+ <ele>450.000000</ele>
+ <name>TP0489</name>
+</trkpt>
+<trkpt lat="54.787033200" lon="-2.344321600">
+ <ele>450.000000</ele>
+ <name>TP0490</name>
+</trkpt>
+<trkpt lat="54.787036600" lon="-2.344316600">
+ <ele>450.000000</ele>
+ <name>TP0491</name>
+</trkpt>
+<trkpt lat="54.787039900" lon="-2.344313300">
+ <ele>450.000000</ele>
+ <name>TP0492</name>
+</trkpt>
+<trkpt lat="54.787038300" lon="-2.344318300">
+ <ele>450.000000</ele>
+ <name>TP0493</name>
+</trkpt>
+<trkpt lat="54.787035000" lon="-2.344319900">
+ <ele>450.000000</ele>
+ <name>TP0494</name>
+</trkpt>
+<trkpt lat="54.787041600" lon="-2.344314900">
+ <ele>450.000000</ele>
+ <name>TP0495</name>
+</trkpt>
+<trkpt lat="54.787036600" lon="-2.344323300">
+ <ele>450.000000</ele>
+ <name>TP0496</name>
+</trkpt>
+<trkpt lat="54.787035000" lon="-2.344326600">
+ <ele>450.000000</ele>
+ <name>TP0497</name>
+</trkpt>
+<trkpt lat="54.787033200" lon="-2.344326600">
+ <ele>450.000000</ele>
+ <name>TP0498</name>
+</trkpt>
+<trkpt lat="54.787031600" lon="-2.344330000">
+ <ele>450.000000</ele>
+ <name>TP0499</name>
+</trkpt>
+<trkpt lat="54.787028300" lon="-2.344334900">
+ <ele>450.000000</ele>
+ <name>TP0500</name>
+</trkpt>
+<trkpt lat="54.787033200" lon="-2.344331600">
+ <ele>450.000000</ele>
+ <name>TP0501</name>
+</trkpt>
+<trkpt lat="54.787031600" lon="-2.344346600">
+ <ele>450.000000</ele>
+ <name>TP0502</name>
+</trkpt>
+<trkpt lat="54.787029900" lon="-2.344353300">
+ <ele>450.000000</ele>
+ <name>TP0503</name>
+</trkpt>
+<trkpt lat="54.787026600" lon="-2.344361600">
+ <ele>450.000000</ele>
+ <name>TP0504</name>
+</trkpt>
+<trkpt lat="54.787020000" lon="-2.344373300">
+ <ele>450.000000</ele>
+ <name>TP0505</name>
+</trkpt>
+<trkpt lat="54.787013300" lon="-2.344386600">
+ <ele>450.000000</ele>
+ <name>TP0506</name>
+</trkpt>
+<trkpt lat="54.787024900" lon="-2.344384900">
+ <ele>450.000000</ele>
+ <name>TP0507</name>
+</trkpt>
+<trkpt lat="54.787026600" lon="-2.344386600">
+ <ele>450.000000</ele>
+ <name>TP0508</name>
+</trkpt>
+<trkpt lat="54.787028300" lon="-2.344373300">
+ <ele>450.000000</ele>
+ <name>TP0509</name>
+</trkpt>
+<trkpt lat="54.787031600" lon="-2.344369900">
+ <ele>450.000000</ele>
+ <name>TP0510</name>
+</trkpt>
+<trkpt lat="54.787035000" lon="-2.344373300">
+ <ele>450.000000</ele>
+ <name>TP0511</name>
+</trkpt>
+<trkpt lat="54.787036600" lon="-2.344361600">
+ <ele>450.000000</ele>
+ <name>TP0512</name>
+</trkpt>
+<trkpt lat="54.787033200" lon="-2.344358300">
+ <ele>450.000000</ele>
+ <name>TP0513</name>
+</trkpt>
+<trkpt lat="54.787036600" lon="-2.344339900">
+ <ele>450.000000</ele>
+ <name>TP0514</name>
+</trkpt>
+<trkpt lat="54.787033200" lon="-2.344339900">
+ <ele>450.000000</ele>
+ <name>TP0515</name>
+</trkpt>
+<trkpt lat="54.787043300" lon="-2.344321600">
+ <ele>450.000000</ele>
+ <name>TP0516</name>
+</trkpt>
+<trkpt lat="54.787035000" lon="-2.344308300">
+ <ele>450.000000</ele>
+ <name>TP0517</name>
+</trkpt>
+<trkpt lat="54.787031600" lon="-2.344308300">
+ <ele>450.000000</ele>
+ <name>TP0518</name>
+</trkpt>
+<trkpt lat="54.787029900" lon="-2.344308300">
+ <ele>450.000000</ele>
+ <name>TP0519</name>
+</trkpt>
+<trkpt lat="54.787026600" lon="-2.344298300">
+ <ele>450.000000</ele>
+ <name>TP0520</name>
+</trkpt>
+<trkpt lat="54.787024900" lon="-2.344296600">
+ <ele>450.000000</ele>
+ <name>TP0521</name>
+</trkpt>
+<trkpt lat="54.787016600" lon="-2.344299900">
+ <ele>450.000000</ele>
+ <name>TP0522</name>
+</trkpt>
+<trkpt lat="54.787020000" lon="-2.344296600">
+ <ele>450.000000</ele>
+ <name>TP0523</name>
+</trkpt>
+<trkpt lat="54.787021600" lon="-2.344295000">
+ <ele>449.000000</ele>
+ <name>TP0524</name>
+</trkpt>
+<trkpt lat="54.787023300" lon="-2.344295000">
+ <ele>448.000000</ele>
+ <name>TP0525</name>
+</trkpt>
+<trkpt lat="54.787023300" lon="-2.344295000">
+ <ele>447.000000</ele>
+ <name>TP0526</name>
+</trkpt>
+<trkpt lat="54.787023300" lon="-2.344293300">
+ <ele>446.000000</ele>
+ <name>TP0527</name>
+</trkpt>
+<trkpt lat="54.787023300" lon="-2.344293300">
+ <ele>445.000000</ele>
+ <name>TP0528</name>
+</trkpt>
+<trkpt lat="54.787024900" lon="-2.344293300">
+ <ele>443.000000</ele>
+ <name>TP0529</name>
+</trkpt>
+<trkpt lat="54.787026600" lon="-2.344289900">
+ <ele>441.000000</ele>
+ <name>TP0530</name>
+</trkpt>
+<trkpt lat="54.787035000" lon="-2.344275000">
+ <ele>438.000000</ele>
+ <name>TP0531</name>
+</trkpt>
+<trkpt lat="54.787046600" lon="-2.344254900">
+ <ele>435.000000</ele>
+ <name>TP0532</name>
+</trkpt>
+<trkpt lat="54.787066600" lon="-2.344223300">
+ <ele>429.000000</ele>
+ <name>TP0533</name>
+</trkpt>
+<trkpt lat="54.787084900" lon="-2.344194900">
+ <ele>423.000000</ele>
+ <name>TP0534</name>
+</trkpt>
+<trkpt lat="54.787120000" lon="-2.344141600">
+ <ele>413.000000</ele>
+ <name>TP0535</name>
+</trkpt>
+<trkpt lat="54.787124900" lon="-2.344129900">
+ <ele>414.000000</ele>
+ <name>TP0536</name>
+</trkpt>
+<trkpt lat="54.787105000" lon="-2.344121600">
+ <ele>415.000000</ele>
+ <name>TP0537</name>
+</trkpt>
+<trkpt lat="54.787099900" lon="-2.344121600">
+ <ele>415.000000</ele>
+ <name>TP0538</name>
+</trkpt>
+<trkpt lat="54.787076600" lon="-2.344143300">
+ <ele>415.000000</ele>
+ <name>TP0539</name>
+</trkpt>
+<trkpt lat="54.787066600" lon="-2.344155000">
+ <ele>415.000000</ele>
+ <name>TP0540</name>
+</trkpt>
+<trkpt lat="54.787054900" lon="-2.344168300">
+ <ele>415.000000</ele>
+ <name>TP0541</name>
+</trkpt>
+<trkpt lat="54.787039900" lon="-2.344186600">
+ <ele>415.000000</ele>
+ <name>TP0542</name>
+</trkpt>
+<trkpt lat="54.787026600" lon="-2.344206600">
+ <ele>415.000000</ele>
+ <name>TP0543</name>
+</trkpt>
+<trkpt lat="54.787013300" lon="-2.344225000">
+ <ele>415.000000</ele>
+ <name>TP0544</name>
+</trkpt>
+<trkpt lat="54.786996600" lon="-2.344249900">
+ <ele>415.000000</ele>
+ <name>TP0545</name>
+</trkpt>
+<trkpt lat="54.786981600" lon="-2.344273300">
+ <ele>415.000000</ele>
+ <name>TP0546</name>
+</trkpt>
+<trkpt lat="54.786976600" lon="-2.344288300">
+ <ele>415.000000</ele>
+ <name>TP0547</name>
+</trkpt>
+<trkpt lat="54.786971600" lon="-2.344299900">
+ <ele>415.000000</ele>
+ <name>TP0548</name>
+</trkpt>
+<trkpt lat="54.786965000" lon="-2.344313300">
+ <ele>415.000000</ele>
+ <name>TP0549</name>
+</trkpt>
+<trkpt lat="54.786959900" lon="-2.344324900">
+ <ele>415.000000</ele>
+ <name>TP0550</name>
+</trkpt>
+<trkpt lat="54.786958300" lon="-2.344328300">
+ <ele>415.000000</ele>
+ <name>TP0551</name>
+</trkpt>
+<trkpt lat="54.786954900" lon="-2.344334900">
+ <ele>415.000000</ele>
+ <name>TP0552</name>
+</trkpt>
+<trkpt lat="54.786950000" lon="-2.344346600">
+ <ele>415.000000</ele>
+ <name>TP0553</name>
+</trkpt>
+<trkpt lat="54.786941600" lon="-2.344363300">
+ <ele>415.000000</ele>
+ <name>TP0554</name>
+</trkpt>
+<trkpt lat="54.786929900" lon="-2.344388300">
+ <ele>415.000000</ele>
+ <name>TP0555</name>
+</trkpt>
+<trkpt lat="54.786914900" lon="-2.344421600">
+ <ele>415.000000</ele>
+ <name>TP0556</name>
+</trkpt>
+<trkpt lat="54.786896600" lon="-2.344456600">
+ <ele>415.000000</ele>
+ <name>TP0557</name>
+</trkpt>
+<trkpt lat="54.786888300" lon="-2.344476600">
+ <ele>415.000000</ele>
+ <name>TP0558</name>
+</trkpt>
+<trkpt lat="54.786878300" lon="-2.344491600">
+ <ele>415.000000</ele>
+ <name>TP0559</name>
+</trkpt>
+<trkpt lat="54.786859900" lon="-2.344528300">
+ <ele>415.000000</ele>
+ <name>TP0560</name>
+</trkpt>
+<trkpt lat="54.786840000" lon="-2.344564900">
+ <ele>415.000000</ele>
+ <name>TP0561</name>
+</trkpt>
+<trkpt lat="54.786838300" lon="-2.344555000">
+ <ele>415.000000</ele>
+ <name>TP0562</name>
+</trkpt>
+<trkpt lat="54.786831600" lon="-2.344553300">
+ <ele>415.000000</ele>
+ <name>TP0563</name>
+</trkpt>
+<trkpt lat="54.786829900" lon="-2.344551600">
+ <ele>415.000000</ele>
+ <name>TP0564</name>
+</trkpt>
+<trkpt lat="54.786850000" lon="-2.344578300">
+ <ele>415.000000</ele>
+ <name>TP0565</name>
+</trkpt>
+<trkpt lat="54.786836600" lon="-2.344571600">
+ <ele>415.000000</ele>
+ <name>TP0566</name>
+</trkpt>
+<trkpt lat="54.786853300" lon="-2.344590000">
+ <ele>415.000000</ele>
+ <name>TP0567</name>
+</trkpt>
+<trkpt lat="54.786851600" lon="-2.344603300">
+ <ele>415.000000</ele>
+ <name>TP0568</name>
+</trkpt>
+<trkpt lat="54.786851600" lon="-2.344613300">
+ <ele>415.000000</ele>
+ <name>TP0569</name>
+</trkpt>
+<trkpt lat="54.786816600" lon="-2.343878300">
+ <ele>415.000000</ele>
+ <name>TP0570</name>
+</trkpt>
+<trkpt lat="54.786831600" lon="-2.343878300">
+ <ele>415.000000</ele>
+ <name>TP0571</name>
+</trkpt>
+<trkpt lat="54.786843300" lon="-2.343888300">
+ <ele>415.000000</ele>
+ <name>TP0572</name>
+</trkpt>
+<trkpt lat="54.786838300" lon="-2.343896600">
+ <ele>415.000000</ele>
+ <name>TP0573</name>
+</trkpt>
+<trkpt lat="54.786811600" lon="-2.343888300">
+ <ele>415.000000</ele>
+ <name>TP0574</name>
+</trkpt>
+<trkpt lat="54.786826600" lon="-2.343921600">
+ <ele>415.000000</ele>
+ <name>TP0575</name>
+</trkpt>
+<trkpt lat="54.786855000" lon="-2.343904900">
+ <ele>415.000000</ele>
+ <name>TP0576</name>
+</trkpt>
+<trkpt lat="54.786868300" lon="-2.343921600">
+ <ele>415.000000</ele>
+ <name>TP0577</name>
+</trkpt>
+<trkpt lat="54.786873300" lon="-2.343938300">
+ <ele>415.000000</ele>
+ <name>TP0578</name>
+</trkpt>
+<trkpt lat="54.786876600" lon="-2.343956600">
+ <ele>415.000000</ele>
+ <name>TP0579</name>
+</trkpt>
+<trkpt lat="54.786888300" lon="-2.343974900">
+ <ele>415.000000</ele>
+ <name>TP0580</name>
+</trkpt>
+<trkpt lat="54.786898300" lon="-2.343948300">
+ <ele>415.000000</ele>
+ <name>TP0581</name>
+</trkpt>
+<trkpt lat="54.786911600" lon="-2.343928300">
+ <ele>415.000000</ele>
+ <name>TP0582</name>
+</trkpt>
+<trkpt lat="54.786918300" lon="-2.343911600">
+ <ele>415.000000</ele>
+ <name>TP0583</name>
+</trkpt>
+<trkpt lat="54.786916600" lon="-2.343908300">
+ <ele>415.000000</ele>
+ <name>TP0584</name>
+</trkpt>
+<trkpt lat="54.786896600" lon="-2.343956600">
+ <ele>415.000000</ele>
+ <name>TP0585</name>
+</trkpt>
+<trkpt lat="54.786903300" lon="-2.343960000">
+ <ele>415.000000</ele>
+ <name>TP0586</name>
+</trkpt>
+<trkpt lat="54.786903300" lon="-2.343969900">
+ <ele>415.000000</ele>
+ <name>TP0587</name>
+</trkpt>
+<trkpt lat="54.786906600" lon="-2.343981600">
+ <ele>415.000000</ele>
+ <name>TP0588</name>
+</trkpt>
+<trkpt lat="54.786904900" lon="-2.344000000">
+ <ele>415.000000</ele>
+ <name>TP0589</name>
+</trkpt>
+<trkpt lat="54.786908300" lon="-2.344026600">
+ <ele>415.000000</ele>
+ <name>TP0590</name>
+</trkpt>
+<trkpt lat="54.786911600" lon="-2.344054900">
+ <ele>415.000000</ele>
+ <name>TP0591</name>
+</trkpt>
+<trkpt lat="54.786908300" lon="-2.344086600">
+ <ele>415.000000</ele>
+ <name>TP0592</name>
+</trkpt>
+<trkpt lat="54.786896600" lon="-2.344118300">
+ <ele>415.000000</ele>
+ <name>TP0593</name>
+</trkpt>
+<trkpt lat="54.786859900" lon="-2.344218300">
+ <ele>415.000000</ele>
+ <name>TP0594</name>
+</trkpt>
+<trkpt lat="54.786850000" lon="-2.344241600">
+ <ele>415.000000</ele>
+ <name>TP0595</name>
+</trkpt>
+<trkpt lat="54.786843300" lon="-2.344258300">
+ <ele>415.000000</ele>
+ <name>TP0596</name>
+</trkpt>
+<trkpt lat="54.786818300" lon="-2.344295000">
+ <ele>415.000000</ele>
+ <name>TP0597</name>
+</trkpt>
+<trkpt lat="54.786773300" lon="-2.344401600">
+ <ele>415.000000</ele>
+ <name>TP0598</name>
+</trkpt>
+<trkpt lat="54.786780000" lon="-2.344401600">
+ <ele>415.000000</ele>
+ <name>TP0599</name>
+</trkpt>
+<trkpt lat="54.786768300" lon="-2.344403300">
+ <ele>415.000000</ele>
+ <name>TP0600</name>
+</trkpt>
+<trkpt lat="54.786749900" lon="-2.344393300">
+ <ele>415.000000</ele>
+ <name>TP0601</name>
+</trkpt>
+<trkpt lat="54.786743300" lon="-2.344380000">
+ <ele>415.000000</ele>
+ <name>TP0602</name>
+</trkpt>
+<trkpt lat="54.786728300" lon="-2.344374900">
+ <ele>415.000000</ele>
+ <name>TP0603</name>
+</trkpt>
+<trkpt lat="54.786719900" lon="-2.344383300">
+ <ele>415.000000</ele>
+ <name>TP0604</name>
+</trkpt>
+<trkpt lat="54.786704900" lon="-2.344406600">
+ <ele>415.000000</ele>
+ <name>TP0605</name>
+</trkpt>
+<trkpt lat="54.786711600" lon="-2.344438300">
+ <ele>415.000000</ele>
+ <name>TP0606</name>
+</trkpt>
+<trkpt lat="54.786986600" lon="-2.344328300">
+ <ele>415.000000</ele>
+ <name>TP0607</name>
+</trkpt>
+<trkpt lat="54.787094900" lon="-2.344310000">
+ <ele>415.000000</ele>
+ <name>TP0608</name>
+</trkpt>
+<trkpt lat="54.787176600" lon="-2.344296600">
+ <ele>415.000000</ele>
+ <name>TP0609</name>
+</trkpt>
+<trkpt lat="54.787190000" lon="-2.344296600">
+ <ele>415.000000</ele>
+ <name>TP0610</name>
+</trkpt>
+<trkpt lat="54.787193300" lon="-2.344296600">
+ <ele>415.000000</ele>
+ <name>TP0611</name>
+</trkpt>
+<trkpt lat="54.787194900" lon="-2.344263300">
+ <ele>415.000000</ele>
+ <name>TP0612</name>
+</trkpt>
+<trkpt lat="54.787194900" lon="-2.344266600">
+ <ele>415.000000</ele>
+ <name>TP0613</name>
+</trkpt>
+<trkpt lat="54.786589900" lon="-2.344641600">
+ <ele>415.000000</ele>
+ <name>TP0614</name>
+</trkpt>
+<trkpt lat="54.786563300" lon="-2.344664900">
+ <ele>415.000000</ele>
+ <name>TP0615</name>
+</trkpt>
+<trkpt lat="54.786539900" lon="-2.344686600">
+ <ele>415.000000</ele>
+ <name>TP0616</name>
+</trkpt>
+<trkpt lat="54.786509900" lon="-2.344711600">
+ <ele>415.000000</ele>
+ <name>TP0617</name>
+</trkpt>
+<trkpt lat="54.786498300" lon="-2.344724900">
+ <ele>415.000000</ele>
+ <name>TP0618</name>
+</trkpt>
+<trkpt lat="54.786453300" lon="-2.344761600">
+ <ele>415.000000</ele>
+ <name>TP0619</name>
+</trkpt>
+<trkpt lat="54.786509900" lon="-2.344781600">
+ <ele>415.000000</ele>
+ <name>TP0620</name>
+</trkpt>
+<trkpt lat="54.786518300" lon="-2.344785000">
+ <ele>415.000000</ele>
+ <name>TP0621</name>
+</trkpt>
+<trkpt lat="54.786528300" lon="-2.344785000">
+ <ele>415.000000</ele>
+ <name>TP0622</name>
+</trkpt>
+<trkpt lat="54.786539900" lon="-2.344794900">
+ <ele>415.000000</ele>
+ <name>TP0623</name>
+</trkpt>
+<trkpt lat="54.786543200" lon="-2.344773300">
+ <ele>415.000000</ele>
+ <name>TP0624</name>
+</trkpt>
+<trkpt lat="54.786560000" lon="-2.344759900">
+ <ele>415.000000</ele>
+ <name>TP0625</name>
+</trkpt>
+<trkpt lat="54.786640000" lon="-2.344593300">
+ <ele>415.000000</ele>
+ <name>TP0626</name>
+</trkpt>
+<trkpt lat="54.786633300" lon="-2.344578300">
+ <ele>415.000000</ele>
+ <name>TP0627</name>
+</trkpt>
+<trkpt lat="54.786634900" lon="-2.344575000">
+ <ele>415.000000</ele>
+ <name>TP0628</name>
+</trkpt>
+<trkpt lat="54.786926600" lon="-2.344333300">
+ <ele>415.000000</ele>
+ <name>TP0629</name>
+</trkpt>
+<trkpt lat="54.786993300" lon="-2.344205000">
+ <ele>415.000000</ele>
+ <name>TP0630</name>
+</trkpt>
+<trkpt lat="54.786976600" lon="-2.344193300">
+ <ele>415.000000</ele>
+ <name>TP0631</name>
+</trkpt>
+<trkpt lat="54.786969900" lon="-2.344219900">
+ <ele>415.000000</ele>
+ <name>TP0632</name>
+</trkpt>
+<trkpt lat="54.786961600" lon="-2.344241600">
+ <ele>415.000000</ele>
+ <name>TP0633</name>
+</trkpt>
+<trkpt lat="54.786951600" lon="-2.344254900">
+ <ele>415.000000</ele>
+ <name>TP0634</name>
+</trkpt>
+<trkpt lat="54.786926600" lon="-2.344288300">
+ <ele>415.000000</ele>
+ <name>TP0635</name>
+</trkpt>
+<trkpt lat="54.786918300" lon="-2.344299900">
+ <ele>415.000000</ele>
+ <name>TP0636</name>
+</trkpt>
+<trkpt lat="54.786911600" lon="-2.344296600">
+ <ele>416.000000</ele>
+ <name>TP0637</name>
+</trkpt>
+<trkpt lat="54.786910000" lon="-2.344226600">
+ <ele>416.000000</ele>
+ <name>TP0638</name>
+</trkpt>
+<trkpt lat="54.786933300" lon="-2.344133300">
+ <ele>416.000000</ele>
+ <name>TP0639</name>
+</trkpt>
+<trkpt lat="54.786936600" lon="-2.344108300">
+ <ele>416.000000</ele>
+ <name>TP0640</name>
+</trkpt>
+<trkpt lat="54.786951600" lon="-2.344070000">
+ <ele>416.000000</ele>
+ <name>TP0641</name>
+</trkpt>
+<trkpt lat="54.786959900" lon="-2.344036600">
+ <ele>416.000000</ele>
+ <name>TP0642</name>
+</trkpt>
+<trkpt lat="54.786974900" lon="-2.344004900">
+ <ele>416.000000</ele>
+ <name>TP0643</name>
+</trkpt>
+<trkpt lat="54.786986600" lon="-2.343973300">
+ <ele>416.000000</ele>
+ <name>TP0644</name>
+</trkpt>
+<trkpt lat="54.786998300" lon="-2.343939900">
+ <ele>416.000000</ele>
+ <name>TP0645</name>
+</trkpt>
+<trkpt lat="54.787051600" lon="-2.343764900">
+ <ele>416.000000</ele>
+ <name>TP0646</name>
+</trkpt>
+<trkpt lat="54.787111600" lon="-2.343651600">
+ <ele>416.000000</ele>
+ <name>TP0647</name>
+</trkpt>
+<trkpt lat="54.786996600" lon="-2.343930000">
+ <ele>418.000000</ele>
+ <name>TP0648</name>
+</trkpt>
+<trkpt lat="54.786971600" lon="-2.343988300">
+ <ele>418.000000</ele>
+ <name>TP0649</name>
+</trkpt>
+<trkpt lat="54.786951600" lon="-2.344026600">
+ <ele>419.000000</ele>
+ <name>TP0650</name>
+</trkpt>
+<trkpt lat="54.786951600" lon="-2.344036600">
+ <ele>419.000000</ele>
+ <name>TP0651</name>
+</trkpt>
+<trkpt lat="54.786951600" lon="-2.344035000">
+ <ele>420.000000</ele>
+ <name>TP0652</name>
+</trkpt>
+<trkpt lat="54.786936600" lon="-2.344068300">
+ <ele>420.000000</ele>
+ <name>TP0653</name>
+</trkpt>
+<trkpt lat="54.786938300" lon="-2.344063300">
+ <ele>420.000000</ele>
+ <name>TP0654</name>
+</trkpt>
+<trkpt lat="54.786943300" lon="-2.344051600">
+ <ele>420.000000</ele>
+ <name>TP0655</name>
+</trkpt>
+<trkpt lat="54.786948300" lon="-2.344036600">
+ <ele>420.000000</ele>
+ <name>TP0656</name>
+</trkpt>
+<trkpt lat="54.786956600" lon="-2.344019900">
+ <ele>420.000000</ele>
+ <name>TP0657</name>
+</trkpt>
+<trkpt lat="54.786965000" lon="-2.344009900">
+ <ele>420.000000</ele>
+ <name>TP0658</name>
+</trkpt>
+<trkpt lat="54.787026600" lon="-2.343953300">
+ <ele>420.000000</ele>
+ <name>TP0659</name>
+</trkpt>
+<trkpt lat="54.787036600" lon="-2.343954900">
+ <ele>420.000000</ele>
+ <name>TP0660</name>
+</trkpt>
+<trkpt lat="54.787044900" lon="-2.343956600">
+ <ele>421.000000</ele>
+ <name>TP0661</name>
+</trkpt>
+<trkpt lat="54.787033200" lon="-2.343958300">
+ <ele>421.000000</ele>
+ <name>TP0662</name>
+</trkpt>
+<trkpt lat="54.787023300" lon="-2.343966600">
+ <ele>421.000000</ele>
+ <name>TP0663</name>
+</trkpt>
+<trkpt lat="54.787013300" lon="-2.343978300">
+ <ele>421.000000</ele>
+ <name>TP0664</name>
+</trkpt>
+<trkpt lat="54.787005000" lon="-2.343986600">
+ <ele>421.000000</ele>
+ <name>TP0665</name>
+</trkpt>
+<trkpt lat="54.786959900" lon="-2.344026600">
+ <ele>421.000000</ele>
+ <name>TP0666</name>
+</trkpt>
+<trkpt lat="54.786961600" lon="-2.344028300">
+ <ele>421.000000</ele>
+ <name>TP0667</name>
+</trkpt>
+<trkpt lat="54.786959900" lon="-2.344024900">
+ <ele>421.000000</ele>
+ <name>TP0668</name>
+</trkpt>
+<trkpt lat="54.786959900" lon="-2.344026600">
+ <ele>421.000000</ele>
+ <name>TP0669</name>
+</trkpt>
+<trkpt lat="54.786993300" lon="-2.343983300">
+ <ele>420.000000</ele>
+ <name>TP0670</name>
+</trkpt>
+<trkpt lat="54.787009900" lon="-2.343984900">
+ <ele>420.000000</ele>
+ <name>TP0671</name>
+</trkpt>
+<trkpt lat="54.787008300" lon="-2.343991600">
+ <ele>420.000000</ele>
+ <name>TP0672</name>
+</trkpt>
+<trkpt lat="54.787026600" lon="-2.343966600">
+ <ele>420.000000</ele>
+ <name>TP0673</name>
+</trkpt>
+<trkpt lat="54.787035000" lon="-2.343948300">
+ <ele>420.000000</ele>
+ <name>TP0674</name>
+</trkpt>
+<trkpt lat="54.787035000" lon="-2.343936600">
+ <ele>421.000000</ele>
+ <name>TP0675</name>
+</trkpt>
+<trkpt lat="54.787033200" lon="-2.343936600">
+ <ele>421.000000</ele>
+ <name>TP0676</name>
+</trkpt>
+<trkpt lat="54.787033200" lon="-2.343931600">
+ <ele>421.000000</ele>
+ <name>TP0677</name>
+</trkpt>
+<trkpt lat="54.787028300" lon="-2.343931600">
+ <ele>421.000000</ele>
+ <name>TP0678</name>
+</trkpt>
+<trkpt lat="54.787036600" lon="-2.343921600">
+ <ele>421.000000</ele>
+ <name>TP0679</name>
+</trkpt>
+<trkpt lat="54.787031600" lon="-2.343921600">
+ <ele>421.000000</ele>
+ <name>TP0680</name>
+</trkpt>
+<trkpt lat="54.787028300" lon="-2.343923300">
+ <ele>421.000000</ele>
+ <name>TP0681</name>
+</trkpt>
+<trkpt lat="54.787046600" lon="-2.343911600">
+ <ele>421.000000</ele>
+ <name>TP0682</name>
+</trkpt>
+<trkpt lat="54.787044900" lon="-2.343903300">
+ <ele>421.000000</ele>
+ <name>TP0683</name>
+</trkpt>
+<trkpt lat="54.787043300" lon="-2.343896600">
+ <ele>421.000000</ele>
+ <name>TP0684</name>
+</trkpt>
+<trkpt lat="54.787046600" lon="-2.343888300">
+ <ele>421.000000</ele>
+ <name>TP0685</name>
+</trkpt>
+<trkpt lat="54.787046600" lon="-2.343888300">
+ <ele>421.000000</ele>
+ <name>TP0686</name>
+</trkpt>
+<trkpt lat="54.787046600" lon="-2.343881600">
+ <ele>421.000000</ele>
+ <name>TP0687</name>
+</trkpt>
+<trkpt lat="54.787044900" lon="-2.343875000">
+ <ele>421.000000</ele>
+ <name>TP0688</name>
+</trkpt>
+<trkpt lat="54.787046600" lon="-2.343863300">
+ <ele>421.000000</ele>
+ <name>TP0689</name>
+</trkpt>
+<trkpt lat="54.787044900" lon="-2.343861600">
+ <ele>421.000000</ele>
+ <name>TP0690</name>
+</trkpt>
+<trkpt lat="54.787046600" lon="-2.343860000">
+ <ele>421.000000</ele>
+ <name>TP0691</name>
+</trkpt>
+<trkpt lat="54.787039900" lon="-2.343868300">
+ <ele>421.000000</ele>
+ <name>TP0692</name>
+</trkpt>
+<trkpt lat="54.787041600" lon="-2.343873300">
+ <ele>421.000000</ele>
+ <name>TP0693</name>
+</trkpt>
+<trkpt lat="54.787038300" lon="-2.343883300">
+ <ele>421.000000</ele>
+ <name>TP0694</name>
+</trkpt>
+<trkpt lat="54.787028300" lon="-2.343881600">
+ <ele>421.000000</ele>
+ <name>TP0695</name>
+</trkpt>
+<trkpt lat="54.787018300" lon="-2.343879900">
+ <ele>421.000000</ele>
+ <name>TP0696</name>
+</trkpt>
+<trkpt lat="54.787011600" lon="-2.343876600">
+ <ele>421.000000</ele>
+ <name>TP0697</name>
+</trkpt>
+<trkpt lat="54.787005000" lon="-2.343873300">
+ <ele>421.000000</ele>
+ <name>TP0698</name>
+</trkpt>
+<trkpt lat="54.786998300" lon="-2.343868300">
+ <ele>421.000000</ele>
+ <name>TP0699</name>
+</trkpt>
+<trkpt lat="54.786998300" lon="-2.343846600">
+ <ele>421.000000</ele>
+ <name>TP0700</name>
+</trkpt>
+<trkpt lat="54.787008300" lon="-2.343866600">
+ <ele>421.000000</ele>
+ <name>TP0701</name>
+</trkpt>
+<trkpt lat="54.787011600" lon="-2.343871600">
+ <ele>421.000000</ele>
+ <name>TP0702</name>
+</trkpt>
+<trkpt lat="54.787011600" lon="-2.343883300">
+ <ele>421.000000</ele>
+ <name>TP0703</name>
+</trkpt>
+<trkpt lat="54.787009900" lon="-2.343895000">
+ <ele>421.000000</ele>
+ <name>TP0704</name>
+</trkpt>
+<trkpt lat="54.787013300" lon="-2.343910000">
+ <ele>421.000000</ele>
+ <name>TP0705</name>
+</trkpt>
+<trkpt lat="54.787014900" lon="-2.343923300">
+ <ele>421.000000</ele>
+ <name>TP0706</name>
+</trkpt>
+<trkpt lat="54.787016600" lon="-2.343923300">
+ <ele>421.000000</ele>
+ <name>TP0707</name>
+</trkpt>
+<trkpt lat="54.787016600" lon="-2.343914900">
+ <ele>421.000000</ele>
+ <name>TP0708</name>
+</trkpt>
+<trkpt lat="54.787011600" lon="-2.343903300">
+ <ele>421.000000</ele>
+ <name>TP0709</name>
+</trkpt>
+<trkpt lat="54.787014900" lon="-2.343898300">
+ <ele>421.000000</ele>
+ <name>TP0710</name>
+</trkpt>
+<trkpt lat="54.787011600" lon="-2.343895000">
+ <ele>421.000000</ele>
+ <name>TP0711</name>
+</trkpt>
+<trkpt lat="54.787003300" lon="-2.343893300">
+ <ele>421.000000</ele>
+ <name>TP0712</name>
+</trkpt>
+<trkpt lat="54.787006600" lon="-2.343888300">
+ <ele>421.000000</ele>
+ <name>TP0713</name>
+</trkpt>
+<trkpt lat="54.787014900" lon="-2.343898300">
+ <ele>421.000000</ele>
+ <name>TP0714</name>
+</trkpt>
+<trkpt lat="54.787008300" lon="-2.343901600">
+ <ele>421.000000</ele>
+ <name>TP0715</name>
+</trkpt>
+<trkpt lat="54.787003300" lon="-2.343901600">
+ <ele>421.000000</ele>
+ <name>TP0716</name>
+</trkpt>
+<trkpt lat="54.786999900" lon="-2.343903300">
+ <ele>421.000000</ele>
+ <name>TP0717</name>
+</trkpt>
+<trkpt lat="54.786995000" lon="-2.343904900">
+ <ele>421.000000</ele>
+ <name>TP0718</name>
+</trkpt>
+<trkpt lat="54.786984900" lon="-2.343904900">
+ <ele>421.000000</ele>
+ <name>TP0719</name>
+</trkpt>
+<trkpt lat="54.786978300" lon="-2.343906600">
+ <ele>421.000000</ele>
+ <name>TP0720</name>
+</trkpt>
+<trkpt lat="54.786968300" lon="-2.343908300">
+ <ele>421.000000</ele>
+ <name>TP0721</name>
+</trkpt>
+<trkpt lat="54.786959900" lon="-2.343910000">
+ <ele>421.000000</ele>
+ <name>TP0722</name>
+</trkpt>
+<trkpt lat="54.786951600" lon="-2.343911600">
+ <ele>421.000000</ele>
+ <name>TP0723</name>
+</trkpt>
+<trkpt lat="54.786953300" lon="-2.343926600">
+ <ele>421.000000</ele>
+ <name>TP0724</name>
+</trkpt>
+<trkpt lat="54.786956600" lon="-2.343928300">
+ <ele>421.000000</ele>
+ <name>TP0725</name>
+</trkpt>
+<trkpt lat="54.786950000" lon="-2.343928300">
+ <ele>421.000000</ele>
+ <name>TP0726</name>
+</trkpt>
+<trkpt lat="54.786963200" lon="-2.343939900">
+ <ele>421.000000</ele>
+ <name>TP0727</name>
+</trkpt>
+<trkpt lat="54.786969900" lon="-2.343943300">
+ <ele>421.000000</ele>
+ <name>TP0728</name>
+</trkpt>
+<trkpt lat="54.786976600" lon="-2.343951600">
+ <ele>422.000000</ele>
+ <name>TP0729</name>
+</trkpt>
+<trkpt lat="54.786981600" lon="-2.343954900">
+ <ele>422.000000</ele>
+ <name>TP0730</name>
+</trkpt>
+<trkpt lat="54.786986600" lon="-2.343956600">
+ <ele>422.000000</ele>
+ <name>TP0731</name>
+</trkpt>
+<trkpt lat="54.786991600" lon="-2.343960000">
+ <ele>422.000000</ele>
+ <name>TP0732</name>
+</trkpt>
+<trkpt lat="54.786999900" lon="-2.343965000">
+ <ele>422.000000</ele>
+ <name>TP0733</name>
+</trkpt>
+<trkpt lat="54.787008300" lon="-2.343978300">
+ <ele>422.000000</ele>
+ <name>TP0734</name>
+</trkpt>
+<trkpt lat="54.787006600" lon="-2.343978300">
+ <ele>422.000000</ele>
+ <name>TP0735</name>
+</trkpt>
+<trkpt lat="54.787003300" lon="-2.343978300">
+ <ele>422.000000</ele>
+ <name>TP0736</name>
+</trkpt>
+<trkpt lat="54.787013300" lon="-2.343983300">
+ <ele>422.000000</ele>
+ <name>TP0737</name>
+</trkpt>
+<trkpt lat="54.787023300" lon="-2.344000000">
+ <ele>422.000000</ele>
+ <name>TP0738</name>
+</trkpt>
+<trkpt lat="54.787031600" lon="-2.344004900">
+ <ele>422.000000</ele>
+ <name>TP0739</name>
+</trkpt>
+<trkpt lat="54.787043300" lon="-2.344016600">
+ <ele>422.000000</ele>
+ <name>TP0740</name>
+</trkpt>
+<trkpt lat="54.787051600" lon="-2.344028300">
+ <ele>422.000000</ele>
+ <name>TP0741</name>
+</trkpt>
+<trkpt lat="54.787054900" lon="-2.344043300">
+ <ele>422.000000</ele>
+ <name>TP0742</name>
+</trkpt>
+<trkpt lat="54.787046600" lon="-2.344046600">
+ <ele>422.000000</ele>
+ <name>TP0743</name>
+</trkpt>
+<trkpt lat="54.787038300" lon="-2.344051600">
+ <ele>422.000000</ele>
+ <name>TP0744</name>
+</trkpt>
+<trkpt lat="54.787031600" lon="-2.344054900">
+ <ele>422.000000</ele>
+ <name>TP0745</name>
+</trkpt>
+<trkpt lat="54.787028300" lon="-2.344059900">
+ <ele>422.000000</ele>
+ <name>TP0746</name>
+</trkpt>
+<trkpt lat="54.787026600" lon="-2.344066600">
+ <ele>422.000000</ele>
+ <name>TP0747</name>
+</trkpt>
+<trkpt lat="54.787029900" lon="-2.344076600">
+ <ele>422.000000</ele>
+ <name>TP0748</name>
+</trkpt>
+<trkpt lat="54.787028300" lon="-2.344085000">
+ <ele>422.000000</ele>
+ <name>TP0749</name>
+</trkpt>
+<trkpt lat="54.787018300" lon="-2.344101600">
+ <ele>422.000000</ele>
+ <name>TP0750</name>
+</trkpt>
+<trkpt lat="54.787021600" lon="-2.344100000">
+ <ele>422.000000</ele>
+ <name>TP0751</name>
+</trkpt>
+<trkpt lat="54.787044900" lon="-2.343949900">
+ <ele>423.000000</ele>
+ <name>TP0752</name>
+</trkpt>
+<trkpt lat="54.787046600" lon="-2.343928300">
+ <ele>423.000000</ele>
+ <name>TP0753</name>
+</trkpt>
+<trkpt lat="54.787046600" lon="-2.343928300">
+ <ele>423.000000</ele>
+ <name>TP0754</name>
+</trkpt>
+<trkpt lat="54.787050000" lon="-2.343925000">
+ <ele>423.000000</ele>
+ <name>TP0755</name>
+</trkpt>
+<trkpt lat="54.787044900" lon="-2.343946600">
+ <ele>423.000000</ele>
+ <name>TP0756</name>
+</trkpt>
+<trkpt lat="54.787044900" lon="-2.343963300">
+ <ele>423.000000</ele>
+ <name>TP0757</name>
+</trkpt>
+<trkpt lat="54.787041600" lon="-2.343981600">
+ <ele>423.000000</ele>
+ <name>TP0758</name>
+</trkpt>
+<trkpt lat="54.787036600" lon="-2.343986600">
+ <ele>423.000000</ele>
+ <name>TP0759</name>
+</trkpt>
+<trkpt lat="54.787023300" lon="-2.343980000">
+ <ele>424.000000</ele>
+ <name>TP0760</name>
+</trkpt>
+<trkpt lat="54.787021600" lon="-2.343980000">
+ <ele>424.000000</ele>
+ <name>TP0761</name>
+</trkpt>
+<trkpt lat="54.787023300" lon="-2.343976600">
+ <ele>424.000000</ele>
+ <name>TP0762</name>
+</trkpt>
+<trkpt lat="54.787033200" lon="-2.343984900">
+ <ele>424.000000</ele>
+ <name>TP0763</name>
+</trkpt>
+<trkpt lat="54.787026600" lon="-2.343989900">
+ <ele>424.000000</ele>
+ <name>TP0764</name>
+</trkpt>
+<trkpt lat="54.787028300" lon="-2.343996600">
+ <ele>424.000000</ele>
+ <name>TP0765</name>
+</trkpt>
+<trkpt lat="54.787031600" lon="-2.344011600">
+ <ele>424.000000</ele>
+ <name>TP0766</name>
+</trkpt>
+<trkpt lat="54.787058300" lon="-2.344013300">
+ <ele>424.000000</ele>
+ <name>TP0767</name>
+</trkpt>
+<trkpt lat="54.787056600" lon="-2.344016600">
+ <ele>424.000000</ele>
+ <name>TP0768</name>
+</trkpt>
+<trkpt lat="54.787048300" lon="-2.344000000">
+ <ele>424.000000</ele>
+ <name>TP0769</name>
+</trkpt>
+<trkpt lat="54.787044900" lon="-2.343980000">
+ <ele>424.000000</ele>
+ <name>TP0770</name>
+</trkpt>
+<trkpt lat="54.787044900" lon="-2.343973300">
+ <ele>425.000000</ele>
+ <name>TP0771</name>
+</trkpt>
+<trkpt lat="54.787036600" lon="-2.343954900">
+ <ele>425.000000</ele>
+ <name>TP0772</name>
+</trkpt>
+<trkpt lat="54.787031600" lon="-2.343956600">
+ <ele>425.000000</ele>
+ <name>TP0773</name>
+</trkpt>
+<trkpt lat="54.787024900" lon="-2.343928300">
+ <ele>425.000000</ele>
+ <name>TP0774</name>
+</trkpt>
+<trkpt lat="54.787011600" lon="-2.343938300">
+ <ele>425.000000</ele>
+ <name>TP0775</name>
+</trkpt>
+<trkpt lat="54.787009900" lon="-2.343939900">
+ <ele>425.000000</ele>
+ <name>TP0776</name>
+</trkpt>
+<trkpt lat="54.787005000" lon="-2.343943300">
+ <ele>425.000000</ele>
+ <name>TP0777</name>
+</trkpt>
+<trkpt lat="54.786991600" lon="-2.343951600">
+ <ele>425.000000</ele>
+ <name>TP0778</name>
+</trkpt>
+<trkpt lat="54.786986600" lon="-2.343956600">
+ <ele>425.000000</ele>
+ <name>TP0779</name>
+</trkpt>
+<trkpt lat="54.786980000" lon="-2.343973300">
+ <ele>425.000000</ele>
+ <name>TP0780</name>
+</trkpt>
+<trkpt lat="54.786976600" lon="-2.343978300">
+ <ele>425.000000</ele>
+ <name>TP0781</name>
+</trkpt>
+<trkpt lat="54.786978300" lon="-2.343976600">
+ <ele>425.000000</ele>
+ <name>TP0782</name>
+</trkpt>
+<trkpt lat="54.786988300" lon="-2.343973300">
+ <ele>425.000000</ele>
+ <name>TP0783</name>
+</trkpt>
+<trkpt lat="54.786995000" lon="-2.343961600">
+ <ele>425.000000</ele>
+ <name>TP0784</name>
+</trkpt>
+<trkpt lat="54.786993300" lon="-2.343966600">
+ <ele>425.000000</ele>
+ <name>TP0785</name>
+</trkpt>
+<trkpt lat="54.786996600" lon="-2.343966600">
+ <ele>425.000000</ele>
+ <name>TP0786</name>
+</trkpt>
+<trkpt lat="54.786999900" lon="-2.343963300">
+ <ele>425.000000</ele>
+ <name>TP0787</name>
+</trkpt>
+<trkpt lat="54.787006600" lon="-2.343976600">
+ <ele>425.000000</ele>
+ <name>TP0788</name>
+</trkpt>
+<trkpt lat="54.787003300" lon="-2.343988300">
+ <ele>425.000000</ele>
+ <name>TP0789</name>
+</trkpt>
+<trkpt lat="54.786999900" lon="-2.343998300">
+ <ele>425.000000</ele>
+ <name>TP0790</name>
+</trkpt>
+<trkpt lat="54.786995000" lon="-2.344006600">
+ <ele>425.000000</ele>
+ <name>TP0791</name>
+</trkpt>
+<trkpt lat="54.786991600" lon="-2.344019900">
+ <ele>425.000000</ele>
+ <name>TP0792</name>
+</trkpt>
+<trkpt lat="54.786980000" lon="-2.344061600">
+ <ele>425.000000</ele>
+ <name>TP0793</name>
+</trkpt>
+<trkpt lat="54.786973300" lon="-2.344078300">
+ <ele>425.000000</ele>
+ <name>TP0794</name>
+</trkpt>
+<trkpt lat="54.786971600" lon="-2.344091600">
+ <ele>425.000000</ele>
+ <name>TP0795</name>
+</trkpt>
+<trkpt lat="54.786971600" lon="-2.344103300">
+ <ele>425.000000</ele>
+ <name>TP0796</name>
+</trkpt>
+<trkpt lat="54.786968300" lon="-2.344108300">
+ <ele>425.000000</ele>
+ <name>TP0797</name>
+</trkpt>
+<trkpt lat="54.786959900" lon="-2.344118300">
+ <ele>425.000000</ele>
+ <name>TP0798</name>
+</trkpt>
+<trkpt lat="54.786959900" lon="-2.344116600">
+ <ele>425.000000</ele>
+ <name>TP0799</name>
+</trkpt>
+<trkpt lat="54.786961600" lon="-2.344113300">
+ <ele>422.000000</ele>
+ <name>TP0800</name>
+</trkpt>
+<trkpt lat="54.786961600" lon="-2.344105000">
+ <ele>421.000000</ele>
+ <name>TP0801</name>
+</trkpt>
+<trkpt lat="54.786963200" lon="-2.344100000">
+ <ele>420.000000</ele>
+ <name>TP0802</name>
+</trkpt>
+<trkpt lat="54.786980000" lon="-2.344114900">
+ <ele>422.000000</ele>
+ <name>TP0803</name>
+</trkpt>
+<trkpt lat="54.786993300" lon="-2.344109900">
+ <ele>422.000000</ele>
+ <name>TP0804</name>
+</trkpt>
+<trkpt lat="54.787003300" lon="-2.344105000">
+ <ele>422.000000</ele>
+ <name>TP0805</name>
+</trkpt>
+<trkpt lat="54.787014900" lon="-2.344096600">
+ <ele>422.000000</ele>
+ <name>TP0806</name>
+</trkpt>
+<trkpt lat="54.787021600" lon="-2.344093300">
+ <ele>422.000000</ele>
+ <name>TP0807</name>
+</trkpt>
+<trkpt lat="54.787044900" lon="-2.344131600">
+ <ele>416.000000</ele>
+ <name>TP0808</name>
+</trkpt>
+<trkpt lat="54.787061600" lon="-2.344096600">
+ <ele>413.000000</ele>
+ <name>TP0809</name>
+</trkpt>
+<trkpt lat="54.787051600" lon="-2.344093300">
+ <ele>413.000000</ele>
+ <name>TP0810</name>
+</trkpt>
+<trkpt lat="54.787050000" lon="-2.344101600">
+ <ele>413.000000</ele>
+ <name>TP0811</name>
+</trkpt>
+<trkpt lat="54.787048300" lon="-2.344103300">
+ <ele>413.000000</ele>
+ <name>TP0812</name>
+</trkpt>
+<trkpt lat="54.787048300" lon="-2.344105000">
+ <ele>413.000000</ele>
+ <name>TP0813</name>
+</trkpt>
+<trkpt lat="54.787029900" lon="-2.344133300">
+ <ele>413.000000</ele>
+ <name>TP0814</name>
+</trkpt>
+<trkpt lat="54.786904900" lon="-2.344236600">
+ <ele>413.000000</ele>
+ <name>TP0815</name>
+</trkpt>
+<trkpt lat="54.786959900" lon="-2.344214900">
+ <ele>413.000000</ele>
+ <name>TP0816</name>
+</trkpt>
+<trkpt lat="54.786963200" lon="-2.344214900">
+ <ele>413.000000</ele>
+ <name>TP0817</name>
+</trkpt>
+<trkpt lat="54.786984900" lon="-2.344208300">
+ <ele>413.000000</ele>
+ <name>TP0818</name>
+</trkpt>
+<trkpt lat="54.787011600" lon="-2.344196600">
+ <ele>413.000000</ele>
+ <name>TP0819</name>
+</trkpt>
+<trkpt lat="54.787056600" lon="-2.344174900">
+ <ele>413.000000</ele>
+ <name>TP0820</name>
+</trkpt>
+<trkpt lat="54.787066600" lon="-2.344168300">
+ <ele>413.000000</ele>
+ <name>TP0821</name>
+</trkpt>
+<trkpt lat="54.787088300" lon="-2.344155000">
+ <ele>413.000000</ele>
+ <name>TP0822</name>
+</trkpt>
+<trkpt lat="54.787105000" lon="-2.344173300">
+ <ele>414.000000</ele>
+ <name>TP0823</name>
+</trkpt>
+<trkpt lat="54.787103200" lon="-2.344176600">
+ <ele>414.000000</ele>
+ <name>TP0824</name>
+</trkpt>
+<trkpt lat="54.787133300" lon="-2.344168300">
+ <ele>414.000000</ele>
+ <name>TP0825</name>
+</trkpt>
+<trkpt lat="54.787129900" lon="-2.344170000">
+ <ele>414.000000</ele>
+ <name>TP0826</name>
+</trkpt>
+<trkpt lat="54.787139900" lon="-2.344171600">
+ <ele>414.000000</ele>
+ <name>TP0827</name>
+</trkpt>
+<trkpt lat="54.787149900" lon="-2.344170000">
+ <ele>414.000000</ele>
+ <name>TP0828</name>
+</trkpt>
+<trkpt lat="54.787163300" lon="-2.344168300">
+ <ele>414.000000</ele>
+ <name>TP0829</name>
+</trkpt>
+<trkpt lat="54.787171600" lon="-2.344170000">
+ <ele>414.000000</ele>
+ <name>TP0830</name>
+</trkpt>
+<trkpt lat="54.787166600" lon="-2.344178300">
+ <ele>414.000000</ele>
+ <name>TP0831</name>
+</trkpt>
+<trkpt lat="54.787163300" lon="-2.344176600">
+ <ele>414.000000</ele>
+ <name>TP0832</name>
+</trkpt>
+<trkpt lat="54.787168300" lon="-2.344171600">
+ <ele>414.000000</ele>
+ <name>TP0833</name>
+</trkpt>
+<trkpt lat="54.787168300" lon="-2.344170000">
+ <ele>414.000000</ele>
+ <name>TP0834</name>
+</trkpt>
+<trkpt lat="54.787169900" lon="-2.344164900">
+ <ele>414.000000</ele>
+ <name>TP0835</name>
+</trkpt>
+<trkpt lat="54.787169900" lon="-2.344163300">
+ <ele>414.000000</ele>
+ <name>TP0836</name>
+</trkpt>
+<trkpt lat="54.787166600" lon="-2.344159900">
+ <ele>415.000000</ele>
+ <name>TP0837</name>
+</trkpt>
+<trkpt lat="54.787166600" lon="-2.344149900">
+ <ele>416.000000</ele>
+ <name>TP0838</name>
+</trkpt>
+<trkpt lat="54.787156600" lon="-2.344146600">
+ <ele>416.000000</ele>
+ <name>TP0839</name>
+</trkpt>
+<trkpt lat="54.787145000" lon="-2.344181600">
+ <ele>416.000000</ele>
+ <name>TP0840</name>
+</trkpt>
+<trkpt lat="54.787151600" lon="-2.344186600">
+ <ele>416.000000</ele>
+ <name>TP0841</name>
+</trkpt>
+<trkpt lat="54.787156600" lon="-2.344188300">
+ <ele>416.000000</ele>
+ <name>TP0842</name>
+</trkpt>
+<trkpt lat="54.787154900" lon="-2.344188300">
+ <ele>416.000000</ele>
+ <name>TP0843</name>
+</trkpt>
+<trkpt lat="54.787101600" lon="-2.344214900">
+ <ele>416.000000</ele>
+ <name>TP0844</name>
+</trkpt>
+<trkpt lat="54.787050000" lon="-2.344219900">
+ <ele>416.000000</ele>
+ <name>TP0845</name>
+</trkpt>
+<trkpt lat="54.787031600" lon="-2.344213300">
+ <ele>416.000000</ele>
+ <name>TP0846</name>
+</trkpt>
+<trkpt lat="54.786981600" lon="-2.344205000">
+ <ele>416.000000</ele>
+ <name>TP0847</name>
+</trkpt>
+<trkpt lat="54.786751600" lon="-2.344201600">
+ <ele>416.000000</ele>
+ <name>TP0848</name>
+</trkpt>
+<trkpt lat="54.786753200" lon="-2.344278300">
+ <ele>416.000000</ele>
+ <name>TP0849</name>
+</trkpt>
+<trkpt lat="54.786756600" lon="-2.344225000">
+ <ele>416.000000</ele>
+ <name>TP0850</name>
+</trkpt>
+<trkpt lat="54.786768300" lon="-2.344211600">
+ <ele>416.000000</ele>
+ <name>TP0851</name>
+</trkpt>
+<trkpt lat="54.786774900" lon="-2.344198300">
+ <ele>416.000000</ele>
+ <name>TP0852</name>
+</trkpt>
+<trkpt lat="54.786781600" lon="-2.344188300">
+ <ele>416.000000</ele>
+ <name>TP0853</name>
+</trkpt>
+<trkpt lat="54.786776600" lon="-2.344205000">
+ <ele>416.000000</ele>
+ <name>TP0854</name>
+</trkpt>
+<trkpt lat="54.786773300" lon="-2.344203300">
+ <ele>416.000000</ele>
+ <name>TP0855</name>
+</trkpt>
+<trkpt lat="54.786771600" lon="-2.344201600">
+ <ele>416.000000</ele>
+ <name>TP0856</name>
+</trkpt>
+<trkpt lat="54.786770000" lon="-2.344198300">
+ <ele>416.000000</ele>
+ <name>TP0857</name>
+</trkpt>
+<trkpt lat="54.786768300" lon="-2.344193300">
+ <ele>416.000000</ele>
+ <name>TP0858</name>
+</trkpt>
+<trkpt lat="54.786770000" lon="-2.344183300">
+ <ele>417.000000</ele>
+ <name>TP0859</name>
+</trkpt>
+<trkpt lat="54.786753200" lon="-2.344168300">
+ <ele>417.000000</ele>
+ <name>TP0860</name>
+</trkpt>
+<trkpt lat="54.786776600" lon="-2.344163300">
+ <ele>418.000000</ele>
+ <name>TP0861</name>
+</trkpt>
+<trkpt lat="54.786799900" lon="-2.344174900">
+ <ele>418.000000</ele>
+ <name>TP0862</name>
+</trkpt>
+<trkpt lat="54.786855000" lon="-2.344193300">
+ <ele>419.000000</ele>
+ <name>TP0863</name>
+</trkpt>
+<trkpt lat="54.786858300" lon="-2.344184900">
+ <ele>419.000000</ele>
+ <name>TP0864</name>
+</trkpt>
+<trkpt lat="54.786865000" lon="-2.344170000">
+ <ele>420.000000</ele>
+ <name>TP0865</name>
+</trkpt>
+<trkpt lat="54.786866600" lon="-2.344166600">
+ <ele>420.000000</ele>
+ <name>TP0866</name>
+</trkpt>
+<trkpt lat="54.786871600" lon="-2.344163300">
+ <ele>419.000000</ele>
+ <name>TP0867</name>
+</trkpt>
+<trkpt lat="54.786876600" lon="-2.344163300">
+ <ele>419.000000</ele>
+ <name>TP0868</name>
+</trkpt>
+<trkpt lat="54.786881600" lon="-2.344161600">
+ <ele>419.000000</ele>
+ <name>TP0869</name>
+</trkpt>
+<trkpt lat="54.786896600" lon="-2.344171600">
+ <ele>421.000000</ele>
+ <name>TP0870</name>
+</trkpt>
+<trkpt lat="54.786899900" lon="-2.344176600">
+ <ele>421.000000</ele>
+ <name>TP0871</name>
+</trkpt>
+<trkpt lat="54.786910000" lon="-2.344178300">
+ <ele>421.000000</ele>
+ <name>TP0872</name>
+</trkpt>
+<trkpt lat="54.786921600" lon="-2.344183300">
+ <ele>421.000000</ele>
+ <name>TP0873</name>
+</trkpt>
+<trkpt lat="54.786935000" lon="-2.344188300">
+ <ele>422.000000</ele>
+ <name>TP0874</name>
+</trkpt>
+<trkpt lat="54.786950000" lon="-2.344194900">
+ <ele>422.000000</ele>
+ <name>TP0875</name>
+</trkpt>
+<trkpt lat="54.786973300" lon="-2.344203300">
+ <ele>422.000000</ele>
+ <name>TP0876</name>
+</trkpt>
+<trkpt lat="54.786995000" lon="-2.344208300">
+ <ele>422.000000</ele>
+ <name>TP0877</name>
+</trkpt>
+<trkpt lat="54.787014900" lon="-2.344211600">
+ <ele>422.000000</ele>
+ <name>TP0878</name>
+</trkpt>
+<trkpt lat="54.787048300" lon="-2.344214900">
+ <ele>423.000000</ele>
+ <name>TP0879</name>
+</trkpt>
+<trkpt lat="54.787065000" lon="-2.344218300">
+ <ele>423.000000</ele>
+ <name>TP0880</name>
+</trkpt>
+<trkpt lat="54.787098300" lon="-2.344214900">
+ <ele>423.000000</ele>
+ <name>TP0881</name>
+</trkpt>
+<trkpt lat="54.787054900" lon="-2.344218300">
+ <ele>423.000000</ele>
+ <name>TP0882</name>
+</trkpt>
+<trkpt lat="54.787023300" lon="-2.344231600">
+ <ele>423.000000</ele>
+ <name>TP0883</name>
+</trkpt>
+<trkpt lat="54.786998300" lon="-2.344254900">
+ <ele>423.000000</ele>
+ <name>TP0884</name>
+</trkpt>
+<trkpt lat="54.787009900" lon="-2.344263300">
+ <ele>423.000000</ele>
+ <name>TP0885</name>
+</trkpt>
+<trkpt lat="54.786998300" lon="-2.344254900">
+ <ele>423.000000</ele>
+ <name>TP0886</name>
+</trkpt>
+<trkpt lat="54.787003300" lon="-2.344244900">
+ <ele>423.000000</ele>
+ <name>TP0887</name>
+</trkpt>
+<trkpt lat="54.787011600" lon="-2.344240000">
+ <ele>423.000000</ele>
+ <name>TP0888</name>
+</trkpt>
+<trkpt lat="54.787014900" lon="-2.344236600">
+ <ele>423.000000</ele>
+ <name>TP0889</name>
+</trkpt>
+<trkpt lat="54.787020000" lon="-2.344231600">
+ <ele>423.000000</ele>
+ <name>TP0890</name>
+</trkpt>
+<trkpt lat="54.787024900" lon="-2.344223300">
+ <ele>423.000000</ele>
+ <name>TP0891</name>
+</trkpt>
+<trkpt lat="54.787029900" lon="-2.344218300">
+ <ele>423.000000</ele>
+ <name>TP0892</name>
+</trkpt>
+<trkpt lat="54.787036600" lon="-2.344218300">
+ <ele>423.000000</ele>
+ <name>TP0893</name>
+</trkpt>
+<trkpt lat="54.787038300" lon="-2.344214900">
+ <ele>423.000000</ele>
+ <name>TP0894</name>
+</trkpt>
+<trkpt lat="54.787138300" lon="-2.344179900">
+ <ele>424.000000</ele>
+ <name>TP0895</name>
+</trkpt>
+<trkpt lat="54.787175000" lon="-2.344158300">
+ <ele>424.000000</ele>
+ <name>TP0896</name>
+</trkpt>
+<trkpt lat="54.787205000" lon="-2.344171600">
+ <ele>425.000000</ele>
+ <name>TP0897</name>
+</trkpt>
+<trkpt lat="54.787215000" lon="-2.344176600">
+ <ele>425.000000</ele>
+ <name>TP0898</name>
+</trkpt>
+<trkpt lat="54.787219900" lon="-2.344179900">
+ <ele>425.000000</ele>
+ <name>TP0899</name>
+</trkpt>
+<trkpt lat="54.787226600" lon="-2.344184900">
+ <ele>425.000000</ele>
+ <name>TP0900</name>
+</trkpt>
+<trkpt lat="54.787233300" lon="-2.344193300">
+ <ele>425.000000</ele>
+ <name>TP0901</name>
+</trkpt>
+<trkpt lat="54.787239900" lon="-2.344198300">
+ <ele>425.000000</ele>
+ <name>TP0902</name>
+</trkpt>
+<trkpt lat="54.787246600" lon="-2.344203300">
+ <ele>425.000000</ele>
+ <name>TP0903</name>
+</trkpt>
+<trkpt lat="54.787253300" lon="-2.344208300">
+ <ele>425.000000</ele>
+ <name>TP0904</name>
+</trkpt>
+<trkpt lat="54.787231600" lon="-2.344213300">
+ <ele>425.000000</ele>
+ <name>TP0905</name>
+</trkpt>
+<trkpt lat="54.787216600" lon="-2.344203300">
+ <ele>425.000000</ele>
+ <name>TP0906</name>
+</trkpt>
+<trkpt lat="54.787183300" lon="-2.344191600">
+ <ele>425.000000</ele>
+ <name>TP0907</name>
+</trkpt>
+<trkpt lat="54.787164900" lon="-2.344183300">
+ <ele>425.000000</ele>
+ <name>TP0908</name>
+</trkpt>
+<trkpt lat="54.787146600" lon="-2.344176600">
+ <ele>425.000000</ele>
+ <name>TP0909</name>
+</trkpt>
+<trkpt lat="54.787151600" lon="-2.344179900">
+ <ele>425.000000</ele>
+ <name>TP0910</name>
+</trkpt>
+<trkpt lat="54.787153300" lon="-2.344181600">
+ <ele>425.000000</ele>
+ <name>TP0911</name>
+</trkpt>
+<trkpt lat="54.787158300" lon="-2.344186600">
+ <ele>425.000000</ele>
+ <name>TP0912</name>
+</trkpt>
+<trkpt lat="54.787164900" lon="-2.344190000">
+ <ele>425.000000</ele>
+ <name>TP0913</name>
+</trkpt>
+<trkpt lat="54.787160000" lon="-2.344193300">
+ <ele>425.000000</ele>
+ <name>TP0914</name>
+</trkpt>
+<trkpt lat="54.787160000" lon="-2.344193300">
+ <ele>425.000000</ele>
+ <name>TP0915</name>
+</trkpt>
+<trkpt lat="54.787163300" lon="-2.344194900">
+ <ele>425.000000</ele>
+ <name>TP0916</name>
+</trkpt>
+<trkpt lat="54.787164900" lon="-2.344196600">
+ <ele>425.000000</ele>
+ <name>TP0917</name>
+</trkpt>
+<trkpt lat="54.787146600" lon="-2.344178300">
+ <ele>425.000000</ele>
+ <name>TP0918</name>
+</trkpt>
+<trkpt lat="54.787141600" lon="-2.344176600">
+ <ele>425.000000</ele>
+ <name>TP0919</name>
+</trkpt>
+<trkpt lat="54.787136600" lon="-2.344183300">
+ <ele>425.000000</ele>
+ <name>TP0920</name>
+</trkpt>
+<trkpt lat="54.787129900" lon="-2.344188300">
+ <ele>425.000000</ele>
+ <name>TP0921</name>
+</trkpt>
+<trkpt lat="54.787133300" lon="-2.344183300">
+ <ele>425.000000</ele>
+ <name>TP0922</name>
+</trkpt>
+<trkpt lat="54.787129900" lon="-2.344186600">
+ <ele>425.000000</ele>
+ <name>TP0923</name>
+</trkpt>
+<trkpt lat="54.787139900" lon="-2.344179900">
+ <ele>425.000000</ele>
+ <name>TP0924</name>
+</trkpt>
+<trkpt lat="54.787145000" lon="-2.344183300">
+ <ele>425.000000</ele>
+ <name>TP0925</name>
+</trkpt>
+<trkpt lat="54.787149900" lon="-2.344179900">
+ <ele>425.000000</ele>
+ <name>TP0926</name>
+</trkpt>
+<trkpt lat="54.787146600" lon="-2.344173300">
+ <ele>425.000000</ele>
+ <name>TP0927</name>
+</trkpt>
+<trkpt lat="54.787145000" lon="-2.344171600">
+ <ele>425.000000</ele>
+ <name>TP0928</name>
+</trkpt>
+<trkpt lat="54.787143300" lon="-2.344170000">
+ <ele>425.000000</ele>
+ <name>TP0929</name>
+</trkpt>
+<trkpt lat="54.787139900" lon="-2.344170000">
+ <ele>425.000000</ele>
+ <name>TP0930</name>
+</trkpt>
+<trkpt lat="54.787136600" lon="-2.344170000">
+ <ele>425.000000</ele>
+ <name>TP0931</name>
+</trkpt>
+<trkpt lat="54.787133300" lon="-2.344166600">
+ <ele>425.000000</ele>
+ <name>TP0932</name>
+</trkpt>
+<trkpt lat="54.787128300" lon="-2.344168300">
+ <ele>425.000000</ele>
+ <name>TP0933</name>
+</trkpt>
+<trkpt lat="54.787123300" lon="-2.344171600">
+ <ele>425.000000</ele>
+ <name>TP0934</name>
+</trkpt>
+<trkpt lat="54.787120000" lon="-2.344170000">
+ <ele>425.000000</ele>
+ <name>TP0935</name>
+</trkpt>
+<trkpt lat="54.787121600" lon="-2.344178300">
+ <ele>425.000000</ele>
+ <name>TP0936</name>
+</trkpt>
+<trkpt lat="54.787118300" lon="-2.344166600">
+ <ele>425.000000</ele>
+ <name>TP0937</name>
+</trkpt>
+<trkpt lat="54.787128300" lon="-2.344173300">
+ <ele>425.000000</ele>
+ <name>TP0938</name>
+</trkpt>
+<trkpt lat="54.787141600" lon="-2.344176600">
+ <ele>425.000000</ele>
+ <name>TP0939</name>
+</trkpt>
+<trkpt lat="54.787166600" lon="-2.344198300">
+ <ele>425.000000</ele>
+ <name>TP0940</name>
+</trkpt>
+<trkpt lat="54.787161600" lon="-2.344219900">
+ <ele>425.000000</ele>
+ <name>TP0941</name>
+</trkpt>
+<trkpt lat="54.787156600" lon="-2.344219900">
+ <ele>425.000000</ele>
+ <name>TP0942</name>
+</trkpt>
+<trkpt lat="54.787156600" lon="-2.344223300">
+ <ele>425.000000</ele>
+ <name>TP0943</name>
+</trkpt>
+<trkpt lat="54.787146600" lon="-2.344226600">
+ <ele>425.000000</ele>
+ <name>TP0944</name>
+</trkpt>
+<trkpt lat="54.787133300" lon="-2.344228300">
+ <ele>425.000000</ele>
+ <name>TP0945</name>
+</trkpt>
+<trkpt lat="54.787121600" lon="-2.344229900">
+ <ele>425.000000</ele>
+ <name>TP0946</name>
+</trkpt>
+<trkpt lat="54.787129900" lon="-2.344201600">
+ <ele>426.000000</ele>
+ <name>TP0947</name>
+</trkpt>
+<trkpt lat="54.787123300" lon="-2.344190000">
+ <ele>426.000000</ele>
+ <name>TP0948</name>
+</trkpt>
+<trkpt lat="54.787141600" lon="-2.344178300">
+ <ele>426.000000</ele>
+ <name>TP0949</name>
+</trkpt>
+<trkpt lat="54.787146600" lon="-2.344179900">
+ <ele>426.000000</ele>
+ <name>TP0950</name>
+</trkpt>
+<trkpt lat="54.787149900" lon="-2.344179900">
+ <ele>426.000000</ele>
+ <name>TP0951</name>
+</trkpt>
+<trkpt lat="54.787151600" lon="-2.344179900">
+ <ele>426.000000</ele>
+ <name>TP0952</name>
+</trkpt>
+<trkpt lat="54.787158300" lon="-2.344179900">
+ <ele>426.000000</ele>
+ <name>TP0953</name>
+</trkpt>
+<trkpt lat="54.787164900" lon="-2.344179900">
+ <ele>426.000000</ele>
+ <name>TP0954</name>
+</trkpt>
+<trkpt lat="54.787161600" lon="-2.344181600">
+ <ele>426.000000</ele>
+ <name>TP0955</name>
+</trkpt>
+<trkpt lat="54.787161600" lon="-2.344181600">
+ <ele>426.000000</ele>
+ <name>TP0956</name>
+</trkpt>
+<trkpt lat="54.787154900" lon="-2.344176600">
+ <ele>426.000000</ele>
+ <name>TP0957</name>
+</trkpt>
+<trkpt lat="54.787160000" lon="-2.344176600">
+ <ele>426.000000</ele>
+ <name>TP0958</name>
+</trkpt>
+<trkpt lat="54.787166600" lon="-2.344174900">
+ <ele>426.000000</ele>
+ <name>TP0959</name>
+</trkpt>
+<trkpt lat="54.787171600" lon="-2.344173300">
+ <ele>426.000000</ele>
+ <name>TP0960</name>
+</trkpt>
+<trkpt lat="54.787178300" lon="-2.344173300">
+ <ele>426.000000</ele>
+ <name>TP0961</name>
+</trkpt>
+<trkpt lat="54.787181600" lon="-2.344170000">
+ <ele>426.000000</ele>
+ <name>TP0962</name>
+</trkpt>
+<trkpt lat="54.787183300" lon="-2.344158300">
+ <ele>426.000000</ele>
+ <name>TP0963</name>
+</trkpt>
+<trkpt lat="54.787193300" lon="-2.344158300">
+ <ele>426.000000</ele>
+ <name>TP0964</name>
+</trkpt>
+<trkpt lat="54.787203300" lon="-2.344153300">
+ <ele>426.000000</ele>
+ <name>TP0965</name>
+</trkpt>
+<trkpt lat="54.787213300" lon="-2.344156600">
+ <ele>426.000000</ele>
+ <name>TP0966</name>
+</trkpt>
+<trkpt lat="54.787216600" lon="-2.344141600">
+ <ele>426.000000</ele>
+ <name>TP0967</name>
+</trkpt>
+<trkpt lat="54.787216600" lon="-2.344146600">
+ <ele>426.000000</ele>
+ <name>TP0968</name>
+</trkpt>
+<trkpt lat="54.787224900" lon="-2.344143300">
+ <ele>426.000000</ele>
+ <name>TP0969</name>
+</trkpt>
+<trkpt lat="54.787211600" lon="-2.344136600">
+ <ele>426.000000</ele>
+ <name>TP0970</name>
+</trkpt>
+<trkpt lat="54.787186600" lon="-2.344135000">
+ <ele>426.000000</ele>
+ <name>TP0971</name>
+</trkpt>
+<trkpt lat="54.787163300" lon="-2.344136600">
+ <ele>426.000000</ele>
+ <name>TP0972</name>
+</trkpt>
+<trkpt lat="54.787139900" lon="-2.344139900">
+ <ele>426.000000</ele>
+ <name>TP0973</name>
+</trkpt>
+<trkpt lat="54.787118300" lon="-2.344143300">
+ <ele>426.000000</ele>
+ <name>TP0974</name>
+</trkpt>
+<trkpt lat="54.787098300" lon="-2.344144900">
+ <ele>426.000000</ele>
+ <name>TP0975</name>
+</trkpt>
+<trkpt lat="54.787083300" lon="-2.344149900">
+ <ele>426.000000</ele>
+ <name>TP0976</name>
+</trkpt>
+<trkpt lat="54.787069900" lon="-2.344151600">
+ <ele>426.000000</ele>
+ <name>TP0977</name>
+</trkpt>
+<trkpt lat="54.787056600" lon="-2.344151600">
+ <ele>426.000000</ele>
+ <name>TP0978</name>
+</trkpt>
+<trkpt lat="54.787046600" lon="-2.344156600">
+ <ele>426.000000</ele>
+ <name>TP0979</name>
+</trkpt>
+<trkpt lat="54.787033200" lon="-2.344156600">
+ <ele>426.000000</ele>
+ <name>TP0980</name>
+</trkpt>
+<trkpt lat="54.787024900" lon="-2.344158300">
+ <ele>426.000000</ele>
+ <name>TP0981</name>
+</trkpt>
+<trkpt lat="54.787016600" lon="-2.344139900">
+ <ele>426.000000</ele>
+ <name>TP0982</name>
+</trkpt>
+<trkpt lat="54.787011600" lon="-2.344136600">
+ <ele>426.000000</ele>
+ <name>TP0983</name>
+</trkpt>
+<trkpt lat="54.787005000" lon="-2.344138300">
+ <ele>426.000000</ele>
+ <name>TP0984</name>
+</trkpt>
+<trkpt lat="54.786995000" lon="-2.344148300">
+ <ele>426.000000</ele>
+ <name>TP0985</name>
+</trkpt>
+<trkpt lat="54.787006600" lon="-2.344146600">
+ <ele>426.000000</ele>
+ <name>TP0986</name>
+</trkpt>
+<trkpt lat="54.787013300" lon="-2.344144900">
+ <ele>426.000000</ele>
+ <name>TP0987</name>
+</trkpt>
+<trkpt lat="54.787038300" lon="-2.344138300">
+ <ele>426.000000</ele>
+ <name>TP0988</name>
+</trkpt>
+<trkpt lat="54.787036600" lon="-2.344139900">
+ <ele>426.000000</ele>
+ <name>TP0989</name>
+</trkpt>
+<trkpt lat="54.787038300" lon="-2.344138300">
+ <ele>426.000000</ele>
+ <name>TP0990</name>
+</trkpt>
+<trkpt lat="54.787043300" lon="-2.344136600">
+ <ele>426.000000</ele>
+ <name>TP0991</name>
+</trkpt>
+<trkpt lat="54.787036600" lon="-2.344136600">
+ <ele>426.000000</ele>
+ <name>TP0992</name>
+</trkpt>
+<trkpt lat="54.787028300" lon="-2.344135000">
+ <ele>426.000000</ele>
+ <name>TP0993</name>
+</trkpt>
+<trkpt lat="54.787016600" lon="-2.344128300">
+ <ele>426.000000</ele>
+ <name>TP0994</name>
+</trkpt>
+<trkpt lat="54.787014900" lon="-2.344120000">
+ <ele>426.000000</ele>
+ <name>TP0995</name>
+</trkpt>
+<trkpt lat="54.787006600" lon="-2.344105000">
+ <ele>426.000000</ele>
+ <name>TP0996</name>
+</trkpt>
+<trkpt lat="54.787005000" lon="-2.344096600">
+ <ele>426.000000</ele>
+ <name>TP0997</name>
+</trkpt>
+<trkpt lat="54.787005000" lon="-2.344093300">
+ <ele>426.000000</ele>
+ <name>TP0998</name>
+</trkpt>
+<trkpt lat="54.787001600" lon="-2.344085000">
+ <ele>426.000000</ele>
+ <name>TP0999</name>
+</trkpt>
+<trkpt lat="54.786958300" lon="-2.344096600">
+ <ele>426.000000</ele>
+ <name>TP1000</name>
+</trkpt>
+<trkpt lat="54.786948300" lon="-2.344096600">
+ <ele>426.000000</ele>
+ <name>TP1001</name>
+</trkpt>
+<trkpt lat="54.786936600" lon="-2.344089900">
+ <ele>426.000000</ele>
+ <name>TP1002</name>
+</trkpt>
+<trkpt lat="54.786931600" lon="-2.344085000">
+ <ele>426.000000</ele>
+ <name>TP1003</name>
+</trkpt>
+<trkpt lat="54.786931600" lon="-2.344085000">
+ <ele>426.000000</ele>
+ <name>TP1004</name>
+</trkpt>
+<trkpt lat="54.786911600" lon="-2.344089900">
+ <ele>426.000000</ele>
+ <name>TP1005</name>
+</trkpt>
+<trkpt lat="54.786914900" lon="-2.344094900">
+ <ele>426.000000</ele>
+ <name>TP1006</name>
+</trkpt>
+<trkpt lat="54.786925000" lon="-2.344088300">
+ <ele>426.000000</ele>
+ <name>TP1007</name>
+</trkpt>
+<trkpt lat="54.786935000" lon="-2.344088300">
+ <ele>426.000000</ele>
+ <name>TP1008</name>
+</trkpt>
+<trkpt lat="54.786948300" lon="-2.344085000">
+ <ele>426.000000</ele>
+ <name>TP1009</name>
+</trkpt>
+<trkpt lat="54.786954900" lon="-2.344081600">
+ <ele>426.000000</ele>
+ <name>TP1010</name>
+</trkpt>
+<trkpt lat="54.786954900" lon="-2.344079900">
+ <ele>426.000000</ele>
+ <name>TP1011</name>
+</trkpt>
+<trkpt lat="54.786953300" lon="-2.344074900">
+ <ele>426.000000</ele>
+ <name>TP1012</name>
+</trkpt>
+<trkpt lat="54.786953300" lon="-2.344074900">
+ <ele>426.000000</ele>
+ <name>TP1013</name>
+</trkpt>
+<trkpt lat="54.786951600" lon="-2.344073300">
+ <ele>426.000000</ele>
+ <name>TP1014</name>
+</trkpt>
+<trkpt lat="54.786946600" lon="-2.344073300">
+ <ele>426.000000</ele>
+ <name>TP1015</name>
+</trkpt>
+<trkpt lat="54.786941600" lon="-2.344079900">
+ <ele>426.000000</ele>
+ <name>TP1016</name>
+</trkpt>
+<trkpt lat="54.786944900" lon="-2.344079900">
+ <ele>426.000000</ele>
+ <name>TP1017</name>
+</trkpt>
+<trkpt lat="54.786939900" lon="-2.344078300">
+ <ele>426.000000</ele>
+ <name>TP1018</name>
+</trkpt>
+<trkpt lat="54.786935000" lon="-2.344078300">
+ <ele>426.000000</ele>
+ <name>TP1019</name>
+</trkpt>
+<trkpt lat="54.786935000" lon="-2.344078300">
+ <ele>426.000000</ele>
+ <name>TP1020</name>
+</trkpt>
+<trkpt lat="54.786928300" lon="-2.344081600">
+ <ele>426.000000</ele>
+ <name>TP1021</name>
+</trkpt>
+<trkpt lat="54.786933300" lon="-2.344081600">
+ <ele>425.000000</ele>
+ <name>TP1022</name>
+</trkpt>
+<trkpt lat="54.786936600" lon="-2.344083300">
+ <ele>425.000000</ele>
+ <name>TP1023</name>
+</trkpt>
+<trkpt lat="54.786943300" lon="-2.344081600">
+ <ele>426.000000</ele>
+ <name>TP1024</name>
+</trkpt>
+<trkpt lat="54.786948300" lon="-2.344083300">
+ <ele>426.000000</ele>
+ <name>TP1025</name>
+</trkpt>
+<trkpt lat="54.786946600" lon="-2.344088300">
+ <ele>426.000000</ele>
+ <name>TP1026</name>
+</trkpt>
+<trkpt lat="54.786939900" lon="-2.344083300">
+ <ele>426.000000</ele>
+ <name>TP1027</name>
+</trkpt>
+<trkpt lat="54.786944900" lon="-2.344085000">
+ <ele>426.000000</ele>
+ <name>TP1028</name>
+</trkpt>
+<trkpt lat="54.786969900" lon="-2.344078300">
+ <ele>426.000000</ele>
+ <name>TP1029</name>
+</trkpt>
+<trkpt lat="54.786965000" lon="-2.344085000">
+ <ele>426.000000</ele>
+ <name>TP1030</name>
+</trkpt>
+<trkpt lat="54.786965000" lon="-2.344086600">
+ <ele>426.000000</ele>
+ <name>TP1031</name>
+</trkpt>
+<trkpt lat="54.786956600" lon="-2.344081600">
+ <ele>426.000000</ele>
+ <name>TP1032</name>
+</trkpt>
+<trkpt lat="54.786961600" lon="-2.344078300">
+ <ele>426.000000</ele>
+ <name>TP1033</name>
+</trkpt>
+<trkpt lat="54.786966600" lon="-2.344073300">
+ <ele>426.000000</ele>
+ <name>TP1034</name>
+</trkpt>
+<trkpt lat="54.786971600" lon="-2.344074900">
+ <ele>426.000000</ele>
+ <name>TP1035</name>
+</trkpt>
+<trkpt lat="54.786974900" lon="-2.344071600">
+ <ele>426.000000</ele>
+ <name>TP1036</name>
+</trkpt>
+<trkpt lat="54.786984900" lon="-2.344085000">
+ <ele>426.000000</ele>
+ <name>TP1037</name>
+</trkpt>
+<trkpt lat="54.786989900" lon="-2.344089900">
+ <ele>426.000000</ele>
+ <name>TP1038</name>
+</trkpt>
+<trkpt lat="54.786991600" lon="-2.344085000">
+ <ele>426.000000</ele>
+ <name>TP1039</name>
+</trkpt>
+<trkpt lat="54.786995000" lon="-2.344083300">
+ <ele>426.000000</ele>
+ <name>TP1040</name>
+</trkpt>
+<trkpt lat="54.786996600" lon="-2.344081600">
+ <ele>426.000000</ele>
+ <name>TP1041</name>
+</trkpt>
+<trkpt lat="54.787003300" lon="-2.344093300">
+ <ele>426.000000</ele>
+ <name>TP1042</name>
+</trkpt>
+<trkpt lat="54.786999900" lon="-2.344100000">
+ <ele>426.000000</ele>
+ <name>TP1043</name>
+</trkpt>
+<trkpt lat="54.786996600" lon="-2.344106600">
+ <ele>426.000000</ele>
+ <name>TP1044</name>
+</trkpt>
+<trkpt lat="54.786996600" lon="-2.344109900">
+ <ele>426.000000</ele>
+ <name>TP1045</name>
+</trkpt>
+<trkpt lat="54.786984900" lon="-2.344100000">
+ <ele>426.000000</ele>
+ <name>TP1046</name>
+</trkpt>
+<trkpt lat="54.786965000" lon="-2.344136600">
+ <ele>427.000000</ele>
+ <name>TP1047</name>
+</trkpt>
+<trkpt lat="54.786950000" lon="-2.344144900">
+ <ele>427.000000</ele>
+ <name>TP1048</name>
+</trkpt>
+<trkpt lat="54.786911600" lon="-2.344179900">
+ <ele>427.000000</ele>
+ <name>TP1049</name>
+</trkpt>
+<trkpt lat="54.786881600" lon="-2.344193300">
+ <ele>427.000000</ele>
+ <name>TP1050</name>
+</trkpt>
+<trkpt lat="54.786865000" lon="-2.344218300">
+ <ele>427.000000</ele>
+ <name>TP1051</name>
+</trkpt>
+<trkpt lat="54.786853300" lon="-2.344218300">
+ <ele>427.000000</ele>
+ <name>TP1052</name>
+</trkpt>
+<trkpt lat="54.786846600" lon="-2.344218300">
+ <ele>427.000000</ele>
+ <name>TP1053</name>
+</trkpt>
+<trkpt lat="54.786856600" lon="-2.344218300">
+ <ele>427.000000</ele>
+ <name>TP1054</name>
+</trkpt>
+<trkpt lat="54.786869900" lon="-2.344214900">
+ <ele>427.000000</ele>
+ <name>TP1055</name>
+</trkpt>
+<trkpt lat="54.786881600" lon="-2.344213300">
+ <ele>427.000000</ele>
+ <name>TP1056</name>
+</trkpt>
+<trkpt lat="54.786908300" lon="-2.344213300">
+ <ele>427.000000</ele>
+ <name>TP1057</name>
+</trkpt>
+<trkpt lat="54.786926600" lon="-2.344211600">
+ <ele>427.000000</ele>
+ <name>TP1058</name>
+</trkpt>
+<trkpt lat="54.786939900" lon="-2.344214900">
+ <ele>427.000000</ele>
+ <name>TP1059</name>
+</trkpt>
+<trkpt lat="54.786969900" lon="-2.344214900">
+ <ele>427.000000</ele>
+ <name>TP1060</name>
+</trkpt>
+<trkpt lat="54.786984900" lon="-2.344213300">
+ <ele>427.000000</ele>
+ <name>TP1061</name>
+</trkpt>
+<trkpt lat="54.786988300" lon="-2.344214900">
+ <ele>427.000000</ele>
+ <name>TP1062</name>
+</trkpt>
+<trkpt lat="54.787029900" lon="-2.344201600">
+ <ele>427.000000</ele>
+ <name>TP1063</name>
+</trkpt>
+<trkpt lat="54.787021600" lon="-2.344206600">
+ <ele>427.000000</ele>
+ <name>TP1064</name>
+</trkpt>
+<trkpt lat="54.787014900" lon="-2.344209900">
+ <ele>427.000000</ele>
+ <name>TP1065</name>
+</trkpt>
+<trkpt lat="54.787008300" lon="-2.344211600">
+ <ele>427.000000</ele>
+ <name>TP1066</name>
+</trkpt>
+<trkpt lat="54.787003300" lon="-2.344213300">
+ <ele>427.000000</ele>
+ <name>TP1067</name>
+</trkpt>
+<trkpt lat="54.787011600" lon="-2.344213300">
+ <ele>427.000000</ele>
+ <name>TP1068</name>
+</trkpt>
+<trkpt lat="54.787016600" lon="-2.344211600">
+ <ele>427.000000</ele>
+ <name>TP1069</name>
+</trkpt>
+<trkpt lat="54.787011600" lon="-2.344216600">
+ <ele>427.000000</ele>
+ <name>TP1070</name>
+</trkpt>
+<trkpt lat="54.787008300" lon="-2.344218300">
+ <ele>427.000000</ele>
+ <name>TP1071</name>
+</trkpt>
+<trkpt lat="54.786996600" lon="-2.344223300">
+ <ele>427.000000</ele>
+ <name>TP1072</name>
+</trkpt>
+<trkpt lat="54.786948300" lon="-2.344244900">
+ <ele>427.000000</ele>
+ <name>TP1073</name>
+</trkpt>
+<trkpt lat="54.786941600" lon="-2.344246600">
+ <ele>427.000000</ele>
+ <name>TP1074</name>
+</trkpt>
+<trkpt lat="54.786923300" lon="-2.344251600">
+ <ele>427.000000</ele>
+ <name>TP1075</name>
+</trkpt>
+<trkpt lat="54.786925000" lon="-2.344253300">
+ <ele>427.000000</ele>
+ <name>TP1076</name>
+</trkpt>
+<trkpt lat="54.786946600" lon="-2.344244900">
+ <ele>427.000000</ele>
+ <name>TP1077</name>
+</trkpt>
+<trkpt lat="54.786956600" lon="-2.344241600">
+ <ele>427.000000</ele>
+ <name>TP1078</name>
+</trkpt>
+<trkpt lat="54.786968300" lon="-2.344238300">
+ <ele>427.000000</ele>
+ <name>TP1079</name>
+</trkpt>
+<trkpt lat="54.786968300" lon="-2.344240000">
+ <ele>427.000000</ele>
+ <name>TP1080</name>
+</trkpt>
+<trkpt lat="54.786971600" lon="-2.344238300">
+ <ele>427.000000</ele>
+ <name>TP1081</name>
+</trkpt>
+<trkpt lat="54.786974900" lon="-2.344236600">
+ <ele>427.000000</ele>
+ <name>TP1082</name>
+</trkpt>
+<trkpt lat="54.786984900" lon="-2.344234900">
+ <ele>427.000000</ele>
+ <name>TP1083</name>
+</trkpt>
+<trkpt lat="54.786988300" lon="-2.344233300">
+ <ele>427.000000</ele>
+ <name>TP1084</name>
+</trkpt>
+<trkpt lat="54.786993300" lon="-2.344231600">
+ <ele>427.000000</ele>
+ <name>TP1085</name>
+</trkpt>
+<trkpt lat="54.787005000" lon="-2.344228300">
+ <ele>427.000000</ele>
+ <name>TP1086</name>
+</trkpt>
+<trkpt lat="54.787013300" lon="-2.344225000">
+ <ele>427.000000</ele>
+ <name>TP1087</name>
+</trkpt>
+<trkpt lat="54.787023300" lon="-2.344225000">
+ <ele>427.000000</ele>
+ <name>TP1088</name>
+</trkpt>
+<trkpt lat="54.787023300" lon="-2.344226600">
+ <ele>427.000000</ele>
+ <name>TP1089</name>
+</trkpt>
+<trkpt lat="54.787018300" lon="-2.344228300">
+ <ele>427.000000</ele>
+ <name>TP1090</name>
+</trkpt>
+<trkpt lat="54.787014900" lon="-2.344229900">
+ <ele>427.000000</ele>
+ <name>TP1091</name>
+</trkpt>
+<trkpt lat="54.787008300" lon="-2.344234900">
+ <ele>427.000000</ele>
+ <name>TP1092</name>
+</trkpt>
+<trkpt lat="54.787001600" lon="-2.344241600">
+ <ele>427.000000</ele>
+ <name>TP1093</name>
+</trkpt>
+<trkpt lat="54.786996600" lon="-2.344258300">
+ <ele>427.000000</ele>
+ <name>TP1094</name>
+</trkpt>
+<trkpt lat="54.786991600" lon="-2.344263300">
+ <ele>427.000000</ele>
+ <name>TP1095</name>
+</trkpt>
+<trkpt lat="54.786983300" lon="-2.344269900">
+ <ele>427.000000</ele>
+ <name>TP1096</name>
+</trkpt>
+<trkpt lat="54.786973300" lon="-2.344278300">
+ <ele>427.000000</ele>
+ <name>TP1097</name>
+</trkpt>
+<trkpt lat="54.786965000" lon="-2.344288300">
+ <ele>427.000000</ele>
+ <name>TP1098</name>
+</trkpt>
+<trkpt lat="54.786956600" lon="-2.344298300">
+ <ele>427.000000</ele>
+ <name>TP1099</name>
+</trkpt>
+<trkpt lat="54.786950000" lon="-2.344311600">
+ <ele>427.000000</ele>
+ <name>TP1100</name>
+</trkpt>
+<trkpt lat="54.786938300" lon="-2.344323300">
+ <ele>427.000000</ele>
+ <name>TP1101</name>
+</trkpt>
+<trkpt lat="54.786929900" lon="-2.344345000">
+ <ele>428.000000</ele>
+ <name>TP1102</name>
+</trkpt>
+<trkpt lat="54.786939900" lon="-2.344346600">
+ <ele>428.000000</ele>
+ <name>TP1103</name>
+</trkpt>
+<trkpt lat="54.786943300" lon="-2.344351600">
+ <ele>428.000000</ele>
+ <name>TP1104</name>
+</trkpt>
+<trkpt lat="54.786954900" lon="-2.344356600">
+ <ele>428.000000</ele>
+ <name>TP1105</name>
+</trkpt>
+<trkpt lat="54.786961600" lon="-2.344361600">
+ <ele>428.000000</ele>
+ <name>TP1106</name>
+</trkpt>
+<trkpt lat="54.786961600" lon="-2.344378300">
+ <ele>428.000000</ele>
+ <name>TP1107</name>
+</trkpt>
+<trkpt lat="54.786951600" lon="-2.344393300">
+ <ele>428.000000</ele>
+ <name>TP1108</name>
+</trkpt>
+<trkpt lat="54.786958300" lon="-2.344389900">
+ <ele>428.000000</ele>
+ <name>TP1109</name>
+</trkpt>
+<trkpt lat="54.786959900" lon="-2.344388300">
+ <ele>428.000000</ele>
+ <name>TP1110</name>
+</trkpt>
+<trkpt lat="54.786936600" lon="-2.344396600">
+ <ele>428.000000</ele>
+ <name>TP1111</name>
+</trkpt>
+<trkpt lat="54.786913300" lon="-2.344398300">
+ <ele>428.000000</ele>
+ <name>TP1112</name>
+</trkpt>
+<trkpt lat="54.786911600" lon="-2.344398300">
+ <ele>428.000000</ele>
+ <name>TP1113</name>
+</trkpt>
+<trkpt lat="54.786910000" lon="-2.344394900">
+ <ele>428.000000</ele>
+ <name>TP1114</name>
+</trkpt>
+<trkpt lat="54.786895000" lon="-2.344398300">
+ <ele>428.000000</ele>
+ <name>TP1115</name>
+</trkpt>
+<trkpt lat="54.786883300" lon="-2.344398300">
+ <ele>428.000000</ele>
+ <name>TP1116</name>
+</trkpt>
+<trkpt lat="54.786866600" lon="-2.344404900">
+ <ele>428.000000</ele>
+ <name>TP1117</name>
+</trkpt>
+<trkpt lat="54.786846600" lon="-2.344403300">
+ <ele>428.000000</ele>
+ <name>TP1118</name>
+</trkpt>
+<trkpt lat="54.786834900" lon="-2.344398300">
+ <ele>428.000000</ele>
+ <name>TP1119</name>
+</trkpt>
+<trkpt lat="54.786825000" lon="-2.344393300">
+ <ele>428.000000</ele>
+ <name>TP1120</name>
+</trkpt>
+<trkpt lat="54.786823200" lon="-2.344450000">
+ <ele>428.000000</ele>
+ <name>TP1121</name>
+</trkpt>
+<trkpt lat="54.786821600" lon="-2.344451600">
+ <ele>428.000000</ele>
+ <name>TP1122</name>
+</trkpt>
+<trkpt lat="54.786825000" lon="-2.344446600">
+ <ele>428.000000</ele>
+ <name>TP1123</name>
+</trkpt>
+<trkpt lat="54.786826600" lon="-2.344441600">
+ <ele>428.000000</ele>
+ <name>TP1124</name>
+</trkpt>
+<trkpt lat="54.786828300" lon="-2.344433300">
+ <ele>428.000000</ele>
+ <name>TP1125</name>
+</trkpt>
+<trkpt lat="54.786829900" lon="-2.344428300">
+ <ele>428.000000</ele>
+ <name>TP1126</name>
+</trkpt>
+<trkpt lat="54.786840000" lon="-2.344408300">
+ <ele>428.000000</ele>
+ <name>TP1127</name>
+</trkpt>
+<trkpt lat="54.786840000" lon="-2.344398300">
+ <ele>428.000000</ele>
+ <name>TP1128</name>
+</trkpt>
+<trkpt lat="54.786844900" lon="-2.344381600">
+ <ele>428.000000</ele>
+ <name>TP1129</name>
+</trkpt>
+<trkpt lat="54.786843300" lon="-2.344371600">
+ <ele>428.000000</ele>
+ <name>TP1130</name>
+</trkpt>
+<trkpt lat="54.786843300" lon="-2.344363300">
+ <ele>428.000000</ele>
+ <name>TP1131</name>
+</trkpt>
+<trkpt lat="54.786848300" lon="-2.344351600">
+ <ele>428.000000</ele>
+ <name>TP1132</name>
+</trkpt>
+<trkpt lat="54.786856600" lon="-2.344334900">
+ <ele>428.000000</ele>
+ <name>TP1133</name>
+</trkpt>
+<trkpt lat="54.786848300" lon="-2.344346600">
+ <ele>428.000000</ele>
+ <name>TP1134</name>
+</trkpt>
+<trkpt lat="54.786850000" lon="-2.344354900">
+ <ele>428.000000</ele>
+ <name>TP1135</name>
+</trkpt>
+<trkpt lat="54.786846600" lon="-2.344354900">
+ <ele>428.000000</ele>
+ <name>TP1136</name>
+</trkpt>
+<trkpt lat="54.786843300" lon="-2.344354900">
+ <ele>428.000000</ele>
+ <name>TP1137</name>
+</trkpt>
+<trkpt lat="54.786833300" lon="-2.344374900">
+ <ele>428.000000</ele>
+ <name>TP1138</name>
+</trkpt>
+<trkpt lat="54.786869900" lon="-2.344339900">
+ <ele>428.000000</ele>
+ <name>TP1139</name>
+</trkpt>
+<trkpt lat="54.786895000" lon="-2.344316600">
+ <ele>428.000000</ele>
+ <name>TP1140</name>
+</trkpt>
+<trkpt lat="54.786903300" lon="-2.344310000">
+ <ele>428.000000</ele>
+ <name>TP1141</name>
+</trkpt>
+<trkpt lat="54.786913300" lon="-2.344293300">
+ <ele>428.000000</ele>
+ <name>TP1142</name>
+</trkpt>
+<trkpt lat="54.786911600" lon="-2.344291600">
+ <ele>428.000000</ele>
+ <name>TP1143</name>
+</trkpt>
+<trkpt lat="54.786913300" lon="-2.344281600">
+ <ele>428.000000</ele>
+ <name>TP1144</name>
+</trkpt>
+<trkpt lat="54.786935000" lon="-2.344264900">
+ <ele>428.000000</ele>
+ <name>TP1145</name>
+</trkpt>
+<trkpt lat="54.786980000" lon="-2.344234900">
+ <ele>428.000000</ele>
+ <name>TP1146</name>
+</trkpt>
+<trkpt lat="54.786998300" lon="-2.344221600">
+ <ele>428.000000</ele>
+ <name>TP1147</name>
+</trkpt>
+<trkpt lat="54.787016600" lon="-2.344211600">
+ <ele>428.000000</ele>
+ <name>TP1148</name>
+</trkpt>
+<trkpt lat="54.787053300" lon="-2.344188300">
+ <ele>428.000000</ele>
+ <name>TP1149</name>
+</trkpt>
+<trkpt lat="54.787041600" lon="-2.344205000">
+ <ele>428.000000</ele>
+ <name>TP1150</name>
+</trkpt>
+<trkpt lat="54.787038300" lon="-2.344206600">
+ <ele>428.000000</ele>
+ <name>TP1151</name>
+</trkpt>
+<trkpt lat="54.787035000" lon="-2.344214900">
+ <ele>428.000000</ele>
+ <name>TP1152</name>
+</trkpt>
+<trkpt lat="54.787033200" lon="-2.344219900">
+ <ele>428.000000</ele>
+ <name>TP1153</name>
+</trkpt>
+<trkpt lat="54.787031600" lon="-2.344229900">
+ <ele>428.000000</ele>
+ <name>TP1154</name>
+</trkpt>
+<trkpt lat="54.787031600" lon="-2.344233300">
+ <ele>428.000000</ele>
+ <name>TP1155</name>
+</trkpt>
+<trkpt lat="54.787036600" lon="-2.344241600">
+ <ele>428.000000</ele>
+ <name>TP1156</name>
+</trkpt>
+<trkpt lat="54.787039900" lon="-2.344248300">
+ <ele>428.000000</ele>
+ <name>TP1157</name>
+</trkpt>
+<trkpt lat="54.787038300" lon="-2.344263300">
+ <ele>428.000000</ele>
+ <name>TP1158</name>
+</trkpt>
+<trkpt lat="54.787029900" lon="-2.344275000">
+ <ele>428.000000</ele>
+ <name>TP1159</name>
+</trkpt>
+<trkpt lat="54.787024900" lon="-2.344269900">
+ <ele>428.000000</ele>
+ <name>TP1160</name>
+</trkpt>
+<trkpt lat="54.787014900" lon="-2.344278300">
+ <ele>428.000000</ele>
+ <name>TP1161</name>
+</trkpt>
+<trkpt lat="54.787008300" lon="-2.344283300">
+ <ele>428.000000</ele>
+ <name>TP1162</name>
+</trkpt>
+<trkpt lat="54.786996600" lon="-2.344298300">
+ <ele>428.000000</ele>
+ <name>TP1163</name>
+</trkpt>
+<trkpt lat="54.786984900" lon="-2.344304900">
+ <ele>428.000000</ele>
+ <name>TP1164</name>
+</trkpt>
+<trkpt lat="54.786974900" lon="-2.344313300">
+ <ele>428.000000</ele>
+ <name>TP1165</name>
+</trkpt>
+<trkpt lat="54.786965000" lon="-2.344319900">
+ <ele>428.000000</ele>
+ <name>TP1166</name>
+</trkpt>
+<trkpt lat="54.786951600" lon="-2.344323300">
+ <ele>428.000000</ele>
+ <name>TP1167</name>
+</trkpt>
+<trkpt lat="54.786948300" lon="-2.344295000">
+ <ele>428.000000</ele>
+ <name>TP1168</name>
+</trkpt>
+<trkpt lat="54.786974900" lon="-2.344260000">
+ <ele>428.000000</ele>
+ <name>TP1169</name>
+</trkpt>
+<trkpt lat="54.786966600" lon="-2.344266600">
+ <ele>428.000000</ele>
+ <name>TP1170</name>
+</trkpt>
+<trkpt lat="54.786956600" lon="-2.344266600">
+ <ele>428.000000</ele>
+ <name>TP1171</name>
+</trkpt>
+<trkpt lat="54.786896600" lon="-2.344613300">
+ <ele>428.000000</ele>
+ <name>TP1172</name>
+</trkpt>
+<trkpt lat="54.786889900" lon="-2.344494900">
+ <ele>428.000000</ele>
+ <name>TP1173</name>
+</trkpt>
+<trkpt lat="54.786916600" lon="-2.344330000">
+ <ele>428.000000</ele>
+ <name>TP1174</name>
+</trkpt>
+<trkpt lat="54.786956600" lon="-2.344273300">
+ <ele>428.000000</ele>
+ <name>TP1175</name>
+</trkpt>
+<trkpt lat="54.786956600" lon="-2.344281600">
+ <ele>428.000000</ele>
+ <name>TP1176</name>
+</trkpt>
+<trkpt lat="54.786961600" lon="-2.344283300">
+ <ele>428.000000</ele>
+ <name>TP1177</name>
+</trkpt>
+<trkpt lat="54.786954900" lon="-2.344308300">
+ <ele>428.000000</ele>
+ <name>TP1178</name>
+</trkpt>
+<trkpt lat="54.786950000" lon="-2.344306600">
+ <ele>428.000000</ele>
+ <name>TP1179</name>
+</trkpt>
+<trkpt lat="54.786944900" lon="-2.344311600">
+ <ele>428.000000</ele>
+ <name>TP1180</name>
+</trkpt>
+<trkpt lat="54.786941600" lon="-2.344301600">
+ <ele>428.000000</ele>
+ <name>TP1181</name>
+</trkpt>
+<trkpt lat="54.786944900" lon="-2.344301600">
+ <ele>428.000000</ele>
+ <name>TP1182</name>
+</trkpt>
+<trkpt lat="54.786936600" lon="-2.344326600">
+ <ele>428.000000</ele>
+ <name>TP1183</name>
+</trkpt>
+<trkpt lat="54.786935000" lon="-2.344343300">
+ <ele>428.000000</ele>
+ <name>TP1184</name>
+</trkpt>
+<trkpt lat="54.786931600" lon="-2.344348300">
+ <ele>428.000000</ele>
+ <name>TP1185</name>
+</trkpt>
+<trkpt lat="54.786925000" lon="-2.344348300">
+ <ele>428.000000</ele>
+ <name>TP1186</name>
+</trkpt>
+<trkpt lat="54.786928300" lon="-2.344354900">
+ <ele>428.000000</ele>
+ <name>TP1187</name>
+</trkpt>
+<trkpt lat="54.786929900" lon="-2.344341600">
+ <ele>428.000000</ele>
+ <name>TP1188</name>
+</trkpt>
+<trkpt lat="54.786931600" lon="-2.344338300">
+ <ele>428.000000</ele>
+ <name>TP1189</name>
+</trkpt>
+<trkpt lat="54.786906600" lon="-2.344336600">
+ <ele>428.000000</ele>
+ <name>TP1190</name>
+</trkpt>
+<trkpt lat="54.786886600" lon="-2.344339900">
+ <ele>428.000000</ele>
+ <name>TP1191</name>
+</trkpt>
+<trkpt lat="54.786856600" lon="-2.344356600">
+ <ele>428.000000</ele>
+ <name>TP1192</name>
+</trkpt>
+<trkpt lat="54.786819900" lon="-2.344383300">
+ <ele>428.000000</ele>
+ <name>TP1193</name>
+</trkpt>
+<trkpt lat="54.786821600" lon="-2.344374900">
+ <ele>428.000000</ele>
+ <name>TP1194</name>
+</trkpt>
+<trkpt lat="54.786828300" lon="-2.344374900">
+ <ele>428.000000</ele>
+ <name>TP1195</name>
+</trkpt>
+<trkpt lat="54.786833300" lon="-2.344373300">
+ <ele>428.000000</ele>
+ <name>TP1196</name>
+</trkpt>
+<trkpt lat="54.786850000" lon="-2.344363300">
+ <ele>428.000000</ele>
+ <name>TP1197</name>
+</trkpt>
+<trkpt lat="54.786855000" lon="-2.344358300">
+ <ele>428.000000</ele>
+ <name>TP1198</name>
+</trkpt>
+<trkpt lat="54.786863300" lon="-2.344359900">
+ <ele>428.000000</ele>
+ <name>TP1199</name>
+</trkpt>
+<trkpt lat="54.786874900" lon="-2.344356600">
+ <ele>428.000000</ele>
+ <name>TP1200</name>
+</trkpt>
+<trkpt lat="54.786880000" lon="-2.344348300">
+ <ele>428.000000</ele>
+ <name>TP1201</name>
+</trkpt>
+<trkpt lat="54.786878300" lon="-2.344345000">
+ <ele>428.000000</ele>
+ <name>TP1202</name>
+</trkpt>
+<trkpt lat="54.786881600" lon="-2.344338300">
+ <ele>428.000000</ele>
+ <name>TP1203</name>
+</trkpt>
+<trkpt lat="54.786884900" lon="-2.344330000">
+ <ele>428.000000</ele>
+ <name>TP1204</name>
+</trkpt>
+<trkpt lat="54.786878300" lon="-2.344319900">
+ <ele>428.000000</ele>
+ <name>TP1205</name>
+</trkpt>
+<trkpt lat="54.786880000" lon="-2.344313300">
+ <ele>428.000000</ele>
+ <name>TP1206</name>
+</trkpt>
+<trkpt lat="54.786874900" lon="-2.344313300">
+ <ele>428.000000</ele>
+ <name>TP1207</name>
+</trkpt>
+<trkpt lat="54.786869900" lon="-2.344323300">
+ <ele>428.000000</ele>
+ <name>TP1208</name>
+</trkpt>
+<trkpt lat="54.786858300" lon="-2.344326600">
+ <ele>428.000000</ele>
+ <name>TP1209</name>
+</trkpt>
+<trkpt lat="54.786851600" lon="-2.344341600">
+ <ele>428.000000</ele>
+ <name>TP1210</name>
+</trkpt>
+<trkpt lat="54.786865000" lon="-2.344321600">
+ <ele>428.000000</ele>
+ <name>TP1211</name>
+</trkpt>
+<trkpt lat="54.786865000" lon="-2.344321600">
+ <ele>429.000000</ele>
+ <name>TP1212</name>
+</trkpt>
+<trkpt lat="54.786866600" lon="-2.344323300">
+ <ele>429.000000</ele>
+ <name>TP1213</name>
+</trkpt>
+<trkpt lat="54.786865000" lon="-2.344323300">
+ <ele>429.000000</ele>
+ <name>TP1214</name>
+</trkpt>
+<trkpt lat="54.786863300" lon="-2.344323300">
+ <ele>429.000000</ele>
+ <name>TP1215</name>
+</trkpt>
+<trkpt lat="54.786888300" lon="-2.344339900">
+ <ele>429.000000</ele>
+ <name>TP1216</name>
+</trkpt>
+<trkpt lat="54.786929900" lon="-2.344333300">
+ <ele>429.000000</ele>
+ <name>TP1217</name>
+</trkpt>
+<trkpt lat="54.786951600" lon="-2.344331600">
+ <ele>429.000000</ele>
+ <name>TP1218</name>
+</trkpt>
+<trkpt lat="54.786951600" lon="-2.344326600">
+ <ele>429.000000</ele>
+ <name>TP1219</name>
+</trkpt>
+<trkpt lat="54.786956600" lon="-2.344319900">
+ <ele>429.000000</ele>
+ <name>TP1220</name>
+</trkpt>
+<trkpt lat="54.786959900" lon="-2.344318300">
+ <ele>429.000000</ele>
+ <name>TP1221</name>
+</trkpt>
+<trkpt lat="54.786961600" lon="-2.344313300">
+ <ele>429.000000</ele>
+ <name>TP1222</name>
+</trkpt>
+<trkpt lat="54.786961600" lon="-2.344311600">
+ <ele>429.000000</ele>
+ <name>TP1223</name>
+</trkpt>
+<trkpt lat="54.786963200" lon="-2.344306600">
+ <ele>430.000000</ele>
+ <name>TP1224</name>
+</trkpt>
+<trkpt lat="54.786961600" lon="-2.344308300">
+ <ele>430.000000</ele>
+ <name>TP1225</name>
+</trkpt>
+<trkpt lat="54.786968300" lon="-2.344289900">
+ <ele>430.000000</ele>
+ <name>TP1226</name>
+</trkpt>
+<trkpt lat="54.786959900" lon="-2.344288300">
+ <ele>430.000000</ele>
+ <name>TP1227</name>
+</trkpt>
+<trkpt lat="54.786951600" lon="-2.344284900">
+ <ele>430.000000</ele>
+ <name>TP1228</name>
+</trkpt>
+<trkpt lat="54.786971600" lon="-2.344286600">
+ <ele>430.000000</ele>
+ <name>TP1229</name>
+</trkpt>
+<trkpt lat="54.786971600" lon="-2.344288300">
+ <ele>430.000000</ele>
+ <name>TP1230</name>
+</trkpt>
+<trkpt lat="54.786974900" lon="-2.344291600">
+ <ele>430.000000</ele>
+ <name>TP1231</name>
+</trkpt>
+<trkpt lat="54.786980000" lon="-2.344293300">
+ <ele>430.000000</ele>
+ <name>TP1232</name>
+</trkpt>
+<trkpt lat="54.786976600" lon="-2.344301600">
+ <ele>430.000000</ele>
+ <name>TP1233</name>
+</trkpt>
+<trkpt lat="54.786973300" lon="-2.344308300">
+ <ele>430.000000</ele>
+ <name>TP1234</name>
+</trkpt>
+<trkpt lat="54.786971600" lon="-2.344314900">
+ <ele>430.000000</ele>
+ <name>TP1235</name>
+</trkpt>
+<trkpt lat="54.786966600" lon="-2.344323300">
+ <ele>430.000000</ele>
+ <name>TP1236</name>
+</trkpt>
+<trkpt lat="54.786966600" lon="-2.344330000">
+ <ele>430.000000</ele>
+ <name>TP1237</name>
+</trkpt>
+<trkpt lat="54.786971600" lon="-2.344334900">
+ <ele>430.000000</ele>
+ <name>TP1238</name>
+</trkpt>
+<trkpt lat="54.786974900" lon="-2.344333300">
+ <ele>430.000000</ele>
+ <name>TP1239</name>
+</trkpt>
+<trkpt lat="54.786973300" lon="-2.344331600">
+ <ele>430.000000</ele>
+ <name>TP1240</name>
+</trkpt>
+<trkpt lat="54.786971600" lon="-2.344333300">
+ <ele>430.000000</ele>
+ <name>TP1241</name>
+</trkpt>
+<trkpt lat="54.786965000" lon="-2.344339900">
+ <ele>430.000000</ele>
+ <name>TP1242</name>
+</trkpt>
+<trkpt lat="54.786958300" lon="-2.344345000">
+ <ele>430.000000</ele>
+ <name>TP1243</name>
+</trkpt>
+<trkpt lat="54.786953300" lon="-2.344348300">
+ <ele>430.000000</ele>
+ <name>TP1244</name>
+</trkpt>
+<trkpt lat="54.786944900" lon="-2.344354900">
+ <ele>430.000000</ele>
+ <name>TP1245</name>
+</trkpt>
+<trkpt lat="54.786938300" lon="-2.344358300">
+ <ele>430.000000</ele>
+ <name>TP1246</name>
+</trkpt>
+<trkpt lat="54.786919900" lon="-2.344378300">
+ <ele>430.000000</ele>
+ <name>TP1247</name>
+</trkpt>
+<trkpt lat="54.786899900" lon="-2.344389900">
+ <ele>430.000000</ele>
+ <name>TP1248</name>
+</trkpt>
+<trkpt lat="54.786764900" lon="-2.344520000">
+ <ele>430.000000</ele>
+ <name>TP1249</name>
+</trkpt>
+<trkpt lat="54.786771600" lon="-2.344516600">
+ <ele>430.000000</ele>
+ <name>TP1250</name>
+</trkpt>
+<trkpt lat="54.786774900" lon="-2.344521600">
+ <ele>430.000000</ele>
+ <name>TP1251</name>
+</trkpt>
+<trkpt lat="54.786778300" lon="-2.344531600">
+ <ele>430.000000</ele>
+ <name>TP1252</name>
+</trkpt>
+<trkpt lat="54.786783300" lon="-2.344531600">
+ <ele>430.000000</ele>
+ <name>TP1253</name>
+</trkpt>
+<trkpt lat="54.786789900" lon="-2.344534900">
+ <ele>430.000000</ele>
+ <name>TP1254</name>
+</trkpt>
+<trkpt lat="54.786810000" lon="-2.344514900">
+ <ele>430.000000</ele>
+ <name>TP1255</name>
+</trkpt>
+<trkpt lat="54.786841600" lon="-2.344476600">
+ <ele>430.000000</ele>
+ <name>TP1256</name>
+</trkpt>
+<trkpt lat="54.786851600" lon="-2.344464900">
+ <ele>430.000000</ele>
+ <name>TP1257</name>
+</trkpt>
+<trkpt lat="54.786871600" lon="-2.344446600">
+ <ele>430.000000</ele>
+ <name>TP1258</name>
+</trkpt>
+<trkpt lat="54.786886600" lon="-2.344426600">
+ <ele>430.000000</ele>
+ <name>TP1259</name>
+</trkpt>
+<trkpt lat="54.786893200" lon="-2.344423300">
+ <ele>430.000000</ele>
+ <name>TP1260</name>
+</trkpt>
+<trkpt lat="54.786908300" lon="-2.344408300">
+ <ele>430.000000</ele>
+ <name>TP1261</name>
+</trkpt>
+<trkpt lat="54.786926600" lon="-2.344386600">
+ <ele>430.000000</ele>
+ <name>TP1262</name>
+</trkpt>
+<trkpt lat="54.786938300" lon="-2.344368300">
+ <ele>430.000000</ele>
+ <name>TP1263</name>
+</trkpt>
+<trkpt lat="54.786938300" lon="-2.344363300">
+ <ele>430.000000</ele>
+ <name>TP1264</name>
+</trkpt>
+<trkpt lat="54.786946600" lon="-2.344345000">
+ <ele>430.000000</ele>
+ <name>TP1265</name>
+</trkpt>
+<trkpt lat="54.786946600" lon="-2.344338300">
+ <ele>430.000000</ele>
+ <name>TP1266</name>
+</trkpt>
+<trkpt lat="54.786956600" lon="-2.344324900">
+ <ele>430.000000</ele>
+ <name>TP1267</name>
+</trkpt>
+<trkpt lat="54.786963200" lon="-2.344316600">
+ <ele>430.000000</ele>
+ <name>TP1268</name>
+</trkpt>
+<trkpt lat="54.786963200" lon="-2.344328300">
+ <ele>430.000000</ele>
+ <name>TP1269</name>
+</trkpt>
+<trkpt lat="54.786965000" lon="-2.344336600">
+ <ele>430.000000</ele>
+ <name>TP1270</name>
+</trkpt>
+<trkpt lat="54.786956600" lon="-2.344343300">
+ <ele>430.000000</ele>
+ <name>TP1271</name>
+</trkpt>
+<trkpt lat="54.786883300" lon="-2.344459900">
+ <ele>430.000000</ele>
+ <name>TP1272</name>
+</trkpt>
+<trkpt lat="54.786971600" lon="-2.344126600">
+ <ele>431.000000</ele>
+ <name>TP1273</name>
+</trkpt>
+<trkpt lat="54.786981600" lon="-2.344233300">
+ <ele>431.000000</ele>
+ <name>TP1274</name>
+</trkpt>
+<trkpt lat="54.787005000" lon="-2.344244900">
+ <ele>431.000000</ele>
+ <name>TP1275</name>
+</trkpt>
+<trkpt lat="54.786999900" lon="-2.344254900">
+ <ele>431.000000</ele>
+ <name>TP1276</name>
+</trkpt>
+<trkpt lat="54.787005000" lon="-2.344258300">
+ <ele>431.000000</ele>
+ <name>TP1277</name>
+</trkpt>
+<trkpt lat="54.787006600" lon="-2.344273300">
+ <ele>431.000000</ele>
+ <name>TP1278</name>
+</trkpt>
+<trkpt lat="54.787008300" lon="-2.344284900">
+ <ele>431.000000</ele>
+ <name>TP1279</name>
+</trkpt>
+<trkpt lat="54.787005000" lon="-2.344291600">
+ <ele>431.000000</ele>
+ <name>TP1280</name>
+</trkpt>
+<trkpt lat="54.787016600" lon="-2.344298300">
+ <ele>431.000000</ele>
+ <name>TP1281</name>
+</trkpt>
+<trkpt lat="54.787028300" lon="-2.344326600">
+ <ele>431.000000</ele>
+ <name>TP1282</name>
+</trkpt>
+<trkpt lat="54.787035000" lon="-2.344323300">
+ <ele>431.000000</ele>
+ <name>TP1283</name>
+</trkpt>
+<trkpt lat="54.787035000" lon="-2.344336600">
+ <ele>431.000000</ele>
+ <name>TP1284</name>
+</trkpt>
+<trkpt lat="54.787033200" lon="-2.344339900">
+ <ele>431.000000</ele>
+ <name>TP1285</name>
+</trkpt>
+<trkpt lat="54.787036600" lon="-2.344349900">
+ <ele>431.000000</ele>
+ <name>TP1286</name>
+</trkpt>
+<trkpt lat="54.787038300" lon="-2.344363300">
+ <ele>431.000000</ele>
+ <name>TP1287</name>
+</trkpt>
+<trkpt lat="54.787038300" lon="-2.344366600">
+ <ele>431.000000</ele>
+ <name>TP1288</name>
+</trkpt>
+<trkpt lat="54.787031600" lon="-2.344354900">
+ <ele>431.000000</ele>
+ <name>TP1289</name>
+</trkpt>
+<trkpt lat="54.787024900" lon="-2.344368300">
+ <ele>431.000000</ele>
+ <name>TP1290</name>
+</trkpt>
+<trkpt lat="54.787021600" lon="-2.344373300">
+ <ele>431.000000</ele>
+ <name>TP1291</name>
+</trkpt>
+<trkpt lat="54.787023300" lon="-2.344384900">
+ <ele>431.000000</ele>
+ <name>TP1292</name>
+</trkpt>
+<trkpt lat="54.787020000" lon="-2.344396600">
+ <ele>431.000000</ele>
+ <name>TP1293</name>
+</trkpt>
+<trkpt lat="54.787018300" lon="-2.344424900">
+ <ele>431.000000</ele>
+ <name>TP1294</name>
+</trkpt>
+<trkpt lat="54.787014900" lon="-2.344431600">
+ <ele>431.000000</ele>
+ <name>TP1295</name>
+</trkpt>
+<trkpt lat="54.787011600" lon="-2.344443300">
+ <ele>431.000000</ele>
+ <name>TP1296</name>
+</trkpt>
+<trkpt lat="54.787008300" lon="-2.344441600">
+ <ele>431.000000</ele>
+ <name>TP1297</name>
+</trkpt>
+<trkpt lat="54.787001600" lon="-2.344439900">
+ <ele>431.000000</ele>
+ <name>TP1298</name>
+</trkpt>
+<trkpt lat="54.786995000" lon="-2.344444900">
+ <ele>431.000000</ele>
+ <name>TP1299</name>
+</trkpt>
+<trkpt lat="54.786988300" lon="-2.344446600">
+ <ele>431.000000</ele>
+ <name>TP1300</name>
+</trkpt>
+<trkpt lat="54.786981600" lon="-2.344446600">
+ <ele>431.000000</ele>
+ <name>TP1301</name>
+</trkpt>
+<trkpt lat="54.786971600" lon="-2.344443300">
+ <ele>431.000000</ele>
+ <name>TP1302</name>
+</trkpt>
+<trkpt lat="54.786965000" lon="-2.344439900">
+ <ele>431.000000</ele>
+ <name>TP1303</name>
+</trkpt>
+<trkpt lat="54.786958300" lon="-2.344426600">
+ <ele>431.000000</ele>
+ <name>TP1304</name>
+</trkpt>
+<trkpt lat="54.786956600" lon="-2.344416600">
+ <ele>431.000000</ele>
+ <name>TP1305</name>
+</trkpt>
+<trkpt lat="54.786950000" lon="-2.344408300">
+ <ele>431.000000</ele>
+ <name>TP1306</name>
+</trkpt>
+<trkpt lat="54.786951600" lon="-2.344383300">
+ <ele>431.000000</ele>
+ <name>TP1307</name>
+</trkpt>
+<trkpt lat="54.786950000" lon="-2.344384900">
+ <ele>431.000000</ele>
+ <name>TP1308</name>
+</trkpt>
+<trkpt lat="54.786950000" lon="-2.344386600">
+ <ele>431.000000</ele>
+ <name>TP1309</name>
+</trkpt>
+<trkpt lat="54.786956600" lon="-2.344389900">
+ <ele>431.000000</ele>
+ <name>TP1310</name>
+</trkpt>
+<trkpt lat="54.786959900" lon="-2.344389900">
+ <ele>431.000000</ele>
+ <name>TP1311</name>
+</trkpt>
+<trkpt lat="54.786958300" lon="-2.344391600">
+ <ele>431.000000</ele>
+ <name>TP1312</name>
+</trkpt>
+<trkpt lat="54.786959900" lon="-2.344389900">
+ <ele>431.000000</ele>
+ <name>TP1313</name>
+</trkpt>
+<trkpt lat="54.786956600" lon="-2.344384900">
+ <ele>431.000000</ele>
+ <name>TP1314</name>
+</trkpt>
+<trkpt lat="54.786958300" lon="-2.344391600">
+ <ele>431.000000</ele>
+ <name>TP1315</name>
+</trkpt>
+<trkpt lat="54.786966600" lon="-2.344391600">
+ <ele>431.000000</ele>
+ <name>TP1316</name>
+</trkpt>
+<trkpt lat="54.786956600" lon="-2.344404900">
+ <ele>431.000000</ele>
+ <name>TP1317</name>
+</trkpt>
+<trkpt lat="54.786946600" lon="-2.344404900">
+ <ele>431.000000</ele>
+ <name>TP1318</name>
+</trkpt>
+<trkpt lat="54.786933300" lon="-2.344409900">
+ <ele>431.000000</ele>
+ <name>TP1319</name>
+</trkpt>
+<trkpt lat="54.786935000" lon="-2.344401600">
+ <ele>431.000000</ele>
+ <name>TP1320</name>
+</trkpt>
+<trkpt lat="54.786935000" lon="-2.344391600">
+ <ele>431.000000</ele>
+ <name>TP1321</name>
+</trkpt>
+<trkpt lat="54.786926600" lon="-2.344388300">
+ <ele>431.000000</ele>
+ <name>TP1322</name>
+</trkpt>
+<trkpt lat="54.786923300" lon="-2.344376600">
+ <ele>431.000000</ele>
+ <name>TP1323</name>
+</trkpt>
+<trkpt lat="54.786931600" lon="-2.344366600">
+ <ele>431.000000</ele>
+ <name>TP1324</name>
+</trkpt>
+<trkpt lat="54.786935000" lon="-2.344359900">
+ <ele>431.000000</ele>
+ <name>TP1325</name>
+</trkpt>
+<trkpt lat="54.786935000" lon="-2.344353300">
+ <ele>431.000000</ele>
+ <name>TP1326</name>
+</trkpt>
+<trkpt lat="54.786933300" lon="-2.344349900">
+ <ele>431.000000</ele>
+ <name>TP1327</name>
+</trkpt>
+<trkpt lat="54.786933300" lon="-2.344336600">
+ <ele>431.000000</ele>
+ <name>TP1328</name>
+</trkpt>
+<trkpt lat="54.786926600" lon="-2.344326600">
+ <ele>431.000000</ele>
+ <name>TP1329</name>
+</trkpt>
+<trkpt lat="54.786921600" lon="-2.344288300">
+ <ele>431.000000</ele>
+ <name>TP1330</name>
+</trkpt>
+<trkpt lat="54.786916600" lon="-2.344286600">
+ <ele>431.000000</ele>
+ <name>TP1331</name>
+</trkpt>
+<trkpt lat="54.786911600" lon="-2.344291600">
+ <ele>431.000000</ele>
+ <name>TP1332</name>
+</trkpt>
+<trkpt lat="54.786916600" lon="-2.344289900">
+ <ele>431.000000</ele>
+ <name>TP1333</name>
+</trkpt>
+<trkpt lat="54.786914900" lon="-2.344295000">
+ <ele>431.000000</ele>
+ <name>TP1334</name>
+</trkpt>
+<trkpt lat="54.786919900" lon="-2.344281600">
+ <ele>431.000000</ele>
+ <name>TP1335</name>
+</trkpt>
+<trkpt lat="54.786933300" lon="-2.344281600">
+ <ele>431.000000</ele>
+ <name>TP1336</name>
+</trkpt>
+<trkpt lat="54.786935000" lon="-2.344313300">
+ <ele>431.000000</ele>
+ <name>TP1337</name>
+</trkpt>
+<trkpt lat="54.786929900" lon="-2.344323300">
+ <ele>431.000000</ele>
+ <name>TP1338</name>
+</trkpt>
+<trkpt lat="54.786928300" lon="-2.344328300">
+ <ele>431.000000</ele>
+ <name>TP1339</name>
+</trkpt>
+<trkpt lat="54.786925000" lon="-2.344326600">
+ <ele>432.000000</ele>
+ <name>TP1340</name>
+</trkpt>
+<trkpt lat="54.786921600" lon="-2.344314900">
+ <ele>432.000000</ele>
+ <name>TP1341</name>
+</trkpt>
+<trkpt lat="54.786918300" lon="-2.344326600">
+ <ele>432.000000</ele>
+ <name>TP1342</name>
+</trkpt>
+<trkpt lat="54.786914900" lon="-2.344328300">
+ <ele>432.000000</ele>
+ <name>TP1343</name>
+</trkpt>
+<trkpt lat="54.786916600" lon="-2.344318300">
+ <ele>432.000000</ele>
+ <name>TP1344</name>
+</trkpt>
+<trkpt lat="54.786919900" lon="-2.344314900">
+ <ele>432.000000</ele>
+ <name>TP1345</name>
+</trkpt>
+<trkpt lat="54.786923300" lon="-2.344310000">
+ <ele>432.000000</ele>
+ <name>TP1346</name>
+</trkpt>
+<trkpt lat="54.786919900" lon="-2.344304900">
+ <ele>432.000000</ele>
+ <name>TP1347</name>
+</trkpt>
+<trkpt lat="54.786921600" lon="-2.344299900">
+ <ele>432.000000</ele>
+ <name>TP1348</name>
+</trkpt>
+<trkpt lat="54.786928300" lon="-2.344289900">
+ <ele>432.000000</ele>
+ <name>TP1349</name>
+</trkpt>
+<trkpt lat="54.786926600" lon="-2.344286600">
+ <ele>432.000000</ele>
+ <name>TP1350</name>
+</trkpt>
+<trkpt lat="54.786925000" lon="-2.344291600">
+ <ele>432.000000</ele>
+ <name>TP1351</name>
+</trkpt>
+<trkpt lat="54.786923300" lon="-2.344295000">
+ <ele>432.000000</ele>
+ <name>TP1352</name>
+</trkpt>
+<trkpt lat="54.786931600" lon="-2.344276600">
+ <ele>432.000000</ele>
+ <name>TP1353</name>
+</trkpt>
+<trkpt lat="54.786926600" lon="-2.344271600">
+ <ele>432.000000</ele>
+ <name>TP1354</name>
+</trkpt>
+<trkpt lat="54.786946600" lon="-2.344291600">
+ <ele>432.000000</ele>
+ <name>TP1355</name>
+</trkpt>
+<trkpt lat="54.786944900" lon="-2.344295000">
+ <ele>432.000000</ele>
+ <name>TP1356</name>
+</trkpt>
+<trkpt lat="54.786941600" lon="-2.344291600">
+ <ele>432.000000</ele>
+ <name>TP1357</name>
+</trkpt>
+<trkpt lat="54.786938300" lon="-2.344288300">
+ <ele>432.000000</ele>
+ <name>TP1358</name>
+</trkpt>
+<trkpt lat="54.786935000" lon="-2.344286600">
+ <ele>432.000000</ele>
+ <name>TP1359</name>
+</trkpt>
+<trkpt lat="54.786929900" lon="-2.344286600">
+ <ele>432.000000</ele>
+ <name>TP1360</name>
+</trkpt>
+<trkpt lat="54.786933300" lon="-2.344281600">
+ <ele>432.000000</ele>
+ <name>TP1361</name>
+</trkpt>
+<trkpt lat="54.786935000" lon="-2.344283300">
+ <ele>432.000000</ele>
+ <name>TP1362</name>
+</trkpt>
+<trkpt lat="54.786935000" lon="-2.344278300">
+ <ele>432.000000</ele>
+ <name>TP1363</name>
+</trkpt>
+<trkpt lat="54.786928300" lon="-2.344283300">
+ <ele>432.000000</ele>
+ <name>TP1364</name>
+</trkpt>
+<trkpt lat="54.786923300" lon="-2.344276600">
+ <ele>432.000000</ele>
+ <name>TP1365</name>
+</trkpt>
+<trkpt lat="54.786913300" lon="-2.344275000">
+ <ele>432.000000</ele>
+ <name>TP1366</name>
+</trkpt>
+<trkpt lat="54.786904900" lon="-2.344271600">
+ <ele>432.000000</ele>
+ <name>TP1367</name>
+</trkpt>
+<trkpt lat="54.786899900" lon="-2.344266600">
+ <ele>432.000000</ele>
+ <name>TP1368</name>
+</trkpt>
+<trkpt lat="54.786883300" lon="-2.344279900">
+ <ele>432.000000</ele>
+ <name>TP1369</name>
+</trkpt>
+<trkpt lat="54.786881600" lon="-2.344281600">
+ <ele>432.000000</ele>
+ <name>TP1370</name>
+</trkpt>
+<trkpt lat="54.786876600" lon="-2.344284900">
+ <ele>432.000000</ele>
+ <name>TP1371</name>
+</trkpt>
+<trkpt lat="54.786873300" lon="-2.344279900">
+ <ele>432.000000</ele>
+ <name>TP1372</name>
+</trkpt>
+<trkpt lat="54.786868300" lon="-2.344275000">
+ <ele>432.000000</ele>
+ <name>TP1373</name>
+</trkpt>
+<trkpt lat="54.786863300" lon="-2.344273300">
+ <ele>432.000000</ele>
+ <name>TP1374</name>
+</trkpt>
+<trkpt lat="54.786848300" lon="-2.344269900">
+ <ele>432.000000</ele>
+ <name>TP1375</name>
+</trkpt>
+<trkpt lat="54.786838300" lon="-2.344278300">
+ <ele>432.000000</ele>
+ <name>TP1376</name>
+</trkpt>
+<trkpt lat="54.786829900" lon="-2.344291600">
+ <ele>432.000000</ele>
+ <name>TP1377</name>
+</trkpt>
+<trkpt lat="54.786838300" lon="-2.344308300">
+ <ele>432.000000</ele>
+ <name>TP1378</name>
+</trkpt>
+<trkpt lat="54.786844900" lon="-2.344313300">
+ <ele>432.000000</ele>
+ <name>TP1379</name>
+</trkpt>
+<trkpt lat="54.786850000" lon="-2.344316600">
+ <ele>432.000000</ele>
+ <name>TP1380</name>
+</trkpt>
+<trkpt lat="54.786861600" lon="-2.344326600">
+ <ele>432.000000</ele>
+ <name>TP1381</name>
+</trkpt>
+<trkpt lat="54.786871600" lon="-2.344334900">
+ <ele>432.000000</ele>
+ <name>TP1382</name>
+</trkpt>
+<trkpt lat="54.786856600" lon="-2.344328300">
+ <ele>432.000000</ele>
+ <name>TP1383</name>
+</trkpt>
+<trkpt lat="54.786848300" lon="-2.344326600">
+ <ele>432.000000</ele>
+ <name>TP1384</name>
+</trkpt>
+<trkpt lat="54.786884900" lon="-2.344339900">
+ <ele>432.000000</ele>
+ <name>TP1385</name>
+</trkpt>
+<trkpt lat="54.786889900" lon="-2.344343300">
+ <ele>432.000000</ele>
+ <name>TP1386</name>
+</trkpt>
+<trkpt lat="54.786895000" lon="-2.344345000">
+ <ele>432.000000</ele>
+ <name>TP1387</name>
+</trkpt>
+<trkpt lat="54.786898300" lon="-2.344346600">
+ <ele>432.000000</ele>
+ <name>TP1388</name>
+</trkpt>
+<trkpt lat="54.786913300" lon="-2.344354900">
+ <ele>432.000000</ele>
+ <name>TP1389</name>
+</trkpt>
+<trkpt lat="54.786918300" lon="-2.344356600">
+ <ele>432.000000</ele>
+ <name>TP1390</name>
+</trkpt>
+<trkpt lat="54.786931600" lon="-2.344361600">
+ <ele>432.000000</ele>
+ <name>TP1391</name>
+</trkpt>
+<trkpt lat="54.786944900" lon="-2.344361600">
+ <ele>432.000000</ele>
+ <name>TP1392</name>
+</trkpt>
+<trkpt lat="54.786959900" lon="-2.344366600">
+ <ele>432.000000</ele>
+ <name>TP1393</name>
+</trkpt>
+<trkpt lat="54.786983300" lon="-2.344373300">
+ <ele>432.000000</ele>
+ <name>TP1394</name>
+</trkpt>
+<trkpt lat="54.786995000" lon="-2.344374900">
+ <ele>432.000000</ele>
+ <name>TP1395</name>
+</trkpt>
+<trkpt lat="54.787014900" lon="-2.344380000">
+ <ele>432.000000</ele>
+ <name>TP1396</name>
+</trkpt>
+<trkpt lat="54.787013300" lon="-2.344381600">
+ <ele>432.000000</ele>
+ <name>TP1397</name>
+</trkpt>
+<trkpt lat="54.787028300" lon="-2.344388300">
+ <ele>432.000000</ele>
+ <name>TP1398</name>
+</trkpt>
+<trkpt lat="54.787048300" lon="-2.344401600">
+ <ele>432.000000</ele>
+ <name>TP1399</name>
+</trkpt>
+<trkpt lat="54.787041600" lon="-2.344401600">
+ <ele>432.000000</ele>
+ <name>TP1400</name>
+</trkpt>
+<trkpt lat="54.787036600" lon="-2.344398300">
+ <ele>432.000000</ele>
+ <name>TP1401</name>
+</trkpt>
+<trkpt lat="54.787024900" lon="-2.344394900">
+ <ele>432.000000</ele>
+ <name>TP1402</name>
+</trkpt>
+<trkpt lat="54.787014900" lon="-2.344391600">
+ <ele>432.000000</ele>
+ <name>TP1403</name>
+</trkpt>
+<trkpt lat="54.787014900" lon="-2.344389900">
+ <ele>432.000000</ele>
+ <name>TP1404</name>
+</trkpt>
+<trkpt lat="54.787008300" lon="-2.344380000">
+ <ele>432.000000</ele>
+ <name>TP1405</name>
+</trkpt>
+<trkpt lat="54.787006600" lon="-2.344378300">
+ <ele>432.000000</ele>
+ <name>TP1406</name>
+</trkpt>
+<trkpt lat="54.786998300" lon="-2.344373300">
+ <ele>432.000000</ele>
+ <name>TP1407</name>
+</trkpt>
+<trkpt lat="54.786984900" lon="-2.344366600">
+ <ele>432.000000</ele>
+ <name>TP1408</name>
+</trkpt>
+<trkpt lat="54.787003300" lon="-2.344373300">
+ <ele>432.000000</ele>
+ <name>TP1409</name>
+</trkpt>
+<trkpt lat="54.786988300" lon="-2.344368300">
+ <ele>432.000000</ele>
+ <name>TP1410</name>
+</trkpt>
+<trkpt lat="54.786948300" lon="-2.344351600">
+ <ele>432.000000</ele>
+ <name>TP1411</name>
+</trkpt>
+<trkpt lat="54.786926600" lon="-2.344343300">
+ <ele>432.000000</ele>
+ <name>TP1412</name>
+</trkpt>
+<trkpt lat="54.786898300" lon="-2.344326600">
+ <ele>432.000000</ele>
+ <name>TP1413</name>
+</trkpt>
+<trkpt lat="54.786893200" lon="-2.344331600">
+ <ele>432.000000</ele>
+ <name>TP1414</name>
+</trkpt>
+<trkpt lat="54.786896600" lon="-2.344331600">
+ <ele>432.000000</ele>
+ <name>TP1415</name>
+</trkpt>
+<trkpt lat="54.786898300" lon="-2.344334900">
+ <ele>432.000000</ele>
+ <name>TP1416</name>
+</trkpt>
+<trkpt lat="54.786903300" lon="-2.344338300">
+ <ele>432.000000</ele>
+ <name>TP1417</name>
+</trkpt>
+<trkpt lat="54.786906600" lon="-2.344345000">
+ <ele>432.000000</ele>
+ <name>TP1418</name>
+</trkpt>
+<trkpt lat="54.786913300" lon="-2.344351600">
+ <ele>432.000000</ele>
+ <name>TP1419</name>
+</trkpt>
+<trkpt lat="54.786923300" lon="-2.344358300">
+ <ele>432.000000</ele>
+ <name>TP1420</name>
+</trkpt>
+<trkpt lat="54.786931600" lon="-2.344371600">
+ <ele>432.000000</ele>
+ <name>TP1421</name>
+</trkpt>
+<trkpt lat="54.786931600" lon="-2.344374900">
+ <ele>432.000000</ele>
+ <name>TP1422</name>
+</trkpt>
+<trkpt lat="54.786938300" lon="-2.344376600">
+ <ele>432.000000</ele>
+ <name>TP1423</name>
+</trkpt>
+<trkpt lat="54.786935000" lon="-2.344374900">
+ <ele>432.000000</ele>
+ <name>TP1424</name>
+</trkpt>
+<trkpt lat="54.786931600" lon="-2.344380000">
+ <ele>432.000000</ele>
+ <name>TP1425</name>
+</trkpt>
+<trkpt lat="54.786921600" lon="-2.344368300">
+ <ele>432.000000</ele>
+ <name>TP1426</name>
+</trkpt>
+<trkpt lat="54.786919900" lon="-2.344365000">
+ <ele>432.000000</ele>
+ <name>TP1427</name>
+</trkpt>
+<trkpt lat="54.786918300" lon="-2.344356600">
+ <ele>432.000000</ele>
+ <name>TP1428</name>
+</trkpt>
+<trkpt lat="54.786913300" lon="-2.344353300">
+ <ele>432.000000</ele>
+ <name>TP1429</name>
+</trkpt>
+<trkpt lat="54.786914900" lon="-2.344348300">
+ <ele>432.000000</ele>
+ <name>TP1430</name>
+</trkpt>
+<trkpt lat="54.786906600" lon="-2.344336600">
+ <ele>432.000000</ele>
+ <name>TP1431</name>
+</trkpt>
+<trkpt lat="54.786913300" lon="-2.344334900">
+ <ele>433.000000</ele>
+ <name>TP1432</name>
+</trkpt>
+<trkpt lat="54.786923300" lon="-2.344324900">
+ <ele>434.000000</ele>
+ <name>TP1433</name>
+</trkpt>
+<trkpt lat="54.786938300" lon="-2.344333300">
+ <ele>434.000000</ele>
+ <name>TP1434</name>
+</trkpt>
+<trkpt lat="54.786946600" lon="-2.344333300">
+ <ele>434.000000</ele>
+ <name>TP1435</name>
+</trkpt>
+<trkpt lat="54.786941600" lon="-2.344333300">
+ <ele>434.000000</ele>
+ <name>TP1436</name>
+</trkpt>
+<trkpt lat="54.786939900" lon="-2.344330000">
+ <ele>434.000000</ele>
+ <name>TP1437</name>
+</trkpt>
+<trkpt lat="54.786938300" lon="-2.344323300">
+ <ele>434.000000</ele>
+ <name>TP1438</name>
+</trkpt>
+<trkpt lat="54.786944900" lon="-2.344318300">
+ <ele>434.000000</ele>
+ <name>TP1439</name>
+</trkpt>
+<trkpt lat="54.786938300" lon="-2.344318300">
+ <ele>434.000000</ele>
+ <name>TP1440</name>
+</trkpt>
+<trkpt lat="54.786951600" lon="-2.344308300">
+ <ele>435.000000</ele>
+ <name>TP1441</name>
+</trkpt>
+<trkpt lat="54.786956600" lon="-2.344301600">
+ <ele>435.000000</ele>
+ <name>TP1442</name>
+</trkpt>
+<trkpt lat="54.786965000" lon="-2.344289900">
+ <ele>435.000000</ele>
+ <name>TP1443</name>
+</trkpt>
+<trkpt lat="54.786986600" lon="-2.344293300">
+ <ele>435.000000</ele>
+ <name>TP1444</name>
+</trkpt>
+<trkpt lat="54.786998300" lon="-2.344288300">
+ <ele>435.000000</ele>
+ <name>TP1445</name>
+</trkpt>
+<trkpt lat="54.787001600" lon="-2.344295000">
+ <ele>435.000000</ele>
+ <name>TP1446</name>
+</trkpt>
+<trkpt lat="54.787020000" lon="-2.344304900">
+ <ele>435.000000</ele>
+ <name>TP1447</name>
+</trkpt>
+<trkpt lat="54.787029900" lon="-2.344308300">
+ <ele>435.000000</ele>
+ <name>TP1448</name>
+</trkpt>
+<trkpt lat="54.787041600" lon="-2.344298300">
+ <ele>435.000000</ele>
+ <name>TP1449</name>
+</trkpt>
+<trkpt lat="54.787046600" lon="-2.344283300">
+ <ele>435.000000</ele>
+ <name>TP1450</name>
+</trkpt>
+<trkpt lat="54.787044900" lon="-2.344283300">
+ <ele>435.000000</ele>
+ <name>TP1451</name>
+</trkpt>
+<trkpt lat="54.787046600" lon="-2.344283300">
+ <ele>435.000000</ele>
+ <name>TP1452</name>
+</trkpt>
+<trkpt lat="54.787048300" lon="-2.344286600">
+ <ele>435.000000</ele>
+ <name>TP1453</name>
+</trkpt>
+<trkpt lat="54.787056600" lon="-2.344281600">
+ <ele>435.000000</ele>
+ <name>TP1454</name>
+</trkpt>
+<trkpt lat="54.787061600" lon="-2.344276600">
+ <ele>435.000000</ele>
+ <name>TP1455</name>
+</trkpt>
+<trkpt lat="54.787059900" lon="-2.344271600">
+ <ele>435.000000</ele>
+ <name>TP1456</name>
+</trkpt>
+<trkpt lat="54.787063300" lon="-2.344266600">
+ <ele>435.000000</ele>
+ <name>TP1457</name>
+</trkpt>
+<trkpt lat="54.787059900" lon="-2.344256600">
+ <ele>435.000000</ele>
+ <name>TP1458</name>
+</trkpt>
+<trkpt lat="54.787053300" lon="-2.344258300">
+ <ele>435.000000</ele>
+ <name>TP1459</name>
+</trkpt>
+<trkpt lat="54.787041600" lon="-2.344281600">
+ <ele>435.000000</ele>
+ <name>TP1460</name>
+</trkpt>
+<trkpt lat="54.787038300" lon="-2.344284900">
+ <ele>435.000000</ele>
+ <name>TP1461</name>
+</trkpt>
+<trkpt lat="54.787041600" lon="-2.344303300">
+ <ele>435.000000</ele>
+ <name>TP1462</name>
+</trkpt>
+<trkpt lat="54.787038300" lon="-2.344298300">
+ <ele>435.000000</ele>
+ <name>TP1463</name>
+</trkpt>
+<trkpt lat="54.787028300" lon="-2.344299900">
+ <ele>435.000000</ele>
+ <name>TP1464</name>
+</trkpt>
+<trkpt lat="54.787016600" lon="-2.344301600">
+ <ele>435.000000</ele>
+ <name>TP1465</name>
+</trkpt>
+<trkpt lat="54.787009900" lon="-2.344299900">
+ <ele>435.000000</ele>
+ <name>TP1466</name>
+</trkpt>
+<trkpt lat="54.787014900" lon="-2.344298300">
+ <ele>435.000000</ele>
+ <name>TP1467</name>
+</trkpt>
+<trkpt lat="54.786974900" lon="-2.344261600">
+ <ele>435.000000</ele>
+ <name>TP1468</name>
+</trkpt>
+<trkpt lat="54.786986600" lon="-2.344263300">
+ <ele>435.000000</ele>
+ <name>TP1469</name>
+</trkpt>
+<trkpt lat="54.786993300" lon="-2.344261600">
+ <ele>435.000000</ele>
+ <name>TP1470</name>
+</trkpt>
+<trkpt lat="54.786996600" lon="-2.344258300">
+ <ele>435.000000</ele>
+ <name>TP1471</name>
+</trkpt>
+<trkpt lat="54.786998300" lon="-2.344263300">
+ <ele>435.000000</ele>
+ <name>TP1472</name>
+</trkpt>
+<trkpt lat="54.786999900" lon="-2.344263300">
+ <ele>435.000000</ele>
+ <name>TP1473</name>
+</trkpt>
+<trkpt lat="54.786995000" lon="-2.344261600">
+ <ele>435.000000</ele>
+ <name>TP1474</name>
+</trkpt>
+<trkpt lat="54.786995000" lon="-2.344256600">
+ <ele>435.000000</ele>
+ <name>TP1475</name>
+</trkpt>
+<trkpt lat="54.786980000" lon="-2.344264900">
+ <ele>435.000000</ele>
+ <name>TP1476</name>
+</trkpt>
+<trkpt lat="54.786983300" lon="-2.344258300">
+ <ele>435.000000</ele>
+ <name>TP1477</name>
+</trkpt>
+<trkpt lat="54.786989900" lon="-2.344254900">
+ <ele>435.000000</ele>
+ <name>TP1478</name>
+</trkpt>
+<trkpt lat="54.786986600" lon="-2.344256600">
+ <ele>435.000000</ele>
+ <name>TP1479</name>
+</trkpt>
+<trkpt lat="54.786984900" lon="-2.344256600">
+ <ele>435.000000</ele>
+ <name>TP1480</name>
+</trkpt>
+<trkpt lat="54.786981600" lon="-2.344260000">
+ <ele>436.000000</ele>
+ <name>TP1481</name>
+</trkpt>
+<trkpt lat="54.786980000" lon="-2.344261600">
+ <ele>436.000000</ele>
+ <name>TP1482</name>
+</trkpt>
+<trkpt lat="54.786991600" lon="-2.344251600">
+ <ele>436.000000</ele>
+ <name>TP1483</name>
+</trkpt>
+<trkpt lat="54.787001600" lon="-2.344238300">
+ <ele>436.000000</ele>
+ <name>TP1484</name>
+</trkpt>
+<trkpt lat="54.787003300" lon="-2.344236600">
+ <ele>435.000000</ele>
+ <name>TP1485</name>
+</trkpt>
+<trkpt lat="54.786999900" lon="-2.344238300">
+ <ele>435.000000</ele>
+ <name>TP1486</name>
+</trkpt>
+<trkpt lat="54.786996600" lon="-2.344241600">
+ <ele>435.000000</ele>
+ <name>TP1487</name>
+</trkpt>
+<trkpt lat="54.786993300" lon="-2.344244900">
+ <ele>435.000000</ele>
+ <name>TP1488</name>
+</trkpt>
+<trkpt lat="54.786988300" lon="-2.344246600">
+ <ele>435.000000</ele>
+ <name>TP1489</name>
+</trkpt>
+<trkpt lat="54.786986600" lon="-2.344249900">
+ <ele>435.000000</ele>
+ <name>TP1490</name>
+</trkpt>
+<trkpt lat="54.786995000" lon="-2.344266600">
+ <ele>435.000000</ele>
+ <name>TP1491</name>
+</trkpt>
+<trkpt lat="54.786999900" lon="-2.344254900">
+ <ele>435.000000</ele>
+ <name>TP1492</name>
+</trkpt>
+<trkpt lat="54.787001600" lon="-2.344246600">
+ <ele>435.000000</ele>
+ <name>TP1493</name>
+</trkpt>
+<trkpt lat="54.787006600" lon="-2.344240000">
+ <ele>435.000000</ele>
+ <name>TP1494</name>
+</trkpt>
+<trkpt lat="54.786989900" lon="-2.344236600">
+ <ele>435.000000</ele>
+ <name>TP1495</name>
+</trkpt>
+<trkpt lat="54.786998300" lon="-2.344246600">
+ <ele>436.000000</ele>
+ <name>TP1496</name>
+</trkpt>
+<trkpt lat="54.787006600" lon="-2.344206600">
+ <ele>436.000000</ele>
+ <name>TP1497</name>
+</trkpt>
+<trkpt lat="54.787011600" lon="-2.344194900">
+ <ele>436.000000</ele>
+ <name>TP1498</name>
+</trkpt>
+<trkpt lat="54.787011600" lon="-2.344179900">
+ <ele>436.000000</ele>
+ <name>TP1499</name>
+</trkpt>
+<trkpt lat="54.787013300" lon="-2.344151600">
+ <ele>436.000000</ele>
+ <name>TP1500</name>
+</trkpt>
+<trkpt lat="54.787013300" lon="-2.344129900">
+ <ele>436.000000</ele>
+ <name>TP1501</name>
+</trkpt>
+<trkpt lat="54.787003300" lon="-2.344108300">
+ <ele>436.000000</ele>
+ <name>TP1502</name>
+</trkpt>
+<trkpt lat="54.787001600" lon="-2.344108300">
+ <ele>436.000000</ele>
+ <name>TP1503</name>
+</trkpt>
+<trkpt lat="54.787009900" lon="-2.344101600">
+ <ele>436.000000</ele>
+ <name>TP1504</name>
+</trkpt>
+<trkpt lat="54.787006600" lon="-2.344096600">
+ <ele>436.000000</ele>
+ <name>TP1505</name>
+</trkpt>
+<trkpt lat="54.786998300" lon="-2.344108300">
+ <ele>436.000000</ele>
+ <name>TP1506</name>
+</trkpt>
+<trkpt lat="54.786993300" lon="-2.344126600">
+ <ele>436.000000</ele>
+ <name>TP1507</name>
+</trkpt>
+<trkpt lat="54.786978300" lon="-2.344164900">
+ <ele>436.000000</ele>
+ <name>TP1508</name>
+</trkpt>
+<trkpt lat="54.786969900" lon="-2.344183300">
+ <ele>436.000000</ele>
+ <name>TP1509</name>
+</trkpt>
+<trkpt lat="54.786968300" lon="-2.344190000">
+ <ele>436.000000</ele>
+ <name>TP1510</name>
+</trkpt>
+<trkpt lat="54.786961600" lon="-2.344193300">
+ <ele>436.000000</ele>
+ <name>TP1511</name>
+</trkpt>
+<trkpt lat="54.786958300" lon="-2.344201600">
+ <ele>436.000000</ele>
+ <name>TP1512</name>
+</trkpt>
+<trkpt lat="54.786956600" lon="-2.344206600">
+ <ele>436.000000</ele>
+ <name>TP1513</name>
+</trkpt>
+<trkpt lat="54.786965000" lon="-2.344161600">
+ <ele>436.000000</ele>
+ <name>TP1514</name>
+</trkpt>
+<trkpt lat="54.786969900" lon="-2.344164900">
+ <ele>436.000000</ele>
+ <name>TP1515</name>
+</trkpt>
+<trkpt lat="54.786971600" lon="-2.344178300">
+ <ele>436.000000</ele>
+ <name>TP1516</name>
+</trkpt>
+<trkpt lat="54.786966600" lon="-2.344198300">
+ <ele>436.000000</ele>
+ <name>TP1517</name>
+</trkpt>
+<trkpt lat="54.786966600" lon="-2.344213300">
+ <ele>436.000000</ele>
+ <name>TP1518</name>
+</trkpt>
+<trkpt lat="54.786965000" lon="-2.344221600">
+ <ele>436.000000</ele>
+ <name>TP1519</name>
+</trkpt>
+<trkpt lat="54.786966600" lon="-2.344228300">
+ <ele>436.000000</ele>
+ <name>TP1520</name>
+</trkpt>
+<trkpt lat="54.786965000" lon="-2.344243300">
+ <ele>436.000000</ele>
+ <name>TP1521</name>
+</trkpt>
+<trkpt lat="54.786966600" lon="-2.344251600">
+ <ele>436.000000</ele>
+ <name>TP1522</name>
+</trkpt>
+<trkpt lat="54.786969900" lon="-2.344253300">
+ <ele>436.000000</ele>
+ <name>TP1523</name>
+</trkpt>
+<trkpt lat="54.786969900" lon="-2.344263300">
+ <ele>436.000000</ele>
+ <name>TP1524</name>
+</trkpt>
+<trkpt lat="54.786965000" lon="-2.344269900">
+ <ele>436.000000</ele>
+ <name>TP1525</name>
+</trkpt>
+<trkpt lat="54.786959900" lon="-2.344268300">
+ <ele>436.000000</ele>
+ <name>TP1526</name>
+</trkpt>
+<trkpt lat="54.786956600" lon="-2.344271600">
+ <ele>436.000000</ele>
+ <name>TP1527</name>
+</trkpt>
+<trkpt lat="54.786951600" lon="-2.344275000">
+ <ele>436.000000</ele>
+ <name>TP1528</name>
+</trkpt>
+<trkpt lat="54.786953300" lon="-2.344279900">
+ <ele>436.000000</ele>
+ <name>TP1529</name>
+</trkpt>
+<trkpt lat="54.786953300" lon="-2.344269900">
+ <ele>436.000000</ele>
+ <name>TP1530</name>
+</trkpt>
+<trkpt lat="54.786956600" lon="-2.344263300">
+ <ele>436.000000</ele>
+ <name>TP1531</name>
+</trkpt>
+<trkpt lat="54.786959900" lon="-2.344261600">
+ <ele>436.000000</ele>
+ <name>TP1532</name>
+</trkpt>
+<trkpt lat="54.786941600" lon="-2.344261600">
+ <ele>436.000000</ele>
+ <name>TP1533</name>
+</trkpt>
+<trkpt lat="54.786935000" lon="-2.344266600">
+ <ele>436.000000</ele>
+ <name>TP1534</name>
+</trkpt>
+<trkpt lat="54.786946600" lon="-2.344269900">
+ <ele>436.000000</ele>
+ <name>TP1535</name>
+</trkpt>
+<trkpt lat="54.786948300" lon="-2.344275000">
+ <ele>436.000000</ele>
+ <name>TP1536</name>
+</trkpt>
+<trkpt lat="54.786948300" lon="-2.344253300">
+ <ele>436.000000</ele>
+ <name>TP1537</name>
+</trkpt>
+<trkpt lat="54.786953300" lon="-2.344249900">
+ <ele>436.000000</ele>
+ <name>TP1538</name>
+</trkpt>
+<trkpt lat="54.786951600" lon="-2.344241600">
+ <ele>436.000000</ele>
+ <name>TP1539</name>
+</trkpt>
+<trkpt lat="54.786938300" lon="-2.344243300">
+ <ele>436.000000</ele>
+ <name>TP1540</name>
+</trkpt>
+<trkpt lat="54.786943300" lon="-2.344246600">
+ <ele>436.000000</ele>
+ <name>TP1541</name>
+</trkpt>
+<trkpt lat="54.786948300" lon="-2.344249900">
+ <ele>436.000000</ele>
+ <name>TP1542</name>
+</trkpt>
+<trkpt lat="54.786950000" lon="-2.344253300">
+ <ele>436.000000</ele>
+ <name>TP1543</name>
+</trkpt>
+<trkpt lat="54.786956600" lon="-2.344240000">
+ <ele>436.000000</ele>
+ <name>TP1544</name>
+</trkpt>
+<trkpt lat="54.786958300" lon="-2.344229900">
+ <ele>436.000000</ele>
+ <name>TP1545</name>
+</trkpt>
+<trkpt lat="54.786966600" lon="-2.344233300">
+ <ele>436.000000</ele>
+ <name>TP1546</name>
+</trkpt>
+<trkpt lat="54.786969900" lon="-2.344218300">
+ <ele>436.000000</ele>
+ <name>TP1547</name>
+</trkpt>
+<trkpt lat="54.786968300" lon="-2.344208300">
+ <ele>436.000000</ele>
+ <name>TP1548</name>
+</trkpt>
+<trkpt lat="54.786963200" lon="-2.344198300">
+ <ele>436.000000</ele>
+ <name>TP1549</name>
+</trkpt>
+<trkpt lat="54.786956600" lon="-2.344199900">
+ <ele>436.000000</ele>
+ <name>TP1550</name>
+</trkpt>
+<trkpt lat="54.786961600" lon="-2.344199900">
+ <ele>436.000000</ele>
+ <name>TP1551</name>
+</trkpt>
+<trkpt lat="54.786965000" lon="-2.344196600">
+ <ele>436.000000</ele>
+ <name>TP1552</name>
+</trkpt>
+<trkpt lat="54.786966600" lon="-2.344198300">
+ <ele>436.000000</ele>
+ <name>TP1553</name>
+</trkpt>
+<trkpt lat="54.786971600" lon="-2.344181600">
+ <ele>436.000000</ele>
+ <name>TP1554</name>
+</trkpt>
+<trkpt lat="54.786976600" lon="-2.344184900">
+ <ele>436.000000</ele>
+ <name>TP1555</name>
+</trkpt>
+<trkpt lat="54.786980000" lon="-2.344184900">
+ <ele>436.000000</ele>
+ <name>TP1556</name>
+</trkpt>
+<trkpt lat="54.786984900" lon="-2.344190000">
+ <ele>436.000000</ele>
+ <name>TP1557</name>
+</trkpt>
+<trkpt lat="54.786988300" lon="-2.344191600">
+ <ele>436.000000</ele>
+ <name>TP1558</name>
+</trkpt>
+<trkpt lat="54.786981600" lon="-2.344209900">
+ <ele>436.000000</ele>
+ <name>TP1559</name>
+</trkpt>
+<trkpt lat="54.786976600" lon="-2.344214900">
+ <ele>436.000000</ele>
+ <name>TP1560</name>
+</trkpt>
+<trkpt lat="54.786961600" lon="-2.344216600">
+ <ele>436.000000</ele>
+ <name>TP1561</name>
+</trkpt>
+<trkpt lat="54.786965000" lon="-2.344214900">
+ <ele>436.000000</ele>
+ <name>TP1562</name>
+</trkpt>
+<trkpt lat="54.786965000" lon="-2.344226600">
+ <ele>437.000000</ele>
+ <name>TP1563</name>
+</trkpt>
+<trkpt lat="54.786969900" lon="-2.344226600">
+ <ele>437.000000</ele>
+ <name>TP1564</name>
+</trkpt>
+<trkpt lat="54.786971600" lon="-2.344229900">
+ <ele>437.000000</ele>
+ <name>TP1565</name>
+</trkpt>
+<trkpt lat="54.786976600" lon="-2.344238300">
+ <ele>437.000000</ele>
+ <name>TP1566</name>
+</trkpt>
+<trkpt lat="54.786981600" lon="-2.344231600">
+ <ele>437.000000</ele>
+ <name>TP1567</name>
+</trkpt>
+<trkpt lat="54.786978300" lon="-2.344238300">
+ <ele>437.000000</ele>
+ <name>TP1568</name>
+</trkpt>
+<trkpt lat="54.786983300" lon="-2.344234900">
+ <ele>437.000000</ele>
+ <name>TP1569</name>
+</trkpt>
+<trkpt lat="54.786976600" lon="-2.344256600">
+ <ele>437.000000</ele>
+ <name>TP1570</name>
+</trkpt>
+<trkpt lat="54.786973300" lon="-2.344263300">
+ <ele>437.000000</ele>
+ <name>TP1571</name>
+</trkpt>
+<trkpt lat="54.786959900" lon="-2.344275000">
+ <ele>437.000000</ele>
+ <name>TP1572</name>
+</trkpt>
+<trkpt lat="54.786953300" lon="-2.344299900">
+ <ele>437.000000</ele>
+ <name>TP1573</name>
+</trkpt>
+<trkpt lat="54.786950000" lon="-2.344318300">
+ <ele>437.000000</ele>
+ <name>TP1574</name>
+</trkpt>
+<trkpt lat="54.786950000" lon="-2.344334900">
+ <ele>437.000000</ele>
+ <name>TP1575</name>
+</trkpt>
+<trkpt lat="54.786956600" lon="-2.344336600">
+ <ele>437.000000</ele>
+ <name>TP1576</name>
+</trkpt>
+<trkpt lat="54.786963200" lon="-2.344330000">
+ <ele>437.000000</ele>
+ <name>TP1577</name>
+</trkpt>
+<trkpt lat="54.786965000" lon="-2.344334900">
+ <ele>437.000000</ele>
+ <name>TP1578</name>
+</trkpt>
+<trkpt lat="54.786969900" lon="-2.344334900">
+ <ele>437.000000</ele>
+ <name>TP1579</name>
+</trkpt>
+<trkpt lat="54.786959900" lon="-2.344348300">
+ <ele>438.000000</ele>
+ <name>TP1580</name>
+</trkpt>
+<trkpt lat="54.786963200" lon="-2.344343300">
+ <ele>438.000000</ele>
+ <name>TP1581</name>
+</trkpt>
+<trkpt lat="54.786966600" lon="-2.344334900">
+ <ele>438.000000</ele>
+ <name>TP1582</name>
+</trkpt>
+<trkpt lat="54.786963200" lon="-2.344328300">
+ <ele>438.000000</ele>
+ <name>TP1583</name>
+</trkpt>
+<trkpt lat="54.786958300" lon="-2.344323300">
+ <ele>438.000000</ele>
+ <name>TP1584</name>
+</trkpt>
+<trkpt lat="54.786959900" lon="-2.344311600">
+ <ele>438.000000</ele>
+ <name>TP1585</name>
+</trkpt>
+<trkpt lat="54.786959900" lon="-2.344296600">
+ <ele>438.000000</ele>
+ <name>TP1586</name>
+</trkpt>
+<trkpt lat="54.786959900" lon="-2.344291600">
+ <ele>438.000000</ele>
+ <name>TP1587</name>
+</trkpt>
+<trkpt lat="54.786966600" lon="-2.344293300">
+ <ele>438.000000</ele>
+ <name>TP1588</name>
+</trkpt>
+<trkpt lat="54.786969900" lon="-2.344284900">
+ <ele>438.000000</ele>
+ <name>TP1589</name>
+</trkpt>
+<trkpt lat="54.786974900" lon="-2.344279900">
+ <ele>438.000000</ele>
+ <name>TP1590</name>
+</trkpt>
+<trkpt lat="54.786980000" lon="-2.344269900">
+ <ele>438.000000</ele>
+ <name>TP1591</name>
+</trkpt>
+<trkpt lat="54.786986600" lon="-2.344266600">
+ <ele>438.000000</ele>
+ <name>TP1592</name>
+</trkpt>
+<trkpt lat="54.786984900" lon="-2.344269900">
+ <ele>438.000000</ele>
+ <name>TP1593</name>
+</trkpt>
+<trkpt lat="54.786991600" lon="-2.344261600">
+ <ele>438.000000</ele>
+ <name>TP1594</name>
+</trkpt>
+<trkpt lat="54.786991600" lon="-2.344258300">
+ <ele>438.000000</ele>
+ <name>TP1595</name>
+</trkpt>
+<trkpt lat="54.786991600" lon="-2.344248300">
+ <ele>438.000000</ele>
+ <name>TP1596</name>
+</trkpt>
+<trkpt lat="54.786984900" lon="-2.344253300">
+ <ele>438.000000</ele>
+ <name>TP1597</name>
+</trkpt>
+<trkpt lat="54.786976600" lon="-2.344271600">
+ <ele>438.000000</ele>
+ <name>TP1598</name>
+</trkpt>
+<trkpt lat="54.786969900" lon="-2.344284900">
+ <ele>438.000000</ele>
+ <name>TP1599</name>
+</trkpt>
+<trkpt lat="54.786965000" lon="-2.344296600">
+ <ele>438.000000</ele>
+ <name>TP1600</name>
+</trkpt>
+<trkpt lat="54.786963200" lon="-2.344304900">
+ <ele>438.000000</ele>
+ <name>TP1601</name>
+</trkpt>
+<trkpt lat="54.786954900" lon="-2.344324900">
+ <ele>439.000000</ele>
+ <name>TP1602</name>
+</trkpt>
+<trkpt lat="54.786951600" lon="-2.344336600">
+ <ele>439.000000</ele>
+ <name>TP1603</name>
+</trkpt>
+<trkpt lat="54.786948300" lon="-2.344341600">
+ <ele>439.000000</ele>
+ <name>TP1604</name>
+</trkpt>
+<trkpt lat="54.786954900" lon="-2.344348300">
+ <ele>439.000000</ele>
+ <name>TP1605</name>
+</trkpt>
+<trkpt lat="54.786951600" lon="-2.344413300">
+ <ele>439.000000</ele>
+ <name>TP1606</name>
+</trkpt>
+<trkpt lat="54.786946600" lon="-2.344435000">
+ <ele>439.000000</ele>
+ <name>TP1607</name>
+</trkpt>
+<trkpt lat="54.786938300" lon="-2.344441600">
+ <ele>439.000000</ele>
+ <name>TP1608</name>
+</trkpt>
+<trkpt lat="54.786931600" lon="-2.344439900">
+ <ele>439.000000</ele>
+ <name>TP1609</name>
+</trkpt>
+<trkpt lat="54.786923300" lon="-2.344428300">
+ <ele>439.000000</ele>
+ <name>TP1610</name>
+</trkpt>
+<trkpt lat="54.786918300" lon="-2.344429900">
+ <ele>439.000000</ele>
+ <name>TP1611</name>
+</trkpt>
+<trkpt lat="54.786911600" lon="-2.344426600">
+ <ele>439.000000</ele>
+ <name>TP1612</name>
+</trkpt>
+<trkpt lat="54.786914900" lon="-2.344424900">
+ <ele>439.000000</ele>
+ <name>TP1613</name>
+</trkpt>
+<trkpt lat="54.786906600" lon="-2.344438300">
+ <ele>439.000000</ele>
+ <name>TP1614</name>
+</trkpt>
+<trkpt lat="54.786903300" lon="-2.344443300">
+ <ele>439.000000</ele>
+ <name>TP1615</name>
+</trkpt>
+<trkpt lat="54.786898300" lon="-2.344435000">
+ <ele>439.000000</ele>
+ <name>TP1616</name>
+</trkpt>
+<trkpt lat="54.786888300" lon="-2.344444900">
+ <ele>439.000000</ele>
+ <name>TP1617</name>
+</trkpt>
+<trkpt lat="54.786884900" lon="-2.344446600">
+ <ele>439.000000</ele>
+ <name>TP1618</name>
+</trkpt>
+<trkpt lat="54.786880000" lon="-2.344443300">
+ <ele>439.000000</ele>
+ <name>TP1619</name>
+</trkpt>
+<trkpt lat="54.786869900" lon="-2.344441600">
+ <ele>439.000000</ele>
+ <name>TP1620</name>
+</trkpt>
+<trkpt lat="54.786873300" lon="-2.344423300">
+ <ele>439.000000</ele>
+ <name>TP1621</name>
+</trkpt>
+<trkpt lat="54.786873300" lon="-2.344411600">
+ <ele>439.000000</ele>
+ <name>TP1622</name>
+</trkpt>
+<trkpt lat="54.786880000" lon="-2.344394900">
+ <ele>439.000000</ele>
+ <name>TP1623</name>
+</trkpt>
+<trkpt lat="54.786884900" lon="-2.344369900">
+ <ele>439.000000</ele>
+ <name>TP1624</name>
+</trkpt>
+<trkpt lat="54.786884900" lon="-2.344341600">
+ <ele>439.000000</ele>
+ <name>TP1625</name>
+</trkpt>
+<trkpt lat="54.786888300" lon="-2.344333300">
+ <ele>439.000000</ele>
+ <name>TP1626</name>
+</trkpt>
+<trkpt lat="54.786889900" lon="-2.344330000">
+ <ele>439.000000</ele>
+ <name>TP1627</name>
+</trkpt>
+<trkpt lat="54.786895000" lon="-2.344323300">
+ <ele>439.000000</ele>
+ <name>TP1628</name>
+</trkpt>
+<trkpt lat="54.786901600" lon="-2.344319900">
+ <ele>439.000000</ele>
+ <name>TP1629</name>
+</trkpt>
+<trkpt lat="54.786908300" lon="-2.344321600">
+ <ele>439.000000</ele>
+ <name>TP1630</name>
+</trkpt>
+<trkpt lat="54.786928300" lon="-2.344330000">
+ <ele>439.000000</ele>
+ <name>TP1631</name>
+</trkpt>
+<trkpt lat="54.786933300" lon="-2.344324900">
+ <ele>439.000000</ele>
+ <name>TP1632</name>
+</trkpt>
+<trkpt lat="54.786933300" lon="-2.344319900">
+ <ele>439.000000</ele>
+ <name>TP1633</name>
+</trkpt>
+<trkpt lat="54.786935000" lon="-2.344318300">
+ <ele>439.000000</ele>
+ <name>TP1634</name>
+</trkpt>
+<trkpt lat="54.786935000" lon="-2.344314900">
+ <ele>439.000000</ele>
+ <name>TP1635</name>
+</trkpt>
+<trkpt lat="54.786935000" lon="-2.344313300">
+ <ele>439.000000</ele>
+ <name>TP1636</name>
+</trkpt>
+<trkpt lat="54.786931600" lon="-2.344319900">
+ <ele>439.000000</ele>
+ <name>TP1637</name>
+</trkpt>
+<trkpt lat="54.786923300" lon="-2.344326600">
+ <ele>439.000000</ele>
+ <name>TP1638</name>
+</trkpt>
+<trkpt lat="54.786919900" lon="-2.344334900">
+ <ele>439.000000</ele>
+ <name>TP1639</name>
+</trkpt>
+<trkpt lat="54.786928300" lon="-2.344328300">
+ <ele>439.000000</ele>
+ <name>TP1640</name>
+</trkpt>
+<trkpt lat="54.786923300" lon="-2.344324900">
+ <ele>439.000000</ele>
+ <name>TP1641</name>
+</trkpt>
+<trkpt lat="54.786919900" lon="-2.344318300">
+ <ele>439.000000</ele>
+ <name>TP1642</name>
+</trkpt>
+<trkpt lat="54.786908300" lon="-2.344326600">
+ <ele>439.000000</ele>
+ <name>TP1643</name>
+</trkpt>
+<trkpt lat="54.786903300" lon="-2.344330000">
+ <ele>440.000000</ele>
+ <name>TP1644</name>
+</trkpt>
+<trkpt lat="54.786904900" lon="-2.344324900">
+ <ele>440.000000</ele>
+ <name>TP1645</name>
+</trkpt>
+<trkpt lat="54.786918300" lon="-2.344328300">
+ <ele>440.000000</ele>
+ <name>TP1646</name>
+</trkpt>
+<trkpt lat="54.786916600" lon="-2.344338300">
+ <ele>440.000000</ele>
+ <name>TP1647</name>
+</trkpt>
+<trkpt lat="54.786910000" lon="-2.344343300">
+ <ele>440.000000</ele>
+ <name>TP1648</name>
+</trkpt>
+<trkpt lat="54.786911600" lon="-2.344336600">
+ <ele>440.000000</ele>
+ <name>TP1649</name>
+</trkpt>
+<trkpt lat="54.786918300" lon="-2.344368300">
+ <ele>440.000000</ele>
+ <name>TP1650</name>
+</trkpt>
+<trkpt lat="54.786933300" lon="-2.344361600">
+ <ele>440.000000</ele>
+ <name>TP1651</name>
+</trkpt>
+<trkpt lat="54.786943300" lon="-2.344351600">
+ <ele>440.000000</ele>
+ <name>TP1652</name>
+</trkpt>
+<trkpt lat="54.786943300" lon="-2.344336600">
+ <ele>440.000000</ele>
+ <name>TP1653</name>
+</trkpt>
+<trkpt lat="54.786941600" lon="-2.344333300">
+ <ele>440.000000</ele>
+ <name>TP1654</name>
+</trkpt>
+<trkpt lat="54.786946600" lon="-2.344314900">
+ <ele>440.000000</ele>
+ <name>TP1655</name>
+</trkpt>
+<trkpt lat="54.786951600" lon="-2.344303300">
+ <ele>440.000000</ele>
+ <name>TP1656</name>
+</trkpt>
+<trkpt lat="54.786953300" lon="-2.344289900">
+ <ele>440.000000</ele>
+ <name>TP1657</name>
+</trkpt>
+<trkpt lat="54.786958300" lon="-2.344288300">
+ <ele>440.000000</ele>
+ <name>TP1658</name>
+</trkpt>
+<trkpt lat="54.786954900" lon="-2.344288300">
+ <ele>440.000000</ele>
+ <name>TP1659</name>
+</trkpt>
+<trkpt lat="54.786950000" lon="-2.344295000">
+ <ele>440.000000</ele>
+ <name>TP1660</name>
+</trkpt>
+<trkpt lat="54.786956600" lon="-2.344289900">
+ <ele>440.000000</ele>
+ <name>TP1661</name>
+</trkpt>
+<trkpt lat="54.786958300" lon="-2.344283300">
+ <ele>440.000000</ele>
+ <name>TP1662</name>
+</trkpt>
+<trkpt lat="54.786959900" lon="-2.344279900">
+ <ele>440.000000</ele>
+ <name>TP1663</name>
+</trkpt>
+<trkpt lat="54.786961600" lon="-2.344284900">
+ <ele>440.000000</ele>
+ <name>TP1664</name>
+</trkpt>
+<trkpt lat="54.786965000" lon="-2.344289900">
+ <ele>440.000000</ele>
+ <name>TP1665</name>
+</trkpt>
+<trkpt lat="54.786973300" lon="-2.344306600">
+ <ele>440.000000</ele>
+ <name>TP1666</name>
+</trkpt>
+<trkpt lat="54.786976600" lon="-2.344304900">
+ <ele>440.000000</ele>
+ <name>TP1667</name>
+</trkpt>
+<trkpt lat="54.786976600" lon="-2.344304900">
+ <ele>440.000000</ele>
+ <name>TP1668</name>
+</trkpt>
+<trkpt lat="54.786973300" lon="-2.344313300">
+ <ele>440.000000</ele>
+ <name>TP1669</name>
+</trkpt>
+<trkpt lat="54.786971600" lon="-2.344330000">
+ <ele>440.000000</ele>
+ <name>TP1670</name>
+</trkpt>
+<trkpt lat="54.786968300" lon="-2.344341600">
+ <ele>440.000000</ele>
+ <name>TP1671</name>
+</trkpt>
+<trkpt lat="54.786953300" lon="-2.344338300">
+ <ele>440.000000</ele>
+ <name>TP1672</name>
+</trkpt>
+<trkpt lat="54.786950000" lon="-2.344345000">
+ <ele>440.000000</ele>
+ <name>TP1673</name>
+</trkpt>
+<trkpt lat="54.786950000" lon="-2.344353300">
+ <ele>440.000000</ele>
+ <name>TP1674</name>
+</trkpt>
+<trkpt lat="54.786974900" lon="-2.344373300">
+ <ele>440.000000</ele>
+ <name>TP1675</name>
+</trkpt>
+<trkpt lat="54.786981600" lon="-2.344349900">
+ <ele>440.000000</ele>
+ <name>TP1676</name>
+</trkpt>
+<trkpt lat="54.786991600" lon="-2.344363300">
+ <ele>440.000000</ele>
+ <name>TP1677</name>
+</trkpt>
+<trkpt lat="54.787023300" lon="-2.344398300">
+ <ele>440.000000</ele>
+ <name>TP1678</name>
+</trkpt>
+<trkpt lat="54.787039900" lon="-2.344404900">
+ <ele>440.000000</ele>
+ <name>TP1679</name>
+</trkpt>
+<trkpt lat="54.787068300" lon="-2.344426600">
+ <ele>440.000000</ele>
+ <name>TP1680</name>
+</trkpt>
+<trkpt lat="54.787073300" lon="-2.344441600">
+ <ele>440.000000</ele>
+ <name>TP1681</name>
+</trkpt>
+<trkpt lat="54.787046600" lon="-2.344428300">
+ <ele>440.000000</ele>
+ <name>TP1682</name>
+</trkpt>
+<trkpt lat="54.787046600" lon="-2.344416600">
+ <ele>440.000000</ele>
+ <name>TP1683</name>
+</trkpt>
+<trkpt lat="54.787044900" lon="-2.344409900">
+ <ele>440.000000</ele>
+ <name>TP1684</name>
+</trkpt>
+<trkpt lat="54.787053300" lon="-2.344386600">
+ <ele>440.000000</ele>
+ <name>TP1685</name>
+</trkpt>
+<trkpt lat="54.787039900" lon="-2.344383300">
+ <ele>440.000000</ele>
+ <name>TP1686</name>
+</trkpt>
+<trkpt lat="54.787039900" lon="-2.344384900">
+ <ele>440.000000</ele>
+ <name>TP1687</name>
+</trkpt>
+<trkpt lat="54.787041600" lon="-2.344391600">
+ <ele>440.000000</ele>
+ <name>TP1688</name>
+</trkpt>
+<trkpt lat="54.787043300" lon="-2.344398300">
+ <ele>440.000000</ele>
+ <name>TP1689</name>
+</trkpt>
+<trkpt lat="54.787043300" lon="-2.344401600">
+ <ele>440.000000</ele>
+ <name>TP1690</name>
+</trkpt>
+<trkpt lat="54.787041600" lon="-2.344411600">
+ <ele>440.000000</ele>
+ <name>TP1691</name>
+</trkpt>
+<trkpt lat="54.787043300" lon="-2.344426600">
+ <ele>440.000000</ele>
+ <name>TP1692</name>
+</trkpt>
+<trkpt lat="54.787041600" lon="-2.344435000">
+ <ele>440.000000</ele>
+ <name>TP1693</name>
+</trkpt>
+<trkpt lat="54.787033200" lon="-2.344433300">
+ <ele>440.000000</ele>
+ <name>TP1694</name>
+</trkpt>
+<trkpt lat="54.787066600" lon="-2.344436600">
+ <ele>440.000000</ele>
+ <name>TP1695</name>
+</trkpt>
+<trkpt lat="54.787059900" lon="-2.344428300">
+ <ele>440.000000</ele>
+ <name>TP1696</name>
+</trkpt>
+<trkpt lat="54.787018300" lon="-2.344386600">
+ <ele>440.000000</ele>
+ <name>TP1697</name>
+</trkpt>
+<trkpt lat="54.786993300" lon="-2.344366600">
+ <ele>440.000000</ele>
+ <name>TP1698</name>
+</trkpt>
+<trkpt lat="54.786965000" lon="-2.344371600">
+ <ele>440.000000</ele>
+ <name>TP1699</name>
+</trkpt>
+<trkpt lat="54.786944900" lon="-2.344378300">
+ <ele>440.000000</ele>
+ <name>TP1700</name>
+</trkpt>
+<trkpt lat="54.786946600" lon="-2.344393300">
+ <ele>440.000000</ele>
+ <name>TP1701</name>
+</trkpt>
+<trkpt lat="54.786908300" lon="-2.344391600">
+ <ele>440.000000</ele>
+ <name>TP1702</name>
+</trkpt>
+<trkpt lat="54.786908300" lon="-2.344396600">
+ <ele>440.000000</ele>
+ <name>TP1703</name>
+</trkpt>
+<trkpt lat="54.786899900" lon="-2.344388300">
+ <ele>440.000000</ele>
+ <name>TP1704</name>
+</trkpt>
+<trkpt lat="54.786880000" lon="-2.344373300">
+ <ele>440.000000</ele>
+ <name>TP1705</name>
+</trkpt>
+<trkpt lat="54.786873300" lon="-2.344348300">
+ <ele>440.000000</ele>
+ <name>TP1706</name>
+</trkpt>
+<trkpt lat="54.786871600" lon="-2.344316600">
+ <ele>440.000000</ele>
+ <name>TP1707</name>
+</trkpt>
+<trkpt lat="54.786874900" lon="-2.344299900">
+ <ele>440.000000</ele>
+ <name>TP1708</name>
+</trkpt>
+<trkpt lat="54.786889900" lon="-2.344313300">
+ <ele>440.000000</ele>
+ <name>TP1709</name>
+</trkpt>
+<trkpt lat="54.786891600" lon="-2.344324900">
+ <ele>440.000000</ele>
+ <name>TP1710</name>
+</trkpt>
+<trkpt lat="54.786911600" lon="-2.344331600">
+ <ele>440.000000</ele>
+ <name>TP1711</name>
+</trkpt>
+<trkpt lat="54.786919900" lon="-2.344336600">
+ <ele>440.000000</ele>
+ <name>TP1712</name>
+</trkpt>
+<trkpt lat="54.786926600" lon="-2.344338300">
+ <ele>440.000000</ele>
+ <name>TP1713</name>
+</trkpt>
+<trkpt lat="54.786933300" lon="-2.344339900">
+ <ele>440.000000</ele>
+ <name>TP1714</name>
+</trkpt>
+<trkpt lat="54.786936600" lon="-2.344341600">
+ <ele>440.000000</ele>
+ <name>TP1715</name>
+</trkpt>
+<trkpt lat="54.786935000" lon="-2.344353300">
+ <ele>440.000000</ele>
+ <name>TP1716</name>
+</trkpt>
+<trkpt lat="54.786910000" lon="-2.344333300">
+ <ele>440.000000</ele>
+ <name>TP1717</name>
+</trkpt>
+<trkpt lat="54.786916600" lon="-2.344323300">
+ <ele>440.000000</ele>
+ <name>TP1718</name>
+</trkpt>
+<trkpt lat="54.786913300" lon="-2.344318300">
+ <ele>440.000000</ele>
+ <name>TP1719</name>
+</trkpt>
+<trkpt lat="54.786919900" lon="-2.344334900">
+ <ele>440.000000</ele>
+ <name>TP1720</name>
+</trkpt>
+<trkpt lat="54.786923300" lon="-2.344334900">
+ <ele>440.000000</ele>
+ <name>TP1721</name>
+</trkpt>
+<trkpt lat="54.786923300" lon="-2.344341600">
+ <ele>440.000000</ele>
+ <name>TP1722</name>
+</trkpt>
+<trkpt lat="54.786919900" lon="-2.344348300">
+ <ele>440.000000</ele>
+ <name>TP1723</name>
+</trkpt>
+<trkpt lat="54.786929900" lon="-2.344351600">
+ <ele>440.000000</ele>
+ <name>TP1724</name>
+</trkpt>
+<trkpt lat="54.786941600" lon="-2.344365000">
+ <ele>440.000000</ele>
+ <name>TP1725</name>
+</trkpt>
+<trkpt lat="54.786935000" lon="-2.344376600">
+ <ele>440.000000</ele>
+ <name>TP1726</name>
+</trkpt>
+<trkpt lat="54.786936600" lon="-2.344386600">
+ <ele>440.000000</ele>
+ <name>TP1727</name>
+</trkpt>
+<trkpt lat="54.786986600" lon="-2.344408300">
+ <ele>440.000000</ele>
+ <name>TP1728</name>
+</trkpt>
+<trkpt lat="54.786993300" lon="-2.344428300">
+ <ele>440.000000</ele>
+ <name>TP1729</name>
+</trkpt>
+<trkpt lat="54.787023300" lon="-2.344456600">
+ <ele>440.000000</ele>
+ <name>TP1730</name>
+</trkpt>
+<trkpt lat="54.787063300" lon="-2.344493300">
+ <ele>440.000000</ele>
+ <name>TP1731</name>
+</trkpt>
+<trkpt lat="54.787073300" lon="-2.344489900">
+ <ele>440.000000</ele>
+ <name>TP1732</name>
+</trkpt>
+<trkpt lat="54.787071600" lon="-2.344493300">
+ <ele>440.000000</ele>
+ <name>TP1733</name>
+</trkpt>
+<trkpt lat="54.787065000" lon="-2.344493300">
+ <ele>440.000000</ele>
+ <name>TP1734</name>
+</trkpt>
+<trkpt lat="54.787051600" lon="-2.344491600">
+ <ele>440.000000</ele>
+ <name>TP1735</name>
+</trkpt>
+<trkpt lat="54.787043300" lon="-2.344491600">
+ <ele>440.000000</ele>
+ <name>TP1736</name>
+</trkpt>
+<trkpt lat="54.787029900" lon="-2.344489900">
+ <ele>440.000000</ele>
+ <name>TP1737</name>
+</trkpt>
+<trkpt lat="54.787021600" lon="-2.344493300">
+ <ele>440.000000</ele>
+ <name>TP1738</name>
+</trkpt>
+<trkpt lat="54.786996600" lon="-2.344470000">
+ <ele>440.000000</ele>
+ <name>TP1739</name>
+</trkpt>
+<trkpt lat="54.786999900" lon="-2.344466600">
+ <ele>440.000000</ele>
+ <name>TP1740</name>
+</trkpt>
+<trkpt lat="54.787008300" lon="-2.344464900">
+ <ele>440.000000</ele>
+ <name>TP1741</name>
+</trkpt>
+<trkpt lat="54.786999900" lon="-2.344458300">
+ <ele>440.000000</ele>
+ <name>TP1742</name>
+</trkpt>
+<trkpt lat="54.787001600" lon="-2.344441600">
+ <ele>440.000000</ele>
+ <name>TP1743</name>
+</trkpt>
+<trkpt lat="54.787008300" lon="-2.344441600">
+ <ele>440.000000</ele>
+ <name>TP1744</name>
+</trkpt>
+<trkpt lat="54.787005000" lon="-2.344436600">
+ <ele>440.000000</ele>
+ <name>TP1745</name>
+</trkpt>
+<trkpt lat="54.786999900" lon="-2.344428300">
+ <ele>440.000000</ele>
+ <name>TP1746</name>
+</trkpt>
+<trkpt lat="54.786995000" lon="-2.344419900">
+ <ele>440.000000</ele>
+ <name>TP1747</name>
+</trkpt>
+<trkpt lat="54.787081600" lon="-2.344334900">
+ <ele>440.000000</ele>
+ <name>TP1748</name>
+</trkpt>
+<trkpt lat="54.787066600" lon="-2.344333300">
+ <ele>440.000000</ele>
+ <name>TP1749</name>
+</trkpt>
+<trkpt lat="54.787058300" lon="-2.344328300">
+ <ele>440.000000</ele>
+ <name>TP1750</name>
+</trkpt>
+<trkpt lat="54.787073300" lon="-2.344328300">
+ <ele>440.000000</ele>
+ <name>TP1751</name>
+</trkpt>
+<trkpt lat="54.787078300" lon="-2.344333300">
+ <ele>440.000000</ele>
+ <name>TP1752</name>
+</trkpt>
+<trkpt lat="54.786963200" lon="-2.344506600">
+ <ele>440.000000</ele>
+ <name>TP1753</name>
+</trkpt>
+<trkpt lat="54.787020000" lon="-2.344536600">
+ <ele>440.000000</ele>
+ <name>TP1754</name>
+</trkpt>
+<trkpt lat="54.787011600" lon="-2.344518300">
+ <ele>440.000000</ele>
+ <name>TP1755</name>
+</trkpt>
+<trkpt lat="54.786989900" lon="-2.344454900">
+ <ele>440.000000</ele>
+ <name>TP1756</name>
+</trkpt>
+<trkpt lat="54.786978300" lon="-2.344431600">
+ <ele>440.000000</ele>
+ <name>TP1757</name>
+</trkpt>
+<trkpt lat="54.786974900" lon="-2.344431600">
+ <ele>440.000000</ele>
+ <name>TP1758</name>
+</trkpt>
+<trkpt lat="54.786971600" lon="-2.344429900">
+ <ele>440.000000</ele>
+ <name>TP1759</name>
+</trkpt>
+<trkpt lat="54.786965000" lon="-2.344396600">
+ <ele>441.000000</ele>
+ <name>TP1760</name>
+</trkpt>
+<trkpt lat="54.786965000" lon="-2.344384900">
+ <ele>441.000000</ele>
+ <name>TP1761</name>
+</trkpt>
+<trkpt lat="54.786980000" lon="-2.344343300">
+ <ele>441.000000</ele>
+ <name>TP1762</name>
+</trkpt>
+<trkpt lat="54.786974900" lon="-2.344348300">
+ <ele>441.000000</ele>
+ <name>TP1763</name>
+</trkpt>
+<trkpt lat="54.786978300" lon="-2.344346600">
+ <ele>441.000000</ele>
+ <name>TP1764</name>
+</trkpt>
+<trkpt lat="54.786974900" lon="-2.344338300">
+ <ele>441.000000</ele>
+ <name>TP1765</name>
+</trkpt>
+<trkpt lat="54.786976600" lon="-2.344330000">
+ <ele>441.000000</ele>
+ <name>TP1766</name>
+</trkpt>
+<trkpt lat="54.786971600" lon="-2.344326600">
+ <ele>441.000000</ele>
+ <name>TP1767</name>
+</trkpt>
+<trkpt lat="54.786971600" lon="-2.344330000">
+ <ele>441.000000</ele>
+ <name>TP1768</name>
+</trkpt>
+<trkpt lat="54.786971600" lon="-2.344303300">
+ <ele>441.000000</ele>
+ <name>TP1769</name>
+</trkpt>
+<trkpt lat="54.786968300" lon="-2.344289900">
+ <ele>441.000000</ele>
+ <name>TP1770</name>
+</trkpt>
+<trkpt lat="54.786961600" lon="-2.344295000">
+ <ele>441.000000</ele>
+ <name>TP1771</name>
+</trkpt>
+<trkpt lat="54.786965000" lon="-2.344293300">
+ <ele>441.000000</ele>
+ <name>TP1772</name>
+</trkpt>
+<trkpt lat="54.786961600" lon="-2.344283300">
+ <ele>441.000000</ele>
+ <name>TP1773</name>
+</trkpt>
+<trkpt lat="54.786959900" lon="-2.344293300">
+ <ele>441.000000</ele>
+ <name>TP1774</name>
+</trkpt>
+<trkpt lat="54.786956600" lon="-2.344289900">
+ <ele>441.000000</ele>
+ <name>TP1775</name>
+</trkpt>
+<trkpt lat="54.786948300" lon="-2.344281600">
+ <ele>441.000000</ele>
+ <name>TP1776</name>
+</trkpt>
+<trkpt lat="54.786953300" lon="-2.344276600">
+ <ele>441.000000</ele>
+ <name>TP1777</name>
+</trkpt>
+<trkpt lat="54.786946600" lon="-2.344284900">
+ <ele>441.000000</ele>
+ <name>TP1778</name>
+</trkpt>
+<trkpt lat="54.786956600" lon="-2.344283300">
+ <ele>441.000000</ele>
+ <name>TP1779</name>
+</trkpt>
+<trkpt lat="54.786959900" lon="-2.344288300">
+ <ele>441.000000</ele>
+ <name>TP1780</name>
+</trkpt>
+<trkpt lat="54.786961600" lon="-2.344291600">
+ <ele>441.000000</ele>
+ <name>TP1781</name>
+</trkpt>
+<trkpt lat="54.786965000" lon="-2.344296600">
+ <ele>441.000000</ele>
+ <name>TP1782</name>
+</trkpt>
+<trkpt lat="54.786961600" lon="-2.344284900">
+ <ele>441.000000</ele>
+ <name>TP1783</name>
+</trkpt>
+<trkpt lat="54.786958300" lon="-2.344293300">
+ <ele>441.000000</ele>
+ <name>TP1784</name>
+</trkpt>
+<trkpt lat="54.786961600" lon="-2.344298300">
+ <ele>441.000000</ele>
+ <name>TP1785</name>
+</trkpt>
+<trkpt lat="54.786936600" lon="-2.344283300">
+ <ele>441.000000</ele>
+ <name>TP1786</name>
+</trkpt>
+<trkpt lat="54.786931600" lon="-2.344281600">
+ <ele>441.000000</ele>
+ <name>TP1787</name>
+</trkpt>
+<trkpt lat="54.786928300" lon="-2.344281600">
+ <ele>441.000000</ele>
+ <name>TP1788</name>
+</trkpt>
+<trkpt lat="54.786925000" lon="-2.344275000">
+ <ele>441.000000</ele>
+ <name>TP1789</name>
+</trkpt>
+<trkpt lat="54.786923300" lon="-2.344236600">
+ <ele>441.000000</ele>
+ <name>TP1790</name>
+</trkpt>
+<trkpt lat="54.786935000" lon="-2.344254900">
+ <ele>441.000000</ele>
+ <name>TP1791</name>
+</trkpt>
+<trkpt lat="54.786931600" lon="-2.344263300">
+ <ele>441.000000</ele>
+ <name>TP1792</name>
+</trkpt>
+<trkpt lat="54.786926600" lon="-2.344276600">
+ <ele>441.000000</ele>
+ <name>TP1793</name>
+</trkpt>
+<trkpt lat="54.786921600" lon="-2.344286600">
+ <ele>441.000000</ele>
+ <name>TP1794</name>
+</trkpt>
+<trkpt lat="54.786914900" lon="-2.344310000">
+ <ele>441.000000</ele>
+ <name>TP1795</name>
+</trkpt>
+<trkpt lat="54.786904900" lon="-2.344338300">
+ <ele>441.000000</ele>
+ <name>TP1796</name>
+</trkpt>
+<trkpt lat="54.786898300" lon="-2.344365000">
+ <ele>441.000000</ele>
+ <name>TP1797</name>
+</trkpt>
+<trkpt lat="54.786899900" lon="-2.344353300">
+ <ele>441.000000</ele>
+ <name>TP1798</name>
+</trkpt>
+<trkpt lat="54.786903300" lon="-2.344346600">
+ <ele>441.000000</ele>
+ <name>TP1799</name>
+</trkpt>
+<trkpt lat="54.786903300" lon="-2.344339900">
+ <ele>441.000000</ele>
+ <name>TP1800</name>
+</trkpt>
+<trkpt lat="54.786904900" lon="-2.344336600">
+ <ele>441.000000</ele>
+ <name>TP1801</name>
+</trkpt>
+<trkpt lat="54.786904900" lon="-2.344328300">
+ <ele>441.000000</ele>
+ <name>TP1802</name>
+</trkpt>
+<trkpt lat="54.786904900" lon="-2.344324900">
+ <ele>441.000000</ele>
+ <name>TP1803</name>
+</trkpt>
+<trkpt lat="54.786878300" lon="-2.344361600">
+ <ele>441.000000</ele>
+ <name>TP1804</name>
+</trkpt>
+<trkpt lat="54.786881600" lon="-2.344378300">
+ <ele>441.000000</ele>
+ <name>TP1805</name>
+</trkpt>
+<trkpt lat="54.786883300" lon="-2.344383300">
+ <ele>441.000000</ele>
+ <name>TP1806</name>
+</trkpt>
+<trkpt lat="54.786888300" lon="-2.344388300">
+ <ele>441.000000</ele>
+ <name>TP1807</name>
+</trkpt>
+<trkpt lat="54.786893200" lon="-2.344388300">
+ <ele>441.000000</ele>
+ <name>TP1808</name>
+</trkpt>
+<trkpt lat="54.786893200" lon="-2.344384900">
+ <ele>441.000000</ele>
+ <name>TP1809</name>
+</trkpt>
+<trkpt lat="54.786893200" lon="-2.344391600">
+ <ele>441.000000</ele>
+ <name>TP1810</name>
+</trkpt>
+<trkpt lat="54.786891600" lon="-2.344389900">
+ <ele>441.000000</ele>
+ <name>TP1811</name>
+</trkpt>
+<trkpt lat="54.786901600" lon="-2.344380000">
+ <ele>441.000000</ele>
+ <name>TP1812</name>
+</trkpt>
+<trkpt lat="54.786906600" lon="-2.344374900">
+ <ele>441.000000</ele>
+ <name>TP1813</name>
+</trkpt>
+<trkpt lat="54.786925000" lon="-2.344349900">
+ <ele>441.000000</ele>
+ <name>TP1814</name>
+</trkpt>
+<trkpt lat="54.786929900" lon="-2.344345000">
+ <ele>441.000000</ele>
+ <name>TP1815</name>
+</trkpt>
+<trkpt lat="54.786923300" lon="-2.344345000">
+ <ele>441.000000</ele>
+ <name>TP1816</name>
+</trkpt>
+<trkpt lat="54.786910000" lon="-2.344343300">
+ <ele>441.000000</ele>
+ <name>TP1817</name>
+</trkpt>
+<trkpt lat="54.786916600" lon="-2.344336600">
+ <ele>441.000000</ele>
+ <name>TP1818</name>
+</trkpt>
+<trkpt lat="54.786918300" lon="-2.344331600">
+ <ele>441.000000</ele>
+ <name>TP1819</name>
+</trkpt>
+<trkpt lat="54.786925000" lon="-2.344323300">
+ <ele>441.000000</ele>
+ <name>TP1820</name>
+</trkpt>
+<trkpt lat="54.786929900" lon="-2.344316600">
+ <ele>441.000000</ele>
+ <name>TP1821</name>
+</trkpt>
+<trkpt lat="54.786935000" lon="-2.344319900">
+ <ele>441.000000</ele>
+ <name>TP1822</name>
+</trkpt>
+<trkpt lat="54.786935000" lon="-2.344310000">
+ <ele>441.000000</ele>
+ <name>TP1823</name>
+</trkpt>
+<trkpt lat="54.786929900" lon="-2.344310000">
+ <ele>441.000000</ele>
+ <name>TP1824</name>
+</trkpt>
+<trkpt lat="54.786933300" lon="-2.344276600">
+ <ele>441.000000</ele>
+ <name>TP1825</name>
+</trkpt>
+<trkpt lat="54.786938300" lon="-2.344273300">
+ <ele>441.000000</ele>
+ <name>TP1826</name>
+</trkpt>
+<trkpt lat="54.786941600" lon="-2.344253300">
+ <ele>441.000000</ele>
+ <name>TP1827</name>
+</trkpt>
+<trkpt lat="54.786944900" lon="-2.344244900">
+ <ele>441.000000</ele>
+ <name>TP1828</name>
+</trkpt>
+<trkpt lat="54.786943300" lon="-2.344225000">
+ <ele>441.000000</ele>
+ <name>TP1829</name>
+</trkpt>
+<trkpt lat="54.786946600" lon="-2.344228300">
+ <ele>441.000000</ele>
+ <name>TP1830</name>
+</trkpt>
+<trkpt lat="54.786939900" lon="-2.344231600">
+ <ele>441.000000</ele>
+ <name>TP1831</name>
+</trkpt>
+<trkpt lat="54.786936600" lon="-2.344243300">
+ <ele>441.000000</ele>
+ <name>TP1832</name>
+</trkpt>
+<trkpt lat="54.786929900" lon="-2.344254900">
+ <ele>441.000000</ele>
+ <name>TP1833</name>
+</trkpt>
+<trkpt lat="54.786931600" lon="-2.344249900">
+ <ele>441.000000</ele>
+ <name>TP1834</name>
+</trkpt>
+<trkpt lat="54.786935000" lon="-2.344243300">
+ <ele>441.000000</ele>
+ <name>TP1835</name>
+</trkpt>
+<trkpt lat="54.786939900" lon="-2.344241600">
+ <ele>441.000000</ele>
+ <name>TP1836</name>
+</trkpt>
+<trkpt lat="54.786943300" lon="-2.344244900">
+ <ele>441.000000</ele>
+ <name>TP1837</name>
+</trkpt>
+<trkpt lat="54.786948300" lon="-2.344249900">
+ <ele>441.000000</ele>
+ <name>TP1838</name>
+</trkpt>
+<trkpt lat="54.786951600" lon="-2.344254900">
+ <ele>441.000000</ele>
+ <name>TP1839</name>
+</trkpt>
+<trkpt lat="54.786953300" lon="-2.344263300">
+ <ele>441.000000</ele>
+ <name>TP1840</name>
+</trkpt>
+<trkpt lat="54.786954900" lon="-2.344266600">
+ <ele>441.000000</ele>
+ <name>TP1841</name>
+</trkpt>
+<trkpt lat="54.786950000" lon="-2.344268300">
+ <ele>441.000000</ele>
+ <name>TP1842</name>
+</trkpt>
+<trkpt lat="54.786946600" lon="-2.344266600">
+ <ele>441.000000</ele>
+ <name>TP1843</name>
+</trkpt>
+<trkpt lat="54.786946600" lon="-2.344269900">
+ <ele>441.000000</ele>
+ <name>TP1844</name>
+</trkpt>
+<trkpt lat="54.786958300" lon="-2.344260000">
+ <ele>441.000000</ele>
+ <name>TP1845</name>
+</trkpt>
+<trkpt lat="54.786958300" lon="-2.344271600">
+ <ele>441.000000</ele>
+ <name>TP1846</name>
+</trkpt>
+<trkpt lat="54.786953300" lon="-2.344281600">
+ <ele>441.000000</ele>
+ <name>TP1847</name>
+</trkpt>
+<trkpt lat="54.786950000" lon="-2.344279900">
+ <ele>441.000000</ele>
+ <name>TP1848</name>
+</trkpt>
+<trkpt lat="54.786943300" lon="-2.344279900">
+ <ele>441.000000</ele>
+ <name>TP1849</name>
+</trkpt>
+<trkpt lat="54.786954900" lon="-2.344241600">
+ <ele>441.000000</ele>
+ <name>TP1850</name>
+</trkpt>
+<trkpt lat="54.786953300" lon="-2.344243300">
+ <ele>441.000000</ele>
+ <name>TP1851</name>
+</trkpt>
+<trkpt lat="54.786965000" lon="-2.344241600">
+ <ele>441.000000</ele>
+ <name>TP1852</name>
+</trkpt>
+<trkpt lat="54.786959900" lon="-2.344241600">
+ <ele>441.000000</ele>
+ <name>TP1853</name>
+</trkpt>
+<trkpt lat="54.786953300" lon="-2.344244900">
+ <ele>441.000000</ele>
+ <name>TP1854</name>
+</trkpt>
+<trkpt lat="54.786946600" lon="-2.344254900">
+ <ele>441.000000</ele>
+ <name>TP1855</name>
+</trkpt>
+<trkpt lat="54.786944900" lon="-2.344260000">
+ <ele>441.000000</ele>
+ <name>TP1856</name>
+</trkpt>
+<trkpt lat="54.786950000" lon="-2.344256600">
+ <ele>441.000000</ele>
+ <name>TP1857</name>
+</trkpt>
+<trkpt lat="54.786954900" lon="-2.344263300">
+ <ele>441.000000</ele>
+ <name>TP1858</name>
+</trkpt>
+<trkpt lat="54.786958300" lon="-2.344273300">
+ <ele>441.000000</ele>
+ <name>TP1859</name>
+</trkpt>
+<trkpt lat="54.786954900" lon="-2.344281600">
+ <ele>441.000000</ele>
+ <name>TP1860</name>
+</trkpt>
+<trkpt lat="54.786961600" lon="-2.344286600">
+ <ele>441.000000</ele>
+ <name>TP1861</name>
+</trkpt>
+<trkpt lat="54.786963200" lon="-2.344286600">
+ <ele>441.000000</ele>
+ <name>TP1862</name>
+</trkpt>
+<trkpt lat="54.786959900" lon="-2.344284900">
+ <ele>441.000000</ele>
+ <name>TP1863</name>
+</trkpt>
+<trkpt lat="54.786959900" lon="-2.344289900">
+ <ele>441.000000</ele>
+ <name>TP1864</name>
+</trkpt>
+<trkpt lat="54.786954900" lon="-2.344295000">
+ <ele>441.000000</ele>
+ <name>TP1865</name>
+</trkpt>
+<trkpt lat="54.786950000" lon="-2.344301600">
+ <ele>441.000000</ele>
+ <name>TP1866</name>
+</trkpt>
+<trkpt lat="54.786948300" lon="-2.344299900">
+ <ele>441.000000</ele>
+ <name>TP1867</name>
+</trkpt>
+<trkpt lat="54.786954900" lon="-2.344291600">
+ <ele>441.000000</ele>
+ <name>TP1868</name>
+</trkpt>
+<trkpt lat="54.786966600" lon="-2.344256600">
+ <ele>441.000000</ele>
+ <name>TP1869</name>
+</trkpt>
+<trkpt lat="54.786968300" lon="-2.344263300">
+ <ele>441.000000</ele>
+ <name>TP1870</name>
+</trkpt>
+<trkpt lat="54.786981600" lon="-2.344268300">
+ <ele>441.000000</ele>
+ <name>TP1871</name>
+</trkpt>
+<trkpt lat="54.786978300" lon="-2.344278300">
+ <ele>441.000000</ele>
+ <name>TP1872</name>
+</trkpt>
+<trkpt lat="54.786983300" lon="-2.344271600">
+ <ele>441.000000</ele>
+ <name>TP1873</name>
+</trkpt>
+<trkpt lat="54.786983300" lon="-2.344279900">
+ <ele>441.000000</ele>
+ <name>TP1874</name>
+</trkpt>
+<trkpt lat="54.786974900" lon="-2.344291600">
+ <ele>441.000000</ele>
+ <name>TP1875</name>
+</trkpt>
+<trkpt lat="54.786965000" lon="-2.344304900">
+ <ele>441.000000</ele>
+ <name>TP1876</name>
+</trkpt>
+<trkpt lat="54.786956600" lon="-2.344336600">
+ <ele>441.000000</ele>
+ <name>TP1877</name>
+</trkpt>
+<trkpt lat="54.786961600" lon="-2.344333300">
+ <ele>441.000000</ele>
+ <name>TP1878</name>
+</trkpt>
+<trkpt lat="54.786941600" lon="-2.344323300">
+ <ele>441.000000</ele>
+ <name>TP1879</name>
+</trkpt>
+<trkpt lat="54.786950000" lon="-2.344314900">
+ <ele>441.000000</ele>
+ <name>TP1880</name>
+</trkpt>
+<trkpt lat="54.786963200" lon="-2.344306600">
+ <ele>441.000000</ele>
+ <name>TP1881</name>
+</trkpt>
+<trkpt lat="54.786988300" lon="-2.344291600">
+ <ele>441.000000</ele>
+ <name>TP1882</name>
+</trkpt>
+<trkpt lat="54.786988300" lon="-2.344275000">
+ <ele>441.000000</ele>
+ <name>TP1883</name>
+</trkpt>
+<trkpt lat="54.786984900" lon="-2.344276600">
+ <ele>441.000000</ele>
+ <name>TP1884</name>
+</trkpt>
+<trkpt lat="54.786981600" lon="-2.344278300">
+ <ele>441.000000</ele>
+ <name>TP1885</name>
+</trkpt>
+<trkpt lat="54.786976600" lon="-2.344283300">
+ <ele>441.000000</ele>
+ <name>TP1886</name>
+</trkpt>
+<trkpt lat="54.786974900" lon="-2.344276600">
+ <ele>441.000000</ele>
+ <name>TP1887</name>
+</trkpt>
+<trkpt lat="54.786973300" lon="-2.344271600">
+ <ele>441.000000</ele>
+ <name>TP1888</name>
+</trkpt>
+<trkpt lat="54.786968300" lon="-2.344283300">
+ <ele>441.000000</ele>
+ <name>TP1889</name>
+</trkpt>
+<trkpt lat="54.786966600" lon="-2.344293300">
+ <ele>441.000000</ele>
+ <name>TP1890</name>
+</trkpt>
+<trkpt lat="54.786965000" lon="-2.344301600">
+ <ele>441.000000</ele>
+ <name>TP1891</name>
+</trkpt>
+<trkpt lat="54.786961600" lon="-2.344306600">
+ <ele>441.000000</ele>
+ <name>TP1892</name>
+</trkpt>
+<trkpt lat="54.786954900" lon="-2.344313300">
+ <ele>441.000000</ele>
+ <name>TP1893</name>
+</trkpt>
+<trkpt lat="54.786950000" lon="-2.344311600">
+ <ele>441.000000</ele>
+ <name>TP1894</name>
+</trkpt>
+<trkpt lat="54.786936600" lon="-2.344314900">
+ <ele>441.000000</ele>
+ <name>TP1895</name>
+</trkpt>
+<trkpt lat="54.786928300" lon="-2.344324900">
+ <ele>441.000000</ele>
+ <name>TP1896</name>
+</trkpt>
+<trkpt lat="54.786919900" lon="-2.344333300">
+ <ele>441.000000</ele>
+ <name>TP1897</name>
+</trkpt>
+<trkpt lat="54.786925000" lon="-2.344323300">
+ <ele>441.000000</ele>
+ <name>TP1898</name>
+</trkpt>
+<trkpt lat="54.786925000" lon="-2.344308300">
+ <ele>441.000000</ele>
+ <name>TP1899</name>
+</trkpt>
+<trkpt lat="54.786898300" lon="-2.344348300">
+ <ele>441.000000</ele>
+ <name>TP1900</name>
+</trkpt>
+<trkpt lat="54.786904900" lon="-2.344338300">
+ <ele>441.000000</ele>
+ <name>TP1901</name>
+</trkpt>
+<trkpt lat="54.786908300" lon="-2.344331600">
+ <ele>441.000000</ele>
+ <name>TP1902</name>
+</trkpt>
+<trkpt lat="54.786910000" lon="-2.344321600">
+ <ele>441.000000</ele>
+ <name>TP1903</name>
+</trkpt>
+<trkpt lat="54.786914900" lon="-2.344306600">
+ <ele>441.000000</ele>
+ <name>TP1904</name>
+</trkpt>
+<trkpt lat="54.786918300" lon="-2.344303300">
+ <ele>441.000000</ele>
+ <name>TP1905</name>
+</trkpt>
+<trkpt lat="54.786923300" lon="-2.344296600">
+ <ele>441.000000</ele>
+ <name>TP1906</name>
+</trkpt>
+<trkpt lat="54.786911600" lon="-2.344343300">
+ <ele>441.000000</ele>
+ <name>TP1907</name>
+</trkpt>
+<trkpt lat="54.786904900" lon="-2.344343300">
+ <ele>441.000000</ele>
+ <name>TP1908</name>
+</trkpt>
+<trkpt lat="54.786901600" lon="-2.344353300">
+ <ele>441.000000</ele>
+ <name>TP1909</name>
+</trkpt>
+<trkpt lat="54.786903300" lon="-2.344376600">
+ <ele>441.000000</ele>
+ <name>TP1910</name>
+</trkpt>
+<trkpt lat="54.786906600" lon="-2.344409900">
+ <ele>441.000000</ele>
+ <name>TP1911</name>
+</trkpt>
+<trkpt lat="54.786910000" lon="-2.344416600">
+ <ele>441.000000</ele>
+ <name>TP1912</name>
+</trkpt>
+<trkpt lat="54.786913300" lon="-2.344421600">
+ <ele>441.000000</ele>
+ <name>TP1913</name>
+</trkpt>
+<trkpt lat="54.786916600" lon="-2.344424900">
+ <ele>441.000000</ele>
+ <name>TP1914</name>
+</trkpt>
+<trkpt lat="54.786921600" lon="-2.344433300">
+ <ele>441.000000</ele>
+ <name>TP1915</name>
+</trkpt>
+<trkpt lat="54.786928300" lon="-2.344441600">
+ <ele>441.000000</ele>
+ <name>TP1916</name>
+</trkpt>
+<trkpt lat="54.786936600" lon="-2.344446600">
+ <ele>441.000000</ele>
+ <name>TP1917</name>
+</trkpt>
+<trkpt lat="54.786935000" lon="-2.344448300">
+ <ele>441.000000</ele>
+ <name>TP1918</name>
+</trkpt>
+<trkpt lat="54.786938300" lon="-2.344424900">
+ <ele>441.000000</ele>
+ <name>TP1919</name>
+</trkpt>
+<trkpt lat="54.786939900" lon="-2.344408300">
+ <ele>441.000000</ele>
+ <name>TP1920</name>
+</trkpt>
+<trkpt lat="54.786919900" lon="-2.344343300">
+ <ele>441.000000</ele>
+ <name>TP1921</name>
+</trkpt>
+<trkpt lat="54.786926600" lon="-2.344339900">
+ <ele>441.000000</ele>
+ <name>TP1922</name>
+</trkpt>
+<trkpt lat="54.786938300" lon="-2.344331600">
+ <ele>441.000000</ele>
+ <name>TP1923</name>
+</trkpt>
+<trkpt lat="54.786941600" lon="-2.344331600">
+ <ele>441.000000</ele>
+ <name>TP1924</name>
+</trkpt>
+<trkpt lat="54.786944900" lon="-2.344330000">
+ <ele>441.000000</ele>
+ <name>TP1925</name>
+</trkpt>
+<trkpt lat="54.786946600" lon="-2.344331600">
+ <ele>441.000000</ele>
+ <name>TP1926</name>
+</trkpt>
+<trkpt lat="54.786950000" lon="-2.344321600">
+ <ele>441.000000</ele>
+ <name>TP1927</name>
+</trkpt>
+<trkpt lat="54.786950000" lon="-2.344308300">
+ <ele>441.000000</ele>
+ <name>TP1928</name>
+</trkpt>
+<trkpt lat="54.786918300" lon="-2.344306600">
+ <ele>441.000000</ele>
+ <name>TP1929</name>
+</trkpt>
+<trkpt lat="54.786918300" lon="-2.344289900">
+ <ele>441.000000</ele>
+ <name>TP1930</name>
+</trkpt>
+<trkpt lat="54.786918300" lon="-2.344299900">
+ <ele>441.000000</ele>
+ <name>TP1931</name>
+</trkpt>
+<trkpt lat="54.786923300" lon="-2.344299900">
+ <ele>441.000000</ele>
+ <name>TP1932</name>
+</trkpt>
+<trkpt lat="54.786926600" lon="-2.344298300">
+ <ele>441.000000</ele>
+ <name>TP1933</name>
+</trkpt>
+<trkpt lat="54.786933300" lon="-2.344301600">
+ <ele>441.000000</ele>
+ <name>TP1934</name>
+</trkpt>
+<trkpt lat="54.786938300" lon="-2.344301600">
+ <ele>441.000000</ele>
+ <name>TP1935</name>
+</trkpt>
+<trkpt lat="54.786944900" lon="-2.344295000">
+ <ele>441.000000</ele>
+ <name>TP1936</name>
+</trkpt>
+<trkpt lat="54.786950000" lon="-2.344296600">
+ <ele>441.000000</ele>
+ <name>TP1937</name>
+</trkpt>
+<trkpt lat="54.786966600" lon="-2.344275000">
+ <ele>441.000000</ele>
+ <name>TP1938</name>
+</trkpt>
+<trkpt lat="54.786969900" lon="-2.344278300">
+ <ele>441.000000</ele>
+ <name>TP1939</name>
+</trkpt>
+<trkpt lat="54.786968300" lon="-2.344284900">
+ <ele>441.000000</ele>
+ <name>TP1940</name>
+</trkpt>
+<trkpt lat="54.786965000" lon="-2.344269900">
+ <ele>441.000000</ele>
+ <name>TP1941</name>
+</trkpt>
+<trkpt lat="54.786966600" lon="-2.344258300">
+ <ele>441.000000</ele>
+ <name>TP1942</name>
+</trkpt>
+<trkpt lat="54.786958300" lon="-2.344260000">
+ <ele>441.000000</ele>
+ <name>TP1943</name>
+</trkpt>
+<trkpt lat="54.786944900" lon="-2.344273300">
+ <ele>441.000000</ele>
+ <name>TP1944</name>
+</trkpt>
+<trkpt lat="54.786938300" lon="-2.344281600">
+ <ele>441.000000</ele>
+ <name>TP1945</name>
+</trkpt>
+<trkpt lat="54.786911600" lon="-2.344281600">
+ <ele>441.000000</ele>
+ <name>TP1946</name>
+</trkpt>
+<trkpt lat="54.786911600" lon="-2.344275000">
+ <ele>441.000000</ele>
+ <name>TP1947</name>
+</trkpt>
+<trkpt lat="54.786914900" lon="-2.344293300">
+ <ele>441.000000</ele>
+ <name>TP1948</name>
+</trkpt>
+<trkpt lat="54.786898300" lon="-2.344368300">
+ <ele>441.000000</ele>
+ <name>TP1949</name>
+</trkpt>
+<trkpt lat="54.786899900" lon="-2.344384900">
+ <ele>441.000000</ele>
+ <name>TP1950</name>
+</trkpt>
+<trkpt lat="54.786903300" lon="-2.344391600">
+ <ele>441.000000</ele>
+ <name>TP1951</name>
+</trkpt>
+<trkpt lat="54.786906600" lon="-2.344396600">
+ <ele>441.000000</ele>
+ <name>TP1952</name>
+</trkpt>
+<trkpt lat="54.786913300" lon="-2.344396600">
+ <ele>441.000000</ele>
+ <name>TP1953</name>
+</trkpt>
+<trkpt lat="54.786935000" lon="-2.344389900">
+ <ele>441.000000</ele>
+ <name>TP1954</name>
+</trkpt>
+<trkpt lat="54.786938300" lon="-2.344381600">
+ <ele>441.000000</ele>
+ <name>TP1955</name>
+</trkpt>
+<trkpt lat="54.786943300" lon="-2.344368300">
+ <ele>441.000000</ele>
+ <name>TP1956</name>
+</trkpt>
+<trkpt lat="54.786944900" lon="-2.344363300">
+ <ele>441.000000</ele>
+ <name>TP1957</name>
+</trkpt>
+<trkpt lat="54.786946600" lon="-2.344353300">
+ <ele>441.000000</ele>
+ <name>TP1958</name>
+</trkpt>
+<trkpt lat="54.786951600" lon="-2.344346600">
+ <ele>441.000000</ele>
+ <name>TP1959</name>
+</trkpt>
+<trkpt lat="54.786943300" lon="-2.344343300">
+ <ele>441.000000</ele>
+ <name>TP1960</name>
+</trkpt>
+<trkpt lat="54.786938300" lon="-2.344341600">
+ <ele>441.000000</ele>
+ <name>TP1961</name>
+</trkpt>
+<trkpt lat="54.786939900" lon="-2.344331600">
+ <ele>441.000000</ele>
+ <name>TP1962</name>
+</trkpt>
+<trkpt lat="54.786938300" lon="-2.344330000">
+ <ele>441.000000</ele>
+ <name>TP1963</name>
+</trkpt>
+<trkpt lat="54.786948300" lon="-2.344318300">
+ <ele>441.000000</ele>
+ <name>TP1964</name>
+</trkpt>
+<trkpt lat="54.786943300" lon="-2.344324900">
+ <ele>441.000000</ele>
+ <name>TP1965</name>
+</trkpt>
+<trkpt lat="54.786946600" lon="-2.344313300">
+ <ele>441.000000</ele>
+ <name>TP1966</name>
+</trkpt>
+<trkpt lat="54.786950000" lon="-2.344308300">
+ <ele>441.000000</ele>
+ <name>TP1967</name>
+</trkpt>
+<trkpt lat="54.786936600" lon="-2.344308300">
+ <ele>441.000000</ele>
+ <name>TP1968</name>
+</trkpt>
+<trkpt lat="54.786938300" lon="-2.344301600">
+ <ele>441.000000</ele>
+ <name>TP1969</name>
+</trkpt>
+<trkpt lat="54.786944900" lon="-2.344288300">
+ <ele>441.000000</ele>
+ <name>TP1970</name>
+</trkpt>
+<trkpt lat="54.786954900" lon="-2.344278300">
+ <ele>441.000000</ele>
+ <name>TP1971</name>
+</trkpt>
+<trkpt lat="54.786961600" lon="-2.344276600">
+ <ele>441.000000</ele>
+ <name>TP1972</name>
+</trkpt>
+<trkpt lat="54.786956600" lon="-2.344281600">
+ <ele>441.000000</ele>
+ <name>TP1973</name>
+</trkpt>
+<trkpt lat="54.786954900" lon="-2.344284900">
+ <ele>441.000000</ele>
+ <name>TP1974</name>
+</trkpt>
+<trkpt lat="54.786951600" lon="-2.344283300">
+ <ele>441.000000</ele>
+ <name>TP1975</name>
+</trkpt>
+<trkpt lat="54.786946600" lon="-2.344281600">
+ <ele>441.000000</ele>
+ <name>TP1976</name>
+</trkpt>
+<trkpt lat="54.786944900" lon="-2.344279900">
+ <ele>441.000000</ele>
+ <name>TP1977</name>
+</trkpt>
+<trkpt lat="54.786951600" lon="-2.344284900">
+ <ele>441.000000</ele>
+ <name>TP1978</name>
+</trkpt>
+<trkpt lat="54.786958300" lon="-2.344299900">
+ <ele>441.000000</ele>
+ <name>TP1979</name>
+</trkpt>
+<trkpt lat="54.786961600" lon="-2.344293300">
+ <ele>441.000000</ele>
+ <name>TP1980</name>
+</trkpt>
+<trkpt lat="54.786959900" lon="-2.344299900">
+ <ele>441.000000</ele>
+ <name>TP1981</name>
+</trkpt>
+<trkpt lat="54.786956600" lon="-2.344296600">
+ <ele>441.000000</ele>
+ <name>TP1982</name>
+</trkpt>
+<trkpt lat="54.786951600" lon="-2.344295000">
+ <ele>441.000000</ele>
+ <name>TP1983</name>
+</trkpt>
+<trkpt lat="54.786946600" lon="-2.344291600">
+ <ele>441.000000</ele>
+ <name>TP1984</name>
+</trkpt>
+<trkpt lat="54.786946600" lon="-2.344283300">
+ <ele>441.000000</ele>
+ <name>TP1985</name>
+</trkpt>
+<trkpt lat="54.786941600" lon="-2.344281600">
+ <ele>441.000000</ele>
+ <name>TP1986</name>
+</trkpt>
+<trkpt lat="54.786935000" lon="-2.344281600">
+ <ele>441.000000</ele>
+ <name>TP1987</name>
+</trkpt>
+<trkpt lat="54.786936600" lon="-2.344293300">
+ <ele>441.000000</ele>
+ <name>TP1988</name>
+</trkpt>
+<trkpt lat="54.786938300" lon="-2.344291600">
+ <ele>441.000000</ele>
+ <name>TP1989</name>
+</trkpt>
+<trkpt lat="54.786971600" lon="-2.344308300">
+ <ele>441.000000</ele>
+ <name>TP1990</name>
+</trkpt>
+<trkpt lat="54.786974900" lon="-2.344311600">
+ <ele>441.000000</ele>
+ <name>TP1991</name>
+</trkpt>
+<trkpt lat="54.786966600" lon="-2.344303300">
+ <ele>441.000000</ele>
+ <name>TP1992</name>
+</trkpt>
+<trkpt lat="54.786946600" lon="-2.344299900">
+ <ele>441.000000</ele>
+ <name>TP1993</name>
+</trkpt>
+<trkpt lat="54.786950000" lon="-2.344295000">
+ <ele>441.000000</ele>
+ <name>TP1994</name>
+</trkpt>
+<trkpt lat="54.786959900" lon="-2.344310000">
+ <ele>441.000000</ele>
+ <name>TP1995</name>
+</trkpt>
+<trkpt lat="54.786968300" lon="-2.344319900">
+ <ele>441.000000</ele>
+ <name>TP1996</name>
+</trkpt>
+<trkpt lat="54.786973300" lon="-2.344323300">
+ <ele>441.000000</ele>
+ <name>TP1997</name>
+</trkpt>
+<trkpt lat="54.786978300" lon="-2.344326600">
+ <ele>441.000000</ele>
+ <name>TP1998</name>
+</trkpt>
+<trkpt lat="54.786971600" lon="-2.344319900">
+ <ele>441.000000</ele>
+ <name>TP1999</name>
+</trkpt>
+<trkpt lat="54.786973300" lon="-2.344319900">
+ <ele>441.000000</ele>
+ <name>TP2000</name>
+</trkpt>
+<trkpt lat="54.786965000" lon="-2.344313300">
+ <ele>441.000000</ele>
+ <name>TP2001</name>
+</trkpt>
+<trkpt lat="54.786966600" lon="-2.344308300">
+ <ele>441.000000</ele>
+ <name>TP2002</name>
+</trkpt>
+<trkpt lat="54.786971600" lon="-2.344303300">
+ <ele>441.000000</ele>
+ <name>TP2003</name>
+</trkpt>
+<trkpt lat="54.786976600" lon="-2.344303300">
+ <ele>441.000000</ele>
+ <name>TP2004</name>
+</trkpt>
+<trkpt lat="54.786993300" lon="-2.344298300">
+ <ele>441.000000</ele>
+ <name>TP2005</name>
+</trkpt>
+<trkpt lat="54.786993300" lon="-2.344293300">
+ <ele>441.000000</ele>
+ <name>TP2006</name>
+</trkpt>
+<trkpt lat="54.786988300" lon="-2.344303300">
+ <ele>441.000000</ele>
+ <name>TP2007</name>
+</trkpt>
+<trkpt lat="54.786986600" lon="-2.344296600">
+ <ele>441.000000</ele>
+ <name>TP2008</name>
+</trkpt>
+<trkpt lat="54.786980000" lon="-2.344306600">
+ <ele>441.000000</ele>
+ <name>TP2009</name>
+</trkpt>
+<trkpt lat="54.786963200" lon="-2.344306600">
+ <ele>441.000000</ele>
+ <name>TP2010</name>
+</trkpt>
+<trkpt lat="54.786959900" lon="-2.344304900">
+ <ele>441.000000</ele>
+ <name>TP2011</name>
+</trkpt>
+<trkpt lat="54.786950000" lon="-2.344303300">
+ <ele>441.000000</ele>
+ <name>TP2012</name>
+</trkpt>
+<trkpt lat="54.786944900" lon="-2.344298300">
+ <ele>441.000000</ele>
+ <name>TP2013</name>
+</trkpt>
+<trkpt lat="54.786935000" lon="-2.344299900">
+ <ele>441.000000</ele>
+ <name>TP2014</name>
+</trkpt>
+<trkpt lat="54.786935000" lon="-2.344286600">
+ <ele>441.000000</ele>
+ <name>TP2015</name>
+</trkpt>
+<trkpt lat="54.786939900" lon="-2.344279900">
+ <ele>441.000000</ele>
+ <name>TP2016</name>
+</trkpt>
+<trkpt lat="54.786944900" lon="-2.344269900">
+ <ele>441.000000</ele>
+ <name>TP2017</name>
+</trkpt>
+<trkpt lat="54.786951600" lon="-2.344264900">
+ <ele>441.000000</ele>
+ <name>TP2018</name>
+</trkpt>
+<trkpt lat="54.786950000" lon="-2.344254900">
+ <ele>441.000000</ele>
+ <name>TP2019</name>
+</trkpt>
+<trkpt lat="54.786939900" lon="-2.344253300">
+ <ele>441.000000</ele>
+ <name>TP2020</name>
+</trkpt>
+<trkpt lat="54.786928300" lon="-2.344253300">
+ <ele>441.000000</ele>
+ <name>TP2021</name>
+</trkpt>
+<trkpt lat="54.786925000" lon="-2.344249900">
+ <ele>441.000000</ele>
+ <name>TP2022</name>
+</trkpt>
+<trkpt lat="54.786926600" lon="-2.344244900">
+ <ele>441.000000</ele>
+ <name>TP2023</name>
+</trkpt>
+<trkpt lat="54.786916600" lon="-2.344246600">
+ <ele>441.000000</ele>
+ <name>TP2024</name>
+</trkpt>
+<trkpt lat="54.786929900" lon="-2.344256600">
+ <ele>441.000000</ele>
+ <name>TP2025</name>
+</trkpt>
+<trkpt lat="54.786929900" lon="-2.344251600">
+ <ele>441.000000</ele>
+ <name>TP2026</name>
+</trkpt>
+<trkpt lat="54.786926600" lon="-2.344246600">
+ <ele>441.000000</ele>
+ <name>TP2027</name>
+</trkpt>
+<trkpt lat="54.786923300" lon="-2.344246600">
+ <ele>441.000000</ele>
+ <name>TP2028</name>
+</trkpt>
+<trkpt lat="54.786914900" lon="-2.344244900">
+ <ele>441.000000</ele>
+ <name>TP2029</name>
+</trkpt>
+<trkpt lat="54.786929900" lon="-2.344246600">
+ <ele>441.000000</ele>
+ <name>TP2030</name>
+</trkpt>
+<trkpt lat="54.786936600" lon="-2.344256600">
+ <ele>441.000000</ele>
+ <name>TP2031</name>
+</trkpt>
+<trkpt lat="54.786943300" lon="-2.344269900">
+ <ele>441.000000</ele>
+ <name>TP2032</name>
+</trkpt>
+<trkpt lat="54.786936600" lon="-2.344263300">
+ <ele>441.000000</ele>
+ <name>TP2033</name>
+</trkpt>
+<trkpt lat="54.786935000" lon="-2.344268300">
+ <ele>441.000000</ele>
+ <name>TP2034</name>
+</trkpt>
+<trkpt lat="54.786936600" lon="-2.344268300">
+ <ele>441.000000</ele>
+ <name>TP2035</name>
+</trkpt>
+<trkpt lat="54.786935000" lon="-2.344266600">
+ <ele>441.000000</ele>
+ <name>TP2036</name>
+</trkpt>
+<trkpt lat="54.786938300" lon="-2.344268300">
+ <ele>441.000000</ele>
+ <name>TP2037</name>
+</trkpt>
+<trkpt lat="54.786935000" lon="-2.344266600">
+ <ele>441.000000</ele>
+ <name>TP2038</name>
+</trkpt>
+<trkpt lat="54.786939900" lon="-2.344266600">
+ <ele>441.000000</ele>
+ <name>TP2039</name>
+</trkpt>
+<trkpt lat="54.786928300" lon="-2.344264900">
+ <ele>441.000000</ele>
+ <name>TP2040</name>
+</trkpt>
+<trkpt lat="54.786925000" lon="-2.344264900">
+ <ele>441.000000</ele>
+ <name>TP2041</name>
+</trkpt>
+<trkpt lat="54.786918300" lon="-2.344268300">
+ <ele>441.000000</ele>
+ <name>TP2042</name>
+</trkpt>
+<trkpt lat="54.786916600" lon="-2.344268300">
+ <ele>441.000000</ele>
+ <name>TP2043</name>
+</trkpt>
+<trkpt lat="54.786916600" lon="-2.344264900">
+ <ele>441.000000</ele>
+ <name>TP2044</name>
+</trkpt>
+<trkpt lat="54.786919900" lon="-2.344266600">
+ <ele>441.000000</ele>
+ <name>TP2045</name>
+</trkpt>
+<trkpt lat="54.786911600" lon="-2.344266600">
+ <ele>440.000000</ele>
+ <name>TP2046</name>
+</trkpt>
+<trkpt lat="54.786911600" lon="-2.344258300">
+ <ele>440.000000</ele>
+ <name>TP2047</name>
+</trkpt>
+<trkpt lat="54.786913300" lon="-2.344251600">
+ <ele>440.000000</ele>
+ <name>TP2048</name>
+</trkpt>
+<trkpt lat="54.786904900" lon="-2.344248300">
+ <ele>440.000000</ele>
+ <name>TP2049</name>
+</trkpt>
+<trkpt lat="54.786913300" lon="-2.344248300">
+ <ele>440.000000</ele>
+ <name>TP2050</name>
+</trkpt>
+<trkpt lat="54.786916600" lon="-2.344251600">
+ <ele>440.000000</ele>
+ <name>TP2051</name>
+</trkpt>
+<trkpt lat="54.786929900" lon="-2.344273300">
+ <ele>440.000000</ele>
+ <name>TP2052</name>
+</trkpt>
+<trkpt lat="54.786931600" lon="-2.344291600">
+ <ele>440.000000</ele>
+ <name>TP2053</name>
+</trkpt>
+<trkpt lat="54.786936600" lon="-2.344296600">
+ <ele>440.000000</ele>
+ <name>TP2054</name>
+</trkpt>
+<trkpt lat="54.786938300" lon="-2.344308300">
+ <ele>440.000000</ele>
+ <name>TP2055</name>
+</trkpt>
+<trkpt lat="54.786948300" lon="-2.344313300">
+ <ele>440.000000</ele>
+ <name>TP2056</name>
+</trkpt>
+<trkpt lat="54.786948300" lon="-2.344318300">
+ <ele>440.000000</ele>
+ <name>TP2057</name>
+</trkpt>
+<trkpt lat="54.786921600" lon="-2.344339900">
+ <ele>440.000000</ele>
+ <name>TP2058</name>
+</trkpt>
+<trkpt lat="54.786925000" lon="-2.344339900">
+ <ele>440.000000</ele>
+ <name>TP2059</name>
+</trkpt>
+<trkpt lat="54.786911600" lon="-2.344341600">
+ <ele>440.000000</ele>
+ <name>TP2060</name>
+</trkpt>
+<trkpt lat="54.786899900" lon="-2.344341600">
+ <ele>440.000000</ele>
+ <name>TP2061</name>
+</trkpt>
+<trkpt lat="54.786904900" lon="-2.344343300">
+ <ele>440.000000</ele>
+ <name>TP2062</name>
+</trkpt>
+<trkpt lat="54.786911600" lon="-2.344346600">
+ <ele>440.000000</ele>
+ <name>TP2063</name>
+</trkpt>
+<trkpt lat="54.786913300" lon="-2.344351600">
+ <ele>440.000000</ele>
+ <name>TP2064</name>
+</trkpt>
+<trkpt lat="54.786913300" lon="-2.344354900">
+ <ele>440.000000</ele>
+ <name>TP2065</name>
+</trkpt>
+<trkpt lat="54.786908300" lon="-2.344351600">
+ <ele>440.000000</ele>
+ <name>TP2066</name>
+</trkpt>
+<trkpt lat="54.786895000" lon="-2.344349900">
+ <ele>440.000000</ele>
+ <name>TP2067</name>
+</trkpt>
+<trkpt lat="54.786889900" lon="-2.344356600">
+ <ele>440.000000</ele>
+ <name>TP2068</name>
+</trkpt>
+<trkpt lat="54.786893200" lon="-2.344356600">
+ <ele>440.000000</ele>
+ <name>TP2069</name>
+</trkpt>
+<trkpt lat="54.786896600" lon="-2.344359900">
+ <ele>440.000000</ele>
+ <name>TP2070</name>
+</trkpt>
+<trkpt lat="54.786895000" lon="-2.344365000">
+ <ele>440.000000</ele>
+ <name>TP2071</name>
+</trkpt>
+<trkpt lat="54.786898300" lon="-2.344365000">
+ <ele>440.000000</ele>
+ <name>TP2072</name>
+</trkpt>
+<trkpt lat="54.786901600" lon="-2.344366600">
+ <ele>440.000000</ele>
+ <name>TP2073</name>
+</trkpt>
+<trkpt lat="54.786904900" lon="-2.344366600">
+ <ele>440.000000</ele>
+ <name>TP2074</name>
+</trkpt>
+<trkpt lat="54.786906600" lon="-2.344369900">
+ <ele>440.000000</ele>
+ <name>TP2075</name>
+</trkpt>
+<trkpt lat="54.786906600" lon="-2.344371600">
+ <ele>440.000000</ele>
+ <name>TP2076</name>
+</trkpt>
+<trkpt lat="54.786898300" lon="-2.344371600">
+ <ele>440.000000</ele>
+ <name>TP2077</name>
+</trkpt>
+<trkpt lat="54.786889900" lon="-2.344369900">
+ <ele>440.000000</ele>
+ <name>TP2078</name>
+</trkpt>
+<trkpt lat="54.786883300" lon="-2.344371600">
+ <ele>440.000000</ele>
+ <name>TP2079</name>
+</trkpt>
+<trkpt lat="54.786865000" lon="-2.344371600">
+ <ele>440.000000</ele>
+ <name>TP2080</name>
+</trkpt>
+<trkpt lat="54.786863300" lon="-2.344371600">
+ <ele>440.000000</ele>
+ <name>TP2081</name>
+</trkpt>
+<trkpt lat="54.786866600" lon="-2.344373300">
+ <ele>440.000000</ele>
+ <name>TP2082</name>
+</trkpt>
+<trkpt lat="54.786866600" lon="-2.344374900">
+ <ele>440.000000</ele>
+ <name>TP2083</name>
+</trkpt>
+<trkpt lat="54.786873300" lon="-2.344373300">
+ <ele>440.000000</ele>
+ <name>TP2084</name>
+</trkpt>
+<trkpt lat="54.786880000" lon="-2.344373300">
+ <ele>440.000000</ele>
+ <name>TP2085</name>
+</trkpt>
+<trkpt lat="54.786883300" lon="-2.344371600">
+ <ele>440.000000</ele>
+ <name>TP2086</name>
+</trkpt>
+<trkpt lat="54.786883300" lon="-2.344369900">
+ <ele>440.000000</ele>
+ <name>TP2087</name>
+</trkpt>
+<trkpt lat="54.786869900" lon="-2.344368300">
+ <ele>440.000000</ele>
+ <name>TP2088</name>
+</trkpt>
+<trkpt lat="54.786865000" lon="-2.344369900">
+ <ele>440.000000</ele>
+ <name>TP2089</name>
+</trkpt>
+<trkpt lat="54.786859900" lon="-2.344374900">
+ <ele>440.000000</ele>
+ <name>TP2090</name>
+</trkpt>
+<trkpt lat="54.786868300" lon="-2.344386600">
+ <ele>440.000000</ele>
+ <name>TP2091</name>
+</trkpt>
+<trkpt lat="54.786851600" lon="-2.344389900">
+ <ele>440.000000</ele>
+ <name>TP2092</name>
+</trkpt>
+<trkpt lat="54.786850000" lon="-2.344389900">
+ <ele>440.000000</ele>
+ <name>TP2093</name>
+</trkpt>
+<trkpt lat="54.786853300" lon="-2.344386600">
+ <ele>440.000000</ele>
+ <name>TP2094</name>
+</trkpt>
+<trkpt lat="54.786856600" lon="-2.344384900">
+ <ele>440.000000</ele>
+ <name>TP2095</name>
+</trkpt>
+<trkpt lat="54.786859900" lon="-2.344384900">
+ <ele>440.000000</ele>
+ <name>TP2096</name>
+</trkpt>
+<trkpt lat="54.786865000" lon="-2.344383300">
+ <ele>440.000000</ele>
+ <name>TP2097</name>
+</trkpt>
+<trkpt lat="54.786866600" lon="-2.344383300">
+ <ele>440.000000</ele>
+ <name>TP2098</name>
+</trkpt>
+<trkpt lat="54.786874900" lon="-2.344381600">
+ <ele>440.000000</ele>
+ <name>TP2099</name>
+</trkpt>
+<trkpt lat="54.786880000" lon="-2.344368300">
+ <ele>440.000000</ele>
+ <name>TP2100</name>
+</trkpt>
+<trkpt lat="54.786881600" lon="-2.344356600">
+ <ele>440.000000</ele>
+ <name>TP2101</name>
+</trkpt>
+<trkpt lat="54.786878300" lon="-2.344356600">
+ <ele>440.000000</ele>
+ <name>TP2102</name>
+</trkpt>
+<trkpt lat="54.786871600" lon="-2.344351600">
+ <ele>440.000000</ele>
+ <name>TP2103</name>
+</trkpt>
+<trkpt lat="54.786863300" lon="-2.344353300">
+ <ele>440.000000</ele>
+ <name>TP2104</name>
+</trkpt>
+<trkpt lat="54.786858300" lon="-2.344356600">
+ <ele>440.000000</ele>
+ <name>TP2105</name>
+</trkpt>
+<trkpt lat="54.786853300" lon="-2.344361600">
+ <ele>440.000000</ele>
+ <name>TP2106</name>
+</trkpt>
+<trkpt lat="54.786850000" lon="-2.344365000">
+ <ele>440.000000</ele>
+ <name>TP2107</name>
+</trkpt>
+<trkpt lat="54.786846600" lon="-2.344369900">
+ <ele>440.000000</ele>
+ <name>TP2108</name>
+</trkpt>
+<trkpt lat="54.786844900" lon="-2.344374900">
+ <ele>440.000000</ele>
+ <name>TP2109</name>
+</trkpt>
+<trkpt lat="54.786840000" lon="-2.344381600">
+ <ele>440.000000</ele>
+ <name>TP2110</name>
+</trkpt>
+<trkpt lat="54.786838300" lon="-2.344384900">
+ <ele>440.000000</ele>
+ <name>TP2111</name>
+</trkpt>
+<trkpt lat="54.786831600" lon="-2.344388300">
+ <ele>440.000000</ele>
+ <name>TP2112</name>
+</trkpt>
+<trkpt lat="54.786831600" lon="-2.344403300">
+ <ele>440.000000</ele>
+ <name>TP2113</name>
+</trkpt>
+<trkpt lat="54.786848300" lon="-2.344403300">
+ <ele>440.000000</ele>
+ <name>TP2114</name>
+</trkpt>
+<trkpt lat="54.786841600" lon="-2.344401600">
+ <ele>440.000000</ele>
+ <name>TP2115</name>
+</trkpt>
+<trkpt lat="54.786841600" lon="-2.344393300">
+ <ele>440.000000</ele>
+ <name>TP2116</name>
+</trkpt>
+<trkpt lat="54.786861600" lon="-2.344400000">
+ <ele>440.000000</ele>
+ <name>TP2117</name>
+</trkpt>
+<trkpt lat="54.786861600" lon="-2.344381600">
+ <ele>440.000000</ele>
+ <name>TP2118</name>
+</trkpt>
+<trkpt lat="54.786866600" lon="-2.344376600">
+ <ele>440.000000</ele>
+ <name>TP2119</name>
+</trkpt>
+<trkpt lat="54.786853300" lon="-2.344216600">
+ <ele>440.000000</ele>
+ <name>TP2120</name>
+</trkpt>
+<trkpt lat="54.786858300" lon="-2.344269900">
+ <ele>447.000000</ele>
+ <name>TP2121</name>
+</trkpt>
+<trkpt lat="54.786863300" lon="-2.344266600">
+ <ele>447.000000</ele>
+ <name>TP2122</name>
+</trkpt>
+<trkpt lat="54.786851600" lon="-2.344313300">
+ <ele>446.000000</ele>
+ <name>TP2123</name>
+</trkpt>
+<trkpt lat="54.786850000" lon="-2.344306600">
+ <ele>446.000000</ele>
+ <name>TP2124</name>
+</trkpt>
+<trkpt lat="54.786863300" lon="-2.344303300">
+ <ele>446.000000</ele>
+ <name>TP2125</name>
+</trkpt>
+<trkpt lat="54.786871600" lon="-2.344299900">
+ <ele>446.000000</ele>
+ <name>TP2126</name>
+</trkpt>
+<trkpt lat="54.786876600" lon="-2.344301600">
+ <ele>446.000000</ele>
+ <name>TP2127</name>
+</trkpt>
+<trkpt lat="54.786889900" lon="-2.344304900">
+ <ele>446.000000</ele>
+ <name>TP2128</name>
+</trkpt>
+<trkpt lat="54.786893200" lon="-2.344313300">
+ <ele>446.000000</ele>
+ <name>TP2129</name>
+</trkpt>
+<trkpt lat="54.786896600" lon="-2.344318300">
+ <ele>446.000000</ele>
+ <name>TP2130</name>
+</trkpt>
+<trkpt lat="54.786893200" lon="-2.344328300">
+ <ele>446.000000</ele>
+ <name>TP2131</name>
+</trkpt>
+<trkpt lat="54.786906600" lon="-2.344343300">
+ <ele>446.000000</ele>
+ <name>TP2132</name>
+</trkpt>
+<trkpt lat="54.786925000" lon="-2.344354900">
+ <ele>446.000000</ele>
+ <name>TP2133</name>
+</trkpt>
+<trkpt lat="54.786936600" lon="-2.344363300">
+ <ele>446.000000</ele>
+ <name>TP2134</name>
+</trkpt>
+<trkpt lat="54.786944900" lon="-2.344371600">
+ <ele>446.000000</ele>
+ <name>TP2135</name>
+</trkpt>
+<trkpt lat="54.786951600" lon="-2.344383300">
+ <ele>446.000000</ele>
+ <name>TP2136</name>
+</trkpt>
+<trkpt lat="54.786958300" lon="-2.344391600">
+ <ele>446.000000</ele>
+ <name>TP2137</name>
+</trkpt>
+<trkpt lat="54.786958300" lon="-2.344403300">
+ <ele>446.000000</ele>
+ <name>TP2138</name>
+</trkpt>
+<trkpt lat="54.786965000" lon="-2.344413300">
+ <ele>446.000000</ele>
+ <name>TP2139</name>
+</trkpt>
+<trkpt lat="54.786966600" lon="-2.344424900">
+ <ele>446.000000</ele>
+ <name>TP2140</name>
+</trkpt>
+<trkpt lat="54.786958300" lon="-2.344441600">
+ <ele>446.000000</ele>
+ <name>TP2141</name>
+</trkpt>
+<trkpt lat="54.786950000" lon="-2.344450000">
+ <ele>446.000000</ele>
+ <name>TP2142</name>
+</trkpt>
+<trkpt lat="54.786938300" lon="-2.344451600">
+ <ele>446.000000</ele>
+ <name>TP2143</name>
+</trkpt>
+<trkpt lat="54.786926600" lon="-2.344458300">
+ <ele>446.000000</ele>
+ <name>TP2144</name>
+</trkpt>
+<trkpt lat="54.786929900" lon="-2.344459900">
+ <ele>446.000000</ele>
+ <name>TP2145</name>
+</trkpt>
+<trkpt lat="54.786933300" lon="-2.344461600">
+ <ele>446.000000</ele>
+ <name>TP2146</name>
+</trkpt>
+<trkpt lat="54.786948300" lon="-2.344464900">
+ <ele>446.000000</ele>
+ <name>TP2147</name>
+</trkpt>
+<trkpt lat="54.786943300" lon="-2.344476600">
+ <ele>446.000000</ele>
+ <name>TP2148</name>
+</trkpt>
+<trkpt lat="54.786935000" lon="-2.344476600">
+ <ele>446.000000</ele>
+ <name>TP2149</name>
+</trkpt>
+<trkpt lat="54.786929900" lon="-2.344474900">
+ <ele>446.000000</ele>
+ <name>TP2150</name>
+</trkpt>
+<trkpt lat="54.786931600" lon="-2.344471600">
+ <ele>446.000000</ele>
+ <name>TP2151</name>
+</trkpt>
+<trkpt lat="54.786938300" lon="-2.344471600">
+ <ele>446.000000</ele>
+ <name>TP2152</name>
+</trkpt>
+<trkpt lat="54.786923300" lon="-2.344471600">
+ <ele>446.000000</ele>
+ <name>TP2153</name>
+</trkpt>
+<trkpt lat="54.786914900" lon="-2.344471600">
+ <ele>446.000000</ele>
+ <name>TP2154</name>
+</trkpt>
+<trkpt lat="54.786899900" lon="-2.344474900">
+ <ele>446.000000</ele>
+ <name>TP2155</name>
+</trkpt>
+<trkpt lat="54.786899900" lon="-2.344479900">
+ <ele>446.000000</ele>
+ <name>TP2156</name>
+</trkpt>
+<trkpt lat="54.786898300" lon="-2.344483300">
+ <ele>446.000000</ele>
+ <name>TP2157</name>
+</trkpt>
+<trkpt lat="54.786914900" lon="-2.344489900">
+ <ele>446.000000</ele>
+ <name>TP2158</name>
+</trkpt>
+<trkpt lat="54.786925000" lon="-2.344501600">
+ <ele>446.000000</ele>
+ <name>TP2159</name>
+</trkpt>
+<trkpt lat="54.786933300" lon="-2.344459900">
+ <ele>446.000000</ele>
+ <name>TP2160</name>
+</trkpt>
+<trkpt lat="54.786916600" lon="-2.344436600">
+ <ele>446.000000</ele>
+ <name>TP2161</name>
+</trkpt>
+<trkpt lat="54.786910000" lon="-2.344423300">
+ <ele>446.000000</ele>
+ <name>TP2162</name>
+</trkpt>
+<trkpt lat="54.786906600" lon="-2.344416600">
+ <ele>446.000000</ele>
+ <name>TP2163</name>
+</trkpt>
+<trkpt lat="54.786904900" lon="-2.344406600">
+ <ele>446.000000</ele>
+ <name>TP2164</name>
+</trkpt>
+<trkpt lat="54.786901600" lon="-2.344400000">
+ <ele>446.000000</ele>
+ <name>TP2165</name>
+</trkpt>
+<trkpt lat="54.786901600" lon="-2.344391600">
+ <ele>446.000000</ele>
+ <name>TP2166</name>
+</trkpt>
+<trkpt lat="54.786898300" lon="-2.344374900">
+ <ele>446.000000</ele>
+ <name>TP2167</name>
+</trkpt>
+<trkpt lat="54.786895000" lon="-2.344363300">
+ <ele>446.000000</ele>
+ <name>TP2168</name>
+</trkpt>
+<trkpt lat="54.786891600" lon="-2.344351600">
+ <ele>446.000000</ele>
+ <name>TP2169</name>
+</trkpt>
+<trkpt lat="54.786884900" lon="-2.344345000">
+ <ele>446.000000</ele>
+ <name>TP2170</name>
+</trkpt>
+<trkpt lat="54.786880000" lon="-2.344338300">
+ <ele>446.000000</ele>
+ <name>TP2171</name>
+</trkpt>
+<trkpt lat="54.786871600" lon="-2.344319900">
+ <ele>446.000000</ele>
+ <name>TP2172</name>
+</trkpt>
+<trkpt lat="54.786863300" lon="-2.344311600">
+ <ele>446.000000</ele>
+ <name>TP2173</name>
+</trkpt>
+<trkpt lat="54.786859900" lon="-2.344288300">
+ <ele>446.000000</ele>
+ <name>TP2174</name>
+</trkpt>
+<trkpt lat="54.786868300" lon="-2.344271600">
+ <ele>446.000000</ele>
+ <name>TP2175</name>
+</trkpt>
+<trkpt lat="54.786878300" lon="-2.344254900">
+ <ele>446.000000</ele>
+ <name>TP2176</name>
+</trkpt>
+<trkpt lat="54.786876600" lon="-2.344238300">
+ <ele>446.000000</ele>
+ <name>TP2177</name>
+</trkpt>
+<trkpt lat="54.786869900" lon="-2.344221600">
+ <ele>446.000000</ele>
+ <name>TP2178</name>
+</trkpt>
+<trkpt lat="54.786863300" lon="-2.344181600">
+ <ele>446.000000</ele>
+ <name>TP2179</name>
+</trkpt>
+<trkpt lat="54.786863300" lon="-2.344186600">
+ <ele>446.000000</ele>
+ <name>TP2180</name>
+</trkpt>
+<trkpt lat="54.786861600" lon="-2.344193300">
+ <ele>446.000000</ele>
+ <name>TP2181</name>
+</trkpt>
+<trkpt lat="54.786871600" lon="-2.344193300">
+ <ele>446.000000</ele>
+ <name>TP2182</name>
+</trkpt>
+<trkpt lat="54.786883300" lon="-2.344203300">
+ <ele>446.000000</ele>
+ <name>TP2183</name>
+</trkpt>
+<trkpt lat="54.786883300" lon="-2.344211600">
+ <ele>446.000000</ele>
+ <name>TP2184</name>
+</trkpt>
+<trkpt lat="54.786893200" lon="-2.344213300">
+ <ele>446.000000</ele>
+ <name>TP2185</name>
+</trkpt>
+<trkpt lat="54.786910000" lon="-2.344209900">
+ <ele>446.000000</ele>
+ <name>TP2186</name>
+</trkpt>
+<trkpt lat="54.786918300" lon="-2.344221600">
+ <ele>446.000000</ele>
+ <name>TP2187</name>
+</trkpt>
+<trkpt lat="54.786914900" lon="-2.344225000">
+ <ele>446.000000</ele>
+ <name>TP2188</name>
+</trkpt>
+<trkpt lat="54.786911600" lon="-2.344231600">
+ <ele>446.000000</ele>
+ <name>TP2189</name>
+</trkpt>
+<trkpt lat="54.786904900" lon="-2.344240000">
+ <ele>446.000000</ele>
+ <name>TP2190</name>
+</trkpt>
+<trkpt lat="54.786899900" lon="-2.344249900">
+ <ele>446.000000</ele>
+ <name>TP2191</name>
+</trkpt>
+<trkpt lat="54.786895000" lon="-2.344261600">
+ <ele>446.000000</ele>
+ <name>TP2192</name>
+</trkpt>
+<trkpt lat="54.786891600" lon="-2.344273300">
+ <ele>446.000000</ele>
+ <name>TP2193</name>
+</trkpt>
+<trkpt lat="54.786889900" lon="-2.344284900">
+ <ele>446.000000</ele>
+ <name>TP2194</name>
+</trkpt>
+<trkpt lat="54.786899900" lon="-2.344283300">
+ <ele>446.000000</ele>
+ <name>TP2195</name>
+</trkpt>
+<trkpt lat="54.786901600" lon="-2.344278300">
+ <ele>446.000000</ele>
+ <name>TP2196</name>
+</trkpt>
+<trkpt lat="54.786910000" lon="-2.344283300">
+ <ele>446.000000</ele>
+ <name>TP2197</name>
+</trkpt>
+<trkpt lat="54.786928300" lon="-2.344268300">
+ <ele>446.000000</ele>
+ <name>TP2198</name>
+</trkpt>
+<trkpt lat="54.786936600" lon="-2.344256600">
+ <ele>446.000000</ele>
+ <name>TP2199</name>
+</trkpt>
+<trkpt lat="54.786954900" lon="-2.344234900">
+ <ele>446.000000</ele>
+ <name>TP2200</name>
+</trkpt>
+<trkpt lat="54.786954900" lon="-2.344229900">
+ <ele>446.000000</ele>
+ <name>TP2201</name>
+</trkpt>
+<trkpt lat="54.786948300" lon="-2.344241600">
+ <ele>446.000000</ele>
+ <name>TP2202</name>
+</trkpt>
+<trkpt lat="54.786938300" lon="-2.344251600">
+ <ele>446.000000</ele>
+ <name>TP2203</name>
+</trkpt>
+<trkpt lat="54.786941600" lon="-2.344251600">
+ <ele>446.000000</ele>
+ <name>TP2204</name>
+</trkpt>
+<trkpt lat="54.786961600" lon="-2.344228300">
+ <ele>446.000000</ele>
+ <name>TP2205</name>
+</trkpt>
+<trkpt lat="54.786965000" lon="-2.344219900">
+ <ele>446.000000</ele>
+ <name>TP2206</name>
+</trkpt>
+<trkpt lat="54.786954900" lon="-2.344186600">
+ <ele>446.000000</ele>
+ <name>TP2207</name>
+</trkpt>
+<trkpt lat="54.786954900" lon="-2.344155000">
+ <ele>446.000000</ele>
+ <name>TP2208</name>
+</trkpt>
+<trkpt lat="54.786941600" lon="-2.344153300">
+ <ele>446.000000</ele>
+ <name>TP2209</name>
+</trkpt>
+<trkpt lat="54.786946600" lon="-2.344148300">
+ <ele>446.000000</ele>
+ <name>TP2210</name>
+</trkpt>
+<trkpt lat="54.786954900" lon="-2.344151600">
+ <ele>446.000000</ele>
+ <name>TP2211</name>
+</trkpt>
+<trkpt lat="54.786971600" lon="-2.344170000">
+ <ele>446.000000</ele>
+ <name>TP2212</name>
+</trkpt>
+<trkpt lat="54.786978300" lon="-2.344181600">
+ <ele>446.000000</ele>
+ <name>TP2213</name>
+</trkpt>
+<trkpt lat="54.786995000" lon="-2.344199900">
+ <ele>446.000000</ele>
+ <name>TP2214</name>
+</trkpt>
+<trkpt lat="54.786989900" lon="-2.344234900">
+ <ele>446.000000</ele>
+ <name>TP2215</name>
+</trkpt>
+<trkpt lat="54.786978300" lon="-2.344249900">
+ <ele>446.000000</ele>
+ <name>TP2216</name>
+</trkpt>
+<trkpt lat="54.786963200" lon="-2.344268300">
+ <ele>446.000000</ele>
+ <name>TP2217</name>
+</trkpt>
+<trkpt lat="54.786956600" lon="-2.344281600">
+ <ele>446.000000</ele>
+ <name>TP2218</name>
+</trkpt>
+<trkpt lat="54.786943300" lon="-2.344293300">
+ <ele>446.000000</ele>
+ <name>TP2219</name>
+</trkpt>
+<trkpt lat="54.786926600" lon="-2.344346600">
+ <ele>446.000000</ele>
+ <name>TP2220</name>
+</trkpt>
+<trkpt lat="54.786908300" lon="-2.344371600">
+ <ele>446.000000</ele>
+ <name>TP2221</name>
+</trkpt>
+<trkpt lat="54.786891600" lon="-2.344391600">
+ <ele>446.000000</ele>
+ <name>TP2222</name>
+</trkpt>
+<trkpt lat="54.786868300" lon="-2.344406600">
+ <ele>446.000000</ele>
+ <name>TP2223</name>
+</trkpt>
+<trkpt lat="54.786868300" lon="-2.344396600">
+ <ele>446.000000</ele>
+ <name>TP2224</name>
+</trkpt>
+<trkpt lat="54.786871600" lon="-2.344391600">
+ <ele>446.000000</ele>
+ <name>TP2225</name>
+</trkpt>
+<trkpt lat="54.786876600" lon="-2.344393300">
+ <ele>446.000000</ele>
+ <name>TP2226</name>
+</trkpt>
+<trkpt lat="54.786886600" lon="-2.344391600">
+ <ele>446.000000</ele>
+ <name>TP2227</name>
+</trkpt>
+<trkpt lat="54.786896600" lon="-2.344383300">
+ <ele>446.000000</ele>
+ <name>TP2228</name>
+</trkpt>
+<trkpt lat="54.786904900" lon="-2.344374900">
+ <ele>446.000000</ele>
+ <name>TP2229</name>
+</trkpt>
+<trkpt lat="54.786911600" lon="-2.344391600">
+ <ele>446.000000</ele>
+ <name>TP2230</name>
+</trkpt>
+<trkpt lat="54.786889900" lon="-2.344391600">
+ <ele>446.000000</ele>
+ <name>TP2231</name>
+</trkpt>
+<trkpt lat="54.786883300" lon="-2.344384900">
+ <ele>446.000000</ele>
+ <name>TP2232</name>
+</trkpt>
+<trkpt lat="54.786881600" lon="-2.344386600">
+ <ele>446.000000</ele>
+ <name>TP2233</name>
+</trkpt>
+<trkpt lat="54.786880000" lon="-2.344378300">
+ <ele>446.000000</ele>
+ <name>TP2234</name>
+</trkpt>
+<trkpt lat="54.786891600" lon="-2.344361600">
+ <ele>446.000000</ele>
+ <name>TP2235</name>
+</trkpt>
+<trkpt lat="54.786901600" lon="-2.344341600">
+ <ele>446.000000</ele>
+ <name>TP2236</name>
+</trkpt>
+<trkpt lat="54.786913300" lon="-2.344311600">
+ <ele>446.000000</ele>
+ <name>TP2237</name>
+</trkpt>
+<trkpt lat="54.786904900" lon="-2.344273300">
+ <ele>446.000000</ele>
+ <name>TP2238</name>
+</trkpt>
+<trkpt lat="54.786896600" lon="-2.344276600">
+ <ele>446.000000</ele>
+ <name>TP2239</name>
+</trkpt>
+<trkpt lat="54.786919900" lon="-2.344234900">
+ <ele>446.000000</ele>
+ <name>TP2240</name>
+</trkpt>
+<trkpt lat="54.786919900" lon="-2.344216600">
+ <ele>446.000000</ele>
+ <name>TP2241</name>
+</trkpt>
+<trkpt lat="54.786925000" lon="-2.344201600">
+ <ele>446.000000</ele>
+ <name>TP2242</name>
+</trkpt>
+<trkpt lat="54.786933300" lon="-2.344166600">
+ <ele>446.000000</ele>
+ <name>TP2243</name>
+</trkpt>
+<trkpt lat="54.786938300" lon="-2.344149900">
+ <ele>446.000000</ele>
+ <name>TP2244</name>
+</trkpt>
+<trkpt lat="54.786938300" lon="-2.344144900">
+ <ele>446.000000</ele>
+ <name>TP2245</name>
+</trkpt>
+<trkpt lat="54.786954900" lon="-2.344151600">
+ <ele>446.000000</ele>
+ <name>TP2246</name>
+</trkpt>
+<trkpt lat="54.786936600" lon="-2.344244900">
+ <ele>446.000000</ele>
+ <name>TP2247</name>
+</trkpt>
+<trkpt lat="54.786936600" lon="-2.344286600">
+ <ele>446.000000</ele>
+ <name>TP2248</name>
+</trkpt>
+<trkpt lat="54.786919900" lon="-2.344331600">
+ <ele>446.000000</ele>
+ <name>TP2249</name>
+</trkpt>
+<trkpt lat="54.786898300" lon="-2.344374900">
+ <ele>446.000000</ele>
+ <name>TP2250</name>
+</trkpt>
+<trkpt lat="54.786883300" lon="-2.344409900">
+ <ele>446.000000</ele>
+ <name>TP2251</name>
+</trkpt>
+<trkpt lat="54.786840000" lon="-2.344483300">
+ <ele>446.000000</ele>
+ <name>TP2252</name>
+</trkpt>
+<trkpt lat="54.786836600" lon="-2.344488300">
+ <ele>446.000000</ele>
+ <name>TP2253</name>
+</trkpt>
+<trkpt lat="54.786833300" lon="-2.344493300">
+ <ele>446.000000</ele>
+ <name>TP2254</name>
+</trkpt>
+<trkpt lat="54.786828300" lon="-2.344496600">
+ <ele>446.000000</ele>
+ <name>TP2255</name>
+</trkpt>
+<trkpt lat="54.786825000" lon="-2.344501600">
+ <ele>446.000000</ele>
+ <name>TP2256</name>
+</trkpt>
+<trkpt lat="54.786819900" lon="-2.344509900">
+ <ele>446.000000</ele>
+ <name>TP2257</name>
+</trkpt>
+<trkpt lat="54.786816600" lon="-2.344514900">
+ <ele>446.000000</ele>
+ <name>TP2258</name>
+</trkpt>
+<trkpt lat="54.786813300" lon="-2.344516600">
+ <ele>446.000000</ele>
+ <name>TP2259</name>
+</trkpt>
+<trkpt lat="54.786806600" lon="-2.344523300">
+ <ele>446.000000</ele>
+ <name>TP2260</name>
+</trkpt>
+<trkpt lat="54.786803300" lon="-2.344536600">
+ <ele>446.000000</ele>
+ <name>TP2261</name>
+</trkpt>
+<trkpt lat="54.786796600" lon="-2.344548300">
+ <ele>446.000000</ele>
+ <name>TP2262</name>
+</trkpt>
+<trkpt lat="54.786778300" lon="-2.344576600">
+ <ele>446.000000</ele>
+ <name>TP2263</name>
+</trkpt>
+<trkpt lat="54.786770000" lon="-2.344593300">
+ <ele>446.000000</ele>
+ <name>TP2264</name>
+</trkpt>
+<trkpt lat="54.786753200" lon="-2.344611600">
+ <ele>446.000000</ele>
+ <name>TP2265</name>
+</trkpt>
+<trkpt lat="54.786744900" lon="-2.344616600">
+ <ele>446.000000</ele>
+ <name>TP2266</name>
+</trkpt>
+<trkpt lat="54.786723300" lon="-2.344641600">
+ <ele>446.000000</ele>
+ <name>TP2267</name>
+</trkpt>
+<trkpt lat="54.786710000" lon="-2.344656600">
+ <ele>446.000000</ele>
+ <name>TP2268</name>
+</trkpt>
+<trkpt lat="54.786698300" lon="-2.344660000">
+ <ele>446.000000</ele>
+ <name>TP2269</name>
+</trkpt>
+<trkpt lat="54.786693300" lon="-2.344648300">
+ <ele>446.000000</ele>
+ <name>TP2270</name>
+</trkpt>
+<trkpt lat="54.786691600" lon="-2.344634900">
+ <ele>446.000000</ele>
+ <name>TP2271</name>
+</trkpt>
+<trkpt lat="54.786691600" lon="-2.344628300">
+ <ele>446.000000</ele>
+ <name>TP2272</name>
+</trkpt>
+<trkpt lat="54.786686600" lon="-2.344625000">
+ <ele>446.000000</ele>
+ <name>TP2273</name>
+</trkpt>
+<trkpt lat="54.786689900" lon="-2.344619900">
+ <ele>446.000000</ele>
+ <name>TP2274</name>
+</trkpt>
+<trkpt lat="54.786706600" lon="-2.344613300">
+ <ele>446.000000</ele>
+ <name>TP2275</name>
+</trkpt>
+<trkpt lat="54.786679900" lon="-2.344636600">
+ <ele>446.000000</ele>
+ <name>TP2276</name>
+</trkpt>
+<trkpt lat="54.786661600" lon="-2.344686600">
+ <ele>446.000000</ele>
+ <name>TP2277</name>
+</trkpt>
+<trkpt lat="54.786673300" lon="-2.344723300">
+ <ele>446.000000</ele>
+ <name>TP2278</name>
+</trkpt>
+<trkpt lat="54.787059900" lon="-2.344183300">
+ <ele>446.000000</ele>
+ <name>TP2279</name>
+</trkpt>
+<trkpt lat="54.787051600" lon="-2.344190000">
+ <ele>446.000000</ele>
+ <name>TP2280</name>
+</trkpt>
+<trkpt lat="54.787069900" lon="-2.344151600">
+ <ele>446.000000</ele>
+ <name>TP2281</name>
+</trkpt>
+<trkpt lat="54.787078300" lon="-2.344135000">
+ <ele>446.000000</ele>
+ <name>TP2282</name>
+</trkpt>
+<trkpt lat="54.787071600" lon="-2.344138300">
+ <ele>446.000000</ele>
+ <name>TP2283</name>
+</trkpt>
+<trkpt lat="54.787056600" lon="-2.344148300">
+ <ele>446.000000</ele>
+ <name>TP2284</name>
+</trkpt>
+<trkpt lat="54.787039900" lon="-2.344173300">
+ <ele>446.000000</ele>
+ <name>TP2285</name>
+</trkpt>
+<trkpt lat="54.787039900" lon="-2.344173300">
+ <ele>446.000000</ele>
+ <name>TP2286</name>
+</trkpt>
+<trkpt lat="54.787038300" lon="-2.344170000">
+ <ele>446.000000</ele>
+ <name>TP2287</name>
+</trkpt>
+<trkpt lat="54.787035000" lon="-2.344171600">
+ <ele>446.000000</ele>
+ <name>TP2288</name>
+</trkpt>
+<trkpt lat="54.786989900" lon="-2.344228300">
+ <ele>446.000000</ele>
+ <name>TP2289</name>
+</trkpt>
+<trkpt lat="54.786884900" lon="-2.344388300">
+ <ele>446.000000</ele>
+ <name>TP2290</name>
+</trkpt>
+<trkpt lat="54.786859900" lon="-2.344401600">
+ <ele>446.000000</ele>
+ <name>TP2291</name>
+</trkpt>
+<trkpt lat="54.786861600" lon="-2.344391600">
+ <ele>446.000000</ele>
+ <name>TP2292</name>
+</trkpt>
+<trkpt lat="54.786863300" lon="-2.344381600">
+ <ele>446.000000</ele>
+ <name>TP2293</name>
+</trkpt>
+<trkpt lat="54.786865000" lon="-2.344369900">
+ <ele>446.000000</ele>
+ <name>TP2294</name>
+</trkpt>
+<trkpt lat="54.786865000" lon="-2.344363300">
+ <ele>446.000000</ele>
+ <name>TP2295</name>
+</trkpt>
+<trkpt lat="54.786868300" lon="-2.344356600">
+ <ele>446.000000</ele>
+ <name>TP2296</name>
+</trkpt>
+<trkpt lat="54.786869900" lon="-2.344348300">
+ <ele>446.000000</ele>
+ <name>TP2297</name>
+</trkpt>
+<trkpt lat="54.786873300" lon="-2.344343300">
+ <ele>446.000000</ele>
+ <name>TP2298</name>
+</trkpt>
+<trkpt lat="54.786874900" lon="-2.344338300">
+ <ele>446.000000</ele>
+ <name>TP2299</name>
+</trkpt>
+<trkpt lat="54.786878300" lon="-2.344331600">
+ <ele>446.000000</ele>
+ <name>TP2300</name>
+</trkpt>
+<trkpt lat="54.786880000" lon="-2.344313300">
+ <ele>446.000000</ele>
+ <name>TP2301</name>
+</trkpt>
+<trkpt lat="54.786886600" lon="-2.344306600">
+ <ele>446.000000</ele>
+ <name>TP2302</name>
+</trkpt>
+<trkpt lat="54.786884900" lon="-2.344288300">
+ <ele>446.000000</ele>
+ <name>TP2303</name>
+</trkpt>
+<trkpt lat="54.786891600" lon="-2.344275000">
+ <ele>446.000000</ele>
+ <name>TP2304</name>
+</trkpt>
+<trkpt lat="54.786903300" lon="-2.344269900">
+ <ele>446.000000</ele>
+ <name>TP2305</name>
+</trkpt>
+<trkpt lat="54.786908300" lon="-2.344264900">
+ <ele>446.000000</ele>
+ <name>TP2306</name>
+</trkpt>
+<trkpt lat="54.786919900" lon="-2.344264900">
+ <ele>446.000000</ele>
+ <name>TP2307</name>
+</trkpt>
+<trkpt lat="54.786919900" lon="-2.344271600">
+ <ele>446.000000</ele>
+ <name>TP2308</name>
+</trkpt>
+<trkpt lat="54.786918300" lon="-2.344278300">
+ <ele>446.000000</ele>
+ <name>TP2309</name>
+</trkpt>
+<trkpt lat="54.786914900" lon="-2.344281600">
+ <ele>446.000000</ele>
+ <name>TP2310</name>
+</trkpt>
+<trkpt lat="54.786908300" lon="-2.344286600">
+ <ele>446.000000</ele>
+ <name>TP2311</name>
+</trkpt>
+<trkpt lat="54.786914900" lon="-2.344211600">
+ <ele>446.000000</ele>
+ <name>TP2312</name>
+</trkpt>
+<trkpt lat="54.786851600" lon="-2.344166600">
+ <ele>446.000000</ele>
+ <name>TP2313</name>
+</trkpt>
+<trkpt lat="54.786865000" lon="-2.344173300">
+ <ele>446.000000</ele>
+ <name>TP2314</name>
+</trkpt>
+<trkpt lat="54.786903300" lon="-2.344173300">
+ <ele>446.000000</ele>
+ <name>TP2315</name>
+</trkpt>
+<trkpt lat="54.786883300" lon="-2.344089900">
+ <ele>446.000000</ele>
+ <name>TP2316</name>
+</trkpt>
+<trkpt lat="54.786913300" lon="-2.344171600">
+ <ele>446.000000</ele>
+ <name>TP2317</name>
+</trkpt>
+<trkpt lat="54.786916600" lon="-2.344366600">
+ <ele>446.000000</ele>
+ <name>TP2318</name>
+</trkpt>
+<trkpt lat="54.786944900" lon="-2.344524900">
+ <ele>446.000000</ele>
+ <name>TP2319</name>
+</trkpt>
+<trkpt lat="54.786950000" lon="-2.344549900">
+ <ele>446.000000</ele>
+ <name>TP2320</name>
+</trkpt>
+<trkpt lat="54.786956600" lon="-2.344546600">
+ <ele>446.000000</ele>
+ <name>TP2321</name>
+</trkpt>
+<trkpt lat="54.786963200" lon="-2.344551600">
+ <ele>446.000000</ele>
+ <name>TP2322</name>
+</trkpt>
+<trkpt lat="54.786969900" lon="-2.344544900">
+ <ele>446.000000</ele>
+ <name>TP2323</name>
+</trkpt>
+<trkpt lat="54.786969900" lon="-2.344538300">
+ <ele>446.000000</ele>
+ <name>TP2324</name>
+</trkpt>
+<trkpt lat="54.787053300" lon="-2.344366600">
+ <ele>446.000000</ele>
+ <name>TP2325</name>
+</trkpt>
+<trkpt lat="54.787035000" lon="-2.344431600">
+ <ele>446.000000</ele>
+ <name>TP2326</name>
+</trkpt>
+<trkpt lat="54.787003300" lon="-2.344509900">
+ <ele>446.000000</ele>
+ <name>TP2327</name>
+</trkpt>
+<trkpt lat="54.786999900" lon="-2.344516600">
+ <ele>446.000000</ele>
+ <name>TP2328</name>
+</trkpt>
+<trkpt lat="54.786989900" lon="-2.344536600">
+ <ele>446.000000</ele>
+ <name>TP2329</name>
+</trkpt>
+<trkpt lat="54.786954900" lon="-2.344556600">
+ <ele>446.000000</ele>
+ <name>TP2330</name>
+</trkpt>
+<trkpt lat="54.786944900" lon="-2.344571600">
+ <ele>446.000000</ele>
+ <name>TP2331</name>
+</trkpt>
+<trkpt lat="54.786939900" lon="-2.344573300">
+ <ele>446.000000</ele>
+ <name>TP2332</name>
+</trkpt>
+<trkpt lat="54.786929900" lon="-2.344576600">
+ <ele>446.000000</ele>
+ <name>TP2333</name>
+</trkpt>
+<trkpt lat="54.786911600" lon="-2.344583300">
+ <ele>446.000000</ele>
+ <name>TP2334</name>
+</trkpt>
+<trkpt lat="54.786883300" lon="-2.344590000">
+ <ele>446.000000</ele>
+ <name>TP2335</name>
+</trkpt>
+<trkpt lat="54.786878300" lon="-2.344581600">
+ <ele>446.000000</ele>
+ <name>TP2336</name>
+</trkpt>
+<trkpt lat="54.786869900" lon="-2.344561600">
+ <ele>446.000000</ele>
+ <name>TP2337</name>
+</trkpt>
+<trkpt lat="54.786840000" lon="-2.344551600">
+ <ele>446.000000</ele>
+ <name>TP2338</name>
+</trkpt>
+<trkpt lat="54.786814900" lon="-2.344556600">
+ <ele>446.000000</ele>
+ <name>TP2339</name>
+</trkpt>
+<trkpt lat="54.786806600" lon="-2.344548300">
+ <ele>446.000000</ele>
+ <name>TP2340</name>
+</trkpt>
+<trkpt lat="54.786813300" lon="-2.344499900">
+ <ele>446.000000</ele>
+ <name>TP2341</name>
+</trkpt>
+<trkpt lat="54.786825000" lon="-2.344459900">
+ <ele>446.000000</ele>
+ <name>TP2342</name>
+</trkpt>
+<trkpt lat="54.786841600" lon="-2.344441600">
+ <ele>446.000000</ele>
+ <name>TP2343</name>
+</trkpt>
+<trkpt lat="54.786859900" lon="-2.344431600">
+ <ele>446.000000</ele>
+ <name>TP2344</name>
+</trkpt>
+<trkpt lat="54.786869900" lon="-2.344428300">
+ <ele>446.000000</ele>
+ <name>TP2345</name>
+</trkpt>
+<trkpt lat="54.786771600" lon="-2.344508300">
+ <ele>446.000000</ele>
+ <name>TP2346</name>
+</trkpt>
+<trkpt lat="54.786743300" lon="-2.344541600">
+ <ele>446.000000</ele>
+ <name>TP2347</name>
+</trkpt>
+<trkpt lat="54.786728300" lon="-2.344541600">
+ <ele>446.000000</ele>
+ <name>TP2348</name>
+</trkpt>
+<trkpt lat="54.786770000" lon="-2.344461600">
+ <ele>446.000000</ele>
+ <name>TP2349</name>
+</trkpt>
+<trkpt lat="54.786801600" lon="-2.344415000">
+ <ele>446.000000</ele>
+ <name>TP2350</name>
+</trkpt>
+<trkpt lat="54.786813300" lon="-2.344383300">
+ <ele>446.000000</ele>
+ <name>TP2351</name>
+</trkpt>
+<trkpt lat="54.786811600" lon="-2.344373300">
+ <ele>446.000000</ele>
+ <name>TP2352</name>
+</trkpt>
+<trkpt lat="54.786806600" lon="-2.344373300">
+ <ele>446.000000</ele>
+ <name>TP2353</name>
+</trkpt>
+<trkpt lat="54.786783300" lon="-2.344403300">
+ <ele>446.000000</ele>
+ <name>TP2354</name>
+</trkpt>
+<trkpt lat="54.786786600" lon="-2.344423300">
+ <ele>446.000000</ele>
+ <name>TP2355</name>
+</trkpt>
+<trkpt lat="54.786791600" lon="-2.344421600">
+ <ele>446.000000</ele>
+ <name>TP2356</name>
+</trkpt>
+<trkpt lat="54.786793300" lon="-2.344418300">
+ <ele>446.000000</ele>
+ <name>TP2357</name>
+</trkpt>
+<trkpt lat="54.786801600" lon="-2.344419900">
+ <ele>446.000000</ele>
+ <name>TP2358</name>
+</trkpt>
+<trkpt lat="54.786804900" lon="-2.344421600">
+ <ele>446.000000</ele>
+ <name>TP2359</name>
+</trkpt>
+<trkpt lat="54.786808300" lon="-2.344424900">
+ <ele>446.000000</ele>
+ <name>TP2360</name>
+</trkpt>
+<trkpt lat="54.786808300" lon="-2.344433300">
+ <ele>446.000000</ele>
+ <name>TP2361</name>
+</trkpt>
+<trkpt lat="54.786810000" lon="-2.344433300">
+ <ele>446.000000</ele>
+ <name>TP2362</name>
+</trkpt>
+<trkpt lat="54.786789900" lon="-2.344458300">
+ <ele>446.000000</ele>
+ <name>TP2363</name>
+</trkpt>
+<trkpt lat="54.786766600" lon="-2.344496600">
+ <ele>446.000000</ele>
+ <name>TP2364</name>
+</trkpt>
+<trkpt lat="54.786758300" lon="-2.344541600">
+ <ele>446.000000</ele>
+ <name>TP2365</name>
+</trkpt>
+<trkpt lat="54.786776600" lon="-2.344614900">
+ <ele>446.000000</ele>
+ <name>TP2366</name>
+</trkpt>
+<trkpt lat="54.786744900" lon="-2.344541600">
+ <ele>446.000000</ele>
+ <name>TP2367</name>
+</trkpt>
+<trkpt lat="54.786725000" lon="-2.344498300">
+ <ele>446.000000</ele>
+ <name>TP2368</name>
+</trkpt>
+<trkpt lat="54.786806600" lon="-2.344444900">
+ <ele>446.000000</ele>
+ <name>TP2369</name>
+</trkpt>
+<trkpt lat="54.786799900" lon="-2.344456600">
+ <ele>446.000000</ele>
+ <name>TP2370</name>
+</trkpt>
+<trkpt lat="54.786798300" lon="-2.344453300">
+ <ele>446.000000</ele>
+ <name>TP2371</name>
+</trkpt>
+<trkpt lat="54.786795000" lon="-2.344446600">
+ <ele>446.000000</ele>
+ <name>TP2372</name>
+</trkpt>
+<trkpt lat="54.786793300" lon="-2.344443300">
+ <ele>446.000000</ele>
+ <name>TP2373</name>
+</trkpt>
+<trkpt lat="54.786761600" lon="-2.344533300">
+ <ele>446.000000</ele>
+ <name>TP2374</name>
+</trkpt>
+<trkpt lat="54.786780000" lon="-2.344534900">
+ <ele>446.000000</ele>
+ <name>TP2375</name>
+</trkpt>
+<trkpt lat="54.786725000" lon="-2.344669900">
+ <ele>446.000000</ele>
+ <name>TP2376</name>
+</trkpt>
+<trkpt lat="54.786764900" lon="-2.344629900">
+ <ele>446.000000</ele>
+ <name>TP2377</name>
+</trkpt>
+<trkpt lat="54.786744900" lon="-2.344660000">
+ <ele>446.000000</ele>
+ <name>TP2378</name>
+</trkpt>
+<trkpt lat="54.786836600" lon="-2.344641600">
+ <ele>446.000000</ele>
+ <name>TP2379</name>
+</trkpt>
+<trkpt lat="54.786855000" lon="-2.344639900">
+ <ele>446.000000</ele>
+ <name>TP2380</name>
+</trkpt>
+<trkpt lat="54.786861600" lon="-2.344639900">
+ <ele>446.000000</ele>
+ <name>TP2381</name>
+</trkpt>
+<trkpt lat="54.786856600" lon="-2.344648300">
+ <ele>446.000000</ele>
+ <name>TP2382</name>
+</trkpt>
+<trkpt lat="54.786855000" lon="-2.344645000">
+ <ele>446.000000</ele>
+ <name>TP2383</name>
+</trkpt>
+<trkpt lat="54.786851600" lon="-2.344643300">
+ <ele>446.000000</ele>
+ <name>TP2384</name>
+</trkpt>
+<trkpt lat="54.786848300" lon="-2.344639900">
+ <ele>446.000000</ele>
+ <name>TP2385</name>
+</trkpt>
+<trkpt lat="54.786848300" lon="-2.344638300">
+ <ele>446.000000</ele>
+ <name>TP2386</name>
+</trkpt>
+<trkpt lat="54.786833300" lon="-2.344636600">
+ <ele>446.000000</ele>
+ <name>TP2387</name>
+</trkpt>
+<trkpt lat="54.786836600" lon="-2.344604900">
+ <ele>446.000000</ele>
+ <name>TP2388</name>
+</trkpt>
+<trkpt lat="54.786838300" lon="-2.344591600">
+ <ele>446.000000</ele>
+ <name>TP2389</name>
+</trkpt>
+<trkpt lat="54.786838300" lon="-2.344588300">
+ <ele>446.000000</ele>
+ <name>TP2390</name>
+</trkpt>
+<trkpt lat="54.786834900" lon="-2.344584900">
+ <ele>446.000000</ele>
+ <name>TP2391</name>
+</trkpt>
+<trkpt lat="54.786836600" lon="-2.344578300">
+ <ele>446.000000</ele>
+ <name>TP2392</name>
+</trkpt>
+<trkpt lat="54.786829900" lon="-2.344568300">
+ <ele>446.000000</ele>
+ <name>TP2393</name>
+</trkpt>
+<trkpt lat="54.786814900" lon="-2.344596600">
+ <ele>446.000000</ele>
+ <name>TP2394</name>
+</trkpt>
+<trkpt lat="54.786810000" lon="-2.344583300">
+ <ele>446.000000</ele>
+ <name>TP2395</name>
+</trkpt>
+<trkpt lat="54.786829900" lon="-2.344533300">
+ <ele>446.000000</ele>
+ <name>TP2396</name>
+</trkpt>
+<trkpt lat="54.786834900" lon="-2.344521600">
+ <ele>446.000000</ele>
+ <name>TP2397</name>
+</trkpt>
+<trkpt lat="54.786843300" lon="-2.344505000">
+ <ele>446.000000</ele>
+ <name>TP2398</name>
+</trkpt>
+<trkpt lat="54.786848300" lon="-2.344489900">
+ <ele>446.000000</ele>
+ <name>TP2399</name>
+</trkpt>
+<trkpt lat="54.786851600" lon="-2.344473300">
+ <ele>446.000000</ele>
+ <name>TP2400</name>
+</trkpt>
+<trkpt lat="54.786851600" lon="-2.344468300">
+ <ele>446.000000</ele>
+ <name>TP2401</name>
+</trkpt>
+<trkpt lat="54.786855000" lon="-2.344454900">
+ <ele>446.000000</ele>
+ <name>TP2402</name>
+</trkpt>
+<trkpt lat="54.786859900" lon="-2.344439900">
+ <ele>446.000000</ele>
+ <name>TP2403</name>
+</trkpt>
+<trkpt lat="54.786865000" lon="-2.344429900">
+ <ele>446.000000</ele>
+ <name>TP2404</name>
+</trkpt>
+<trkpt lat="54.786868300" lon="-2.344418300">
+ <ele>446.000000</ele>
+ <name>TP2405</name>
+</trkpt>
+<trkpt lat="54.786869900" lon="-2.344409900">
+ <ele>446.000000</ele>
+ <name>TP2406</name>
+</trkpt>
+<trkpt lat="54.786878300" lon="-2.344400000">
+ <ele>446.000000</ele>
+ <name>TP2407</name>
+</trkpt>
+<trkpt lat="54.786883300" lon="-2.344391600">
+ <ele>446.000000</ele>
+ <name>TP2408</name>
+</trkpt>
+<trkpt lat="54.786893200" lon="-2.344376600">
+ <ele>446.000000</ele>
+ <name>TP2409</name>
+</trkpt>
+<trkpt lat="54.786899900" lon="-2.344369900">
+ <ele>446.000000</ele>
+ <name>TP2410</name>
+</trkpt>
+<trkpt lat="54.786903300" lon="-2.344368300">
+ <ele>446.000000</ele>
+ <name>TP2411</name>
+</trkpt>
+<trkpt lat="54.786918300" lon="-2.344353300">
+ <ele>446.000000</ele>
+ <name>TP2412</name>
+</trkpt>
+<trkpt lat="54.786925000" lon="-2.344353300">
+ <ele>446.000000</ele>
+ <name>TP2413</name>
+</trkpt>
+<trkpt lat="54.786931600" lon="-2.344354900">
+ <ele>446.000000</ele>
+ <name>TP2414</name>
+</trkpt>
+<trkpt lat="54.786943300" lon="-2.344341600">
+ <ele>446.000000</ele>
+ <name>TP2415</name>
+</trkpt>
+<trkpt lat="54.786954900" lon="-2.344331600">
+ <ele>446.000000</ele>
+ <name>TP2416</name>
+</trkpt>
+<trkpt lat="54.786959900" lon="-2.344316600">
+ <ele>446.000000</ele>
+ <name>TP2417</name>
+</trkpt>
+<trkpt lat="54.786981600" lon="-2.344296600">
+ <ele>446.000000</ele>
+ <name>TP2418</name>
+</trkpt>
+<trkpt lat="54.786996600" lon="-2.344214900">
+ <ele>446.000000</ele>
+ <name>TP2419</name>
+</trkpt>
+<trkpt lat="54.786993300" lon="-2.344219900">
+ <ele>446.000000</ele>
+ <name>TP2420</name>
+</trkpt>
+<trkpt lat="54.786993300" lon="-2.344225000">
+ <ele>446.000000</ele>
+ <name>TP2421</name>
+</trkpt>
+<trkpt lat="54.786991600" lon="-2.344225000">
+ <ele>446.000000</ele>
+ <name>TP2422</name>
+</trkpt>
+<trkpt lat="54.786991600" lon="-2.344219900">
+ <ele>446.000000</ele>
+ <name>TP2423</name>
+</trkpt>
+<trkpt lat="54.786986600" lon="-2.344213300">
+ <ele>446.000000</ele>
+ <name>TP2424</name>
+</trkpt>
+<trkpt lat="54.786998300" lon="-2.344213300">
+ <ele>446.000000</ele>
+ <name>TP2425</name>
+</trkpt>
+<trkpt lat="54.786996600" lon="-2.344206600">
+ <ele>446.000000</ele>
+ <name>TP2426</name>
+</trkpt>
+<trkpt lat="54.786995000" lon="-2.344206600">
+ <ele>446.000000</ele>
+ <name>TP2427</name>
+</trkpt>
+<trkpt lat="54.786993300" lon="-2.344216600">
+ <ele>446.000000</ele>
+ <name>TP2428</name>
+</trkpt>
+<trkpt lat="54.786984900" lon="-2.344233300">
+ <ele>446.000000</ele>
+ <name>TP2429</name>
+</trkpt>
+<trkpt lat="54.786978300" lon="-2.344248300">
+ <ele>446.000000</ele>
+ <name>TP2430</name>
+</trkpt>
+<trkpt lat="54.786978300" lon="-2.344256600">
+ <ele>446.000000</ele>
+ <name>TP2431</name>
+</trkpt>
+<trkpt lat="54.786956600" lon="-2.344283300">
+ <ele>446.000000</ele>
+ <name>TP2432</name>
+</trkpt>
+<trkpt lat="54.786956600" lon="-2.344288300">
+ <ele>446.000000</ele>
+ <name>TP2433</name>
+</trkpt>
+<trkpt lat="54.786959900" lon="-2.344284900">
+ <ele>446.000000</ele>
+ <name>TP2434</name>
+</trkpt>
+<trkpt lat="54.786961600" lon="-2.344303300">
+ <ele>446.000000</ele>
+ <name>TP2435</name>
+</trkpt>
+<trkpt lat="54.786959900" lon="-2.344314900">
+ <ele>446.000000</ele>
+ <name>TP2436</name>
+</trkpt>
+<trkpt lat="54.786954900" lon="-2.344339900">
+ <ele>446.000000</ele>
+ <name>TP2437</name>
+</trkpt>
+<trkpt lat="54.786943300" lon="-2.344353300">
+ <ele>446.000000</ele>
+ <name>TP2438</name>
+</trkpt>
+<trkpt lat="54.786939900" lon="-2.344374900">
+ <ele>446.000000</ele>
+ <name>TP2439</name>
+</trkpt>
+<trkpt lat="54.786931600" lon="-2.344398300">
+ <ele>446.000000</ele>
+ <name>TP2440</name>
+</trkpt>
+<trkpt lat="54.786925000" lon="-2.344413300">
+ <ele>446.000000</ele>
+ <name>TP2441</name>
+</trkpt>
+<trkpt lat="54.786946600" lon="-2.344396600">
+ <ele>446.000000</ele>
+ <name>TP2442</name>
+</trkpt>
+<trkpt lat="54.786961600" lon="-2.344391600">
+ <ele>446.000000</ele>
+ <name>TP2443</name>
+</trkpt>
+<trkpt lat="54.786954900" lon="-2.344373300">
+ <ele>446.000000</ele>
+ <name>TP2444</name>
+</trkpt>
+<trkpt lat="54.786953300" lon="-2.344353300">
+ <ele>446.000000</ele>
+ <name>TP2445</name>
+</trkpt>
+<trkpt lat="54.786944900" lon="-2.344351600">
+ <ele>446.000000</ele>
+ <name>TP2446</name>
+</trkpt>
+<trkpt lat="54.786941600" lon="-2.344354900">
+ <ele>446.000000</ele>
+ <name>TP2447</name>
+</trkpt>
+<trkpt lat="54.786935000" lon="-2.344363300">
+ <ele>446.000000</ele>
+ <name>TP2448</name>
+</trkpt>
+<trkpt lat="54.786928300" lon="-2.344365000">
+ <ele>446.000000</ele>
+ <name>TP2449</name>
+</trkpt>
+<trkpt lat="54.786923300" lon="-2.344366600">
+ <ele>446.000000</ele>
+ <name>TP2450</name>
+</trkpt>
+<trkpt lat="54.786914900" lon="-2.344368300">
+ <ele>446.000000</ele>
+ <name>TP2451</name>
+</trkpt>
+<trkpt lat="54.786910000" lon="-2.344376600">
+ <ele>446.000000</ele>
+ <name>TP2452</name>
+</trkpt>
+<trkpt lat="54.786910000" lon="-2.344380000">
+ <ele>446.000000</ele>
+ <name>TP2453</name>
+</trkpt>
+<trkpt lat="54.786895000" lon="-2.344404900">
+ <ele>446.000000</ele>
+ <name>TP2454</name>
+</trkpt>
+<trkpt lat="54.786883300" lon="-2.344426600">
+ <ele>446.000000</ele>
+ <name>TP2455</name>
+</trkpt>
+<trkpt lat="54.786873300" lon="-2.344443300">
+ <ele>446.000000</ele>
+ <name>TP2456</name>
+</trkpt>
+<trkpt lat="54.786840000" lon="-2.344511600">
+ <ele>446.000000</ele>
+ <name>TP2457</name>
+</trkpt>
+<trkpt lat="54.786740000" lon="-2.344758300">
+ <ele>446.000000</ele>
+ <name>TP2458</name>
+</trkpt>
+<trkpt lat="54.786813300" lon="-2.344573300">
+ <ele>446.000000</ele>
+ <name>TP2459</name>
+</trkpt>
+<trkpt lat="54.786841600" lon="-2.344509900">
+ <ele>446.000000</ele>
+ <name>TP2460</name>
+</trkpt>
+<trkpt lat="54.786884900" lon="-2.344418300">
+ <ele>446.000000</ele>
+ <name>TP2461</name>
+</trkpt>
+<trkpt lat="54.786919900" lon="-2.344334900">
+ <ele>446.000000</ele>
+ <name>TP2462</name>
+</trkpt>
+<trkpt lat="54.786943300" lon="-2.344349900">
+ <ele>446.000000</ele>
+ <name>TP2463</name>
+</trkpt>
+<trkpt lat="54.786961600" lon="-2.344330000">
+ <ele>446.000000</ele>
+ <name>TP2464</name>
+</trkpt>
+<trkpt lat="54.787023300" lon="-2.344299900">
+ <ele>446.000000</ele>
+ <name>TP2465</name>
+</trkpt>
+<trkpt lat="54.787006600" lon="-2.344321600">
+ <ele>446.000000</ele>
+ <name>TP2466</name>
+</trkpt>
+<trkpt lat="54.787016600" lon="-2.344323300">
+ <ele>446.000000</ele>
+ <name>TP2467</name>
+</trkpt>
+<trkpt lat="54.786978300" lon="-2.344330000">
+ <ele>446.000000</ele>
+ <name>TP2468</name>
+</trkpt>
+<trkpt lat="54.786980000" lon="-2.344298300">
+ <ele>446.000000</ele>
+ <name>TP2469</name>
+</trkpt>
+<trkpt lat="54.786991600" lon="-2.344279900">
+ <ele>446.000000</ele>
+ <name>TP2470</name>
+</trkpt>
+<trkpt lat="54.786989900" lon="-2.344260000">
+ <ele>446.000000</ele>
+ <name>TP2471</name>
+</trkpt>
+<trkpt lat="54.786978300" lon="-2.344266600">
+ <ele>446.000000</ele>
+ <name>TP2472</name>
+</trkpt>
+<trkpt lat="54.787044900" lon="-2.344206600">
+ <ele>446.000000</ele>
+ <name>TP2473</name>
+</trkpt>
+<trkpt lat="54.787059900" lon="-2.344198300">
+ <ele>446.000000</ele>
+ <name>TP2474</name>
+</trkpt>
+<trkpt lat="54.787056600" lon="-2.344190000">
+ <ele>446.000000</ele>
+ <name>TP2475</name>
+</trkpt>
+<trkpt lat="54.787066600" lon="-2.344159900">
+ <ele>446.000000</ele>
+ <name>TP2476</name>
+</trkpt>
+<trkpt lat="54.787066600" lon="-2.344123300">
+ <ele>446.000000</ele>
+ <name>TP2477</name>
+</trkpt>
+<trkpt lat="54.787075000" lon="-2.344121600">
+ <ele>446.000000</ele>
+ <name>TP2478</name>
+</trkpt>
+<trkpt lat="54.787058300" lon="-2.344116600">
+ <ele>446.000000</ele>
+ <name>TP2479</name>
+</trkpt>
+<trkpt lat="54.787008300" lon="-2.344101600">
+ <ele>446.000000</ele>
+ <name>TP2480</name>
+</trkpt>
+<trkpt lat="54.787011600" lon="-2.344106600">
+ <ele>446.000000</ele>
+ <name>TP2481</name>
+</trkpt>
+<trkpt lat="54.786971600" lon="-2.344116600">
+ <ele>446.000000</ele>
+ <name>TP2482</name>
+</trkpt>
+<trkpt lat="54.786969900" lon="-2.344118300">
+ <ele>446.000000</ele>
+ <name>TP2483</name>
+</trkpt>
+<trkpt lat="54.786965000" lon="-2.344126600">
+ <ele>446.000000</ele>
+ <name>TP2484</name>
+</trkpt>
+<trkpt lat="54.786936600" lon="-2.344148300">
+ <ele>446.000000</ele>
+ <name>TP2485</name>
+</trkpt>
+<trkpt lat="54.786926600" lon="-2.344156600">
+ <ele>446.000000</ele>
+ <name>TP2486</name>
+</trkpt>
+<trkpt lat="54.786921600" lon="-2.344146600">
+ <ele>446.000000</ele>
+ <name>TP2487</name>
+</trkpt>
+<trkpt lat="54.786916600" lon="-2.344148300">
+ <ele>446.000000</ele>
+ <name>TP2488</name>
+</trkpt>
+<trkpt lat="54.786911600" lon="-2.344149900">
+ <ele>446.000000</ele>
+ <name>TP2489</name>
+</trkpt>
+<trkpt lat="54.786908300" lon="-2.344153300">
+ <ele>446.000000</ele>
+ <name>TP2490</name>
+</trkpt>
+<trkpt lat="54.786903300" lon="-2.344156600">
+ <ele>446.000000</ele>
+ <name>TP2491</name>
+</trkpt>
+<trkpt lat="54.786904900" lon="-2.344163300">
+ <ele>446.000000</ele>
+ <name>TP2492</name>
+</trkpt>
+<trkpt lat="54.786903300" lon="-2.344173300">
+ <ele>446.000000</ele>
+ <name>TP2493</name>
+</trkpt>
+<trkpt lat="54.786896600" lon="-2.344183300">
+ <ele>446.000000</ele>
+ <name>TP2494</name>
+</trkpt>
+<trkpt lat="54.786886600" lon="-2.344190000">
+ <ele>446.000000</ele>
+ <name>TP2495</name>
+</trkpt>
+<trkpt lat="54.786886600" lon="-2.344190000">
+ <ele>446.000000</ele>
+ <name>TP2496</name>
+</trkpt>
+<trkpt lat="54.786891600" lon="-2.344191600">
+ <ele>446.000000</ele>
+ <name>TP2497</name>
+</trkpt>
+<trkpt lat="54.786888300" lon="-2.344205000">
+ <ele>446.000000</ele>
+ <name>TP2498</name>
+</trkpt>
+<trkpt lat="54.786889900" lon="-2.344214900">
+ <ele>446.000000</ele>
+ <name>TP2499</name>
+</trkpt>
+<trkpt lat="54.786888300" lon="-2.344233300">
+ <ele>446.000000</ele>
+ <name>TP2500</name>
+</trkpt>
+<trkpt lat="54.786884900" lon="-2.344240000">
+ <ele>446.000000</ele>
+ <name>TP2501</name>
+</trkpt>
+<trkpt lat="54.786880000" lon="-2.344268300">
+ <ele>446.000000</ele>
+ <name>TP2502</name>
+</trkpt>
+<trkpt lat="54.786863300" lon="-2.344323300">
+ <ele>446.000000</ele>
+ <name>TP2503</name>
+</trkpt>
+<trkpt lat="54.786859900" lon="-2.344330000">
+ <ele>446.000000</ele>
+ <name>TP2504</name>
+</trkpt>
+<trkpt lat="54.786863300" lon="-2.344324900">
+ <ele>446.000000</ele>
+ <name>TP2505</name>
+</trkpt>
+<trkpt lat="54.786836600" lon="-2.344368300">
+ <ele>446.000000</ele>
+ <name>TP2506</name>
+</trkpt>
+<trkpt lat="54.786841600" lon="-2.344373300">
+ <ele>446.000000</ele>
+ <name>TP2507</name>
+</trkpt>
+<trkpt lat="54.786850000" lon="-2.344361600">
+ <ele>446.000000</ele>
+ <name>TP2508</name>
+</trkpt>
+<trkpt lat="54.786838300" lon="-2.344363300">
+ <ele>446.000000</ele>
+ <name>TP2509</name>
+</trkpt>
+<trkpt lat="54.786838300" lon="-2.344361600">
+ <ele>446.000000</ele>
+ <name>TP2510</name>
+</trkpt>
+<trkpt lat="54.786816600" lon="-2.344304900">
+ <ele>446.000000</ele>
+ <name>TP2511</name>
+</trkpt>
+<trkpt lat="54.786801600" lon="-2.344295000">
+ <ele>446.000000</ele>
+ <name>TP2512</name>
+</trkpt>
+<trkpt lat="54.786798300" lon="-2.344293300">
+ <ele>446.000000</ele>
+ <name>TP2513</name>
+</trkpt>
+<trkpt lat="54.786795000" lon="-2.344291600">
+ <ele>446.000000</ele>
+ <name>TP2514</name>
+</trkpt>
+<trkpt lat="54.786791600" lon="-2.344284900">
+ <ele>446.000000</ele>
+ <name>TP2515</name>
+</trkpt>
+<trkpt lat="54.786861600" lon="-2.344178300">
+ <ele>446.000000</ele>
+ <name>TP2516</name>
+</trkpt>
+<trkpt lat="54.786891600" lon="-2.344151600">
+ <ele>446.000000</ele>
+ <name>TP2517</name>
+</trkpt>
+<trkpt lat="54.786918300" lon="-2.344146600">
+ <ele>446.000000</ele>
+ <name>TP2518</name>
+</trkpt>
+<trkpt lat="54.786941600" lon="-2.344144900">
+ <ele>446.000000</ele>
+ <name>TP2519</name>
+</trkpt>
+<trkpt lat="54.786958300" lon="-2.344148300">
+ <ele>446.000000</ele>
+ <name>TP2520</name>
+</trkpt>
+<trkpt lat="54.786948300" lon="-2.344158300">
+ <ele>446.000000</ele>
+ <name>TP2521</name>
+</trkpt>
+<trkpt lat="54.786941600" lon="-2.344181600">
+ <ele>446.000000</ele>
+ <name>TP2522</name>
+</trkpt>
+<trkpt lat="54.786926600" lon="-2.344191600">
+ <ele>446.000000</ele>
+ <name>TP2523</name>
+</trkpt>
+<trkpt lat="54.786923300" lon="-2.344186600">
+ <ele>446.000000</ele>
+ <name>TP2524</name>
+</trkpt>
+<trkpt lat="54.786919900" lon="-2.344179900">
+ <ele>446.000000</ele>
+ <name>TP2525</name>
+</trkpt>
+<trkpt lat="54.786921600" lon="-2.344168300">
+ <ele>446.000000</ele>
+ <name>TP2526</name>
+</trkpt>
+<trkpt lat="54.786923300" lon="-2.344158300">
+ <ele>446.000000</ele>
+ <name>TP2527</name>
+</trkpt>
+<trkpt lat="54.786944900" lon="-2.344158300">
+ <ele>446.000000</ele>
+ <name>TP2528</name>
+</trkpt>
+<trkpt lat="54.786976600" lon="-2.344124900">
+ <ele>446.000000</ele>
+ <name>TP2529</name>
+</trkpt>
+<trkpt lat="54.786998300" lon="-2.344121600">
+ <ele>446.000000</ele>
+ <name>TP2530</name>
+</trkpt>
+<trkpt lat="54.787011600" lon="-2.344151600">
+ <ele>446.000000</ele>
+ <name>TP2531</name>
+</trkpt>
+<trkpt lat="54.787011600" lon="-2.344158300">
+ <ele>446.000000</ele>
+ <name>TP2532</name>
+</trkpt>
+<trkpt lat="54.787023300" lon="-2.344171600">
+ <ele>446.000000</ele>
+ <name>TP2533</name>
+</trkpt>
+<trkpt lat="54.786904900" lon="-2.344339900">
+ <ele>446.000000</ele>
+ <name>TP2534</name>
+</trkpt>
+<trkpt lat="54.786874900" lon="-2.344354900">
+ <ele>446.000000</ele>
+ <name>TP2535</name>
+</trkpt>
+<trkpt lat="54.786468300" lon="-2.344398300">
+ <ele>446.000000</ele>
+ <name>TP2536</name>
+</trkpt>
+<trkpt lat="54.786461600" lon="-2.344408300">
+ <ele>446.000000</ele>
+ <name>TP2537</name>
+</trkpt>
+<trkpt lat="54.786503300" lon="-2.344415000">
+ <ele>446.000000</ele>
+ <name>TP2538</name>
+</trkpt>
+<trkpt lat="54.786488300" lon="-2.344413300">
+ <ele>446.000000</ele>
+ <name>TP2539</name>
+</trkpt>
+<trkpt lat="54.786483300" lon="-2.344415000">
+ <ele>446.000000</ele>
+ <name>TP2540</name>
+</trkpt>
+<trkpt lat="54.786494900" lon="-2.344418300">
+ <ele>446.000000</ele>
+ <name>TP2541</name>
+</trkpt>
+<trkpt lat="54.786469900" lon="-2.344415000">
+ <ele>446.000000</ele>
+ <name>TP2542</name>
+</trkpt>
+<trkpt lat="54.786496600" lon="-2.344408300">
+ <ele>446.000000</ele>
+ <name>TP2543</name>
+</trkpt>
+<trkpt lat="54.786618300" lon="-2.344396600">
+ <ele>446.000000</ele>
+ <name>TP2544</name>
+</trkpt>
+<trkpt lat="54.786659900" lon="-2.344394900">
+ <ele>446.000000</ele>
+ <name>TP2545</name>
+</trkpt>
+<trkpt lat="54.786713300" lon="-2.344391600">
+ <ele>446.000000</ele>
+ <name>TP2546</name>
+</trkpt>
+<trkpt lat="54.786766600" lon="-2.344393300">
+ <ele>446.000000</ele>
+ <name>TP2547</name>
+</trkpt>
+<trkpt lat="54.786808300" lon="-2.344386600">
+ <ele>446.000000</ele>
+ <name>TP2548</name>
+</trkpt>
+<trkpt lat="54.786831600" lon="-2.344381600">
+ <ele>446.000000</ele>
+ <name>TP2549</name>
+</trkpt>
+<trkpt lat="54.786881600" lon="-2.344371600">
+ <ele>446.000000</ele>
+ <name>TP2550</name>
+</trkpt>
+<trkpt lat="54.786981600" lon="-2.344356600">
+ <ele>446.000000</ele>
+ <name>TP2551</name>
+</trkpt>
+<trkpt lat="54.786999900" lon="-2.344354900">
+ <ele>446.000000</ele>
+ <name>TP2552</name>
+</trkpt>
+<trkpt lat="54.786951600" lon="-2.344406600">
+ <ele>446.000000</ele>
+ <name>TP2553</name>
+</trkpt>
+<trkpt lat="54.786951600" lon="-2.344413300">
+ <ele>446.000000</ele>
+ <name>TP2554</name>
+</trkpt>
+<trkpt lat="54.786958300" lon="-2.344404900">
+ <ele>446.000000</ele>
+ <name>TP2555</name>
+</trkpt>
+<trkpt lat="54.787009900" lon="-2.344389900">
+ <ele>446.000000</ele>
+ <name>TP2556</name>
+</trkpt>
+<trkpt lat="54.786996600" lon="-2.344416600">
+ <ele>446.000000</ele>
+ <name>TP2557</name>
+</trkpt>
+<trkpt lat="54.786971600" lon="-2.344408300">
+ <ele>446.000000</ele>
+ <name>TP2558</name>
+</trkpt>
+<trkpt lat="54.786973300" lon="-2.344413300">
+ <ele>446.000000</ele>
+ <name>TP2559</name>
+</trkpt>
+<trkpt lat="54.786989900" lon="-2.344383300">
+ <ele>446.000000</ele>
+ <name>TP2560</name>
+</trkpt>
+<trkpt lat="54.786991600" lon="-2.344368300">
+ <ele>446.000000</ele>
+ <name>TP2561</name>
+</trkpt>
+<trkpt lat="54.786988300" lon="-2.344333300">
+ <ele>446.000000</ele>
+ <name>TP2562</name>
+</trkpt>
+<trkpt lat="54.786969900" lon="-2.344318300">
+ <ele>446.000000</ele>
+ <name>TP2563</name>
+</trkpt>
+<trkpt lat="54.786958300" lon="-2.344338300">
+ <ele>446.000000</ele>
+ <name>TP2564</name>
+</trkpt>
+<trkpt lat="54.786953300" lon="-2.344339900">
+ <ele>446.000000</ele>
+ <name>TP2565</name>
+</trkpt>
+<trkpt lat="54.786950000" lon="-2.344349900">
+ <ele>446.000000</ele>
+ <name>TP2566</name>
+</trkpt>
+<trkpt lat="54.786941600" lon="-2.344359900">
+ <ele>446.000000</ele>
+ <name>TP2567</name>
+</trkpt>
+<trkpt lat="54.786941600" lon="-2.344356600">
+ <ele>446.000000</ele>
+ <name>TP2568</name>
+</trkpt>
+<trkpt lat="54.786936600" lon="-2.344353300">
+ <ele>446.000000</ele>
+ <name>TP2569</name>
+</trkpt>
+<trkpt lat="54.786929900" lon="-2.344351600">
+ <ele>446.000000</ele>
+ <name>TP2570</name>
+</trkpt>
+<trkpt lat="54.786923300" lon="-2.344351600">
+ <ele>446.000000</ele>
+ <name>TP2571</name>
+</trkpt>
+<trkpt lat="54.786916600" lon="-2.344348300">
+ <ele>446.000000</ele>
+ <name>TP2572</name>
+</trkpt>
+<trkpt lat="54.786908300" lon="-2.344339900">
+ <ele>446.000000</ele>
+ <name>TP2573</name>
+</trkpt>
+<trkpt lat="54.786898300" lon="-2.344341600">
+ <ele>446.000000</ele>
+ <name>TP2574</name>
+</trkpt>
+<trkpt lat="54.786898300" lon="-2.344334900">
+ <ele>446.000000</ele>
+ <name>TP2575</name>
+</trkpt>
+<trkpt lat="54.786893200" lon="-2.344328300">
+ <ele>446.000000</ele>
+ <name>TP2576</name>
+</trkpt>
+<trkpt lat="54.786891600" lon="-2.344324900">
+ <ele>446.000000</ele>
+ <name>TP2577</name>
+</trkpt>
+<trkpt lat="54.786891600" lon="-2.344310000">
+ <ele>446.000000</ele>
+ <name>TP2578</name>
+</trkpt>
+<trkpt lat="54.786889900" lon="-2.344303300">
+ <ele>446.000000</ele>
+ <name>TP2579</name>
+</trkpt>
+<trkpt lat="54.786889900" lon="-2.344299900">
+ <ele>446.000000</ele>
+ <name>TP2580</name>
+</trkpt>
+<trkpt lat="54.786893200" lon="-2.344293300">
+ <ele>446.000000</ele>
+ <name>TP2581</name>
+</trkpt>
+<trkpt lat="54.786898300" lon="-2.344291600">
+ <ele>446.000000</ele>
+ <name>TP2582</name>
+</trkpt>
+<trkpt lat="54.786903300" lon="-2.344289900">
+ <ele>446.000000</ele>
+ <name>TP2583</name>
+</trkpt>
+<trkpt lat="54.786906600" lon="-2.344286600">
+ <ele>446.000000</ele>
+ <name>TP2584</name>
+</trkpt>
+<trkpt lat="54.786906600" lon="-2.344288300">
+ <ele>446.000000</ele>
+ <name>TP2585</name>
+</trkpt>
+<trkpt lat="54.786903300" lon="-2.344296600">
+ <ele>446.000000</ele>
+ <name>TP2586</name>
+</trkpt>
+<trkpt lat="54.786899900" lon="-2.344301600">
+ <ele>446.000000</ele>
+ <name>TP2587</name>
+</trkpt>
+<trkpt lat="54.786895000" lon="-2.344306600">
+ <ele>446.000000</ele>
+ <name>TP2588</name>
+</trkpt>
+<trkpt lat="54.786884900" lon="-2.344321600">
+ <ele>446.000000</ele>
+ <name>TP2589</name>
+</trkpt>
+<trkpt lat="54.786889900" lon="-2.344353300">
+ <ele>447.000000</ele>
+ <name>TP2590</name>
+</trkpt>
+<trkpt lat="54.786906600" lon="-2.344363300">
+ <ele>447.000000</ele>
+ <name>TP2591</name>
+</trkpt>
+<trkpt lat="54.786908300" lon="-2.344363300">
+ <ele>447.000000</ele>
+ <name>TP2592</name>
+</trkpt>
+<trkpt lat="54.786904900" lon="-2.344369900">
+ <ele>447.000000</ele>
+ <name>TP2593</name>
+</trkpt>
+<trkpt lat="54.786886600" lon="-2.344381600">
+ <ele>447.000000</ele>
+ <name>TP2594</name>
+</trkpt>
+<trkpt lat="54.786886600" lon="-2.344376600">
+ <ele>447.000000</ele>
+ <name>TP2595</name>
+</trkpt>
+<trkpt lat="54.786881600" lon="-2.344380000">
+ <ele>447.000000</ele>
+ <name>TP2596</name>
+</trkpt>
+<trkpt lat="54.786876600" lon="-2.344388300">
+ <ele>447.000000</ele>
+ <name>TP2597</name>
+</trkpt>
+<trkpt lat="54.786884900" lon="-2.344391600">
+ <ele>447.000000</ele>
+ <name>TP2598</name>
+</trkpt>
+<trkpt lat="54.786888300" lon="-2.344386600">
+ <ele>447.000000</ele>
+ <name>TP2599</name>
+</trkpt>
+<trkpt lat="54.786883300" lon="-2.344380000">
+ <ele>447.000000</ele>
+ <name>TP2600</name>
+</trkpt>
+<trkpt lat="54.786886600" lon="-2.344378300">
+ <ele>447.000000</ele>
+ <name>TP2601</name>
+</trkpt>
+<trkpt lat="54.786889900" lon="-2.344376600">
+ <ele>447.000000</ele>
+ <name>TP2602</name>
+</trkpt>
+<trkpt lat="54.786883300" lon="-2.344380000">
+ <ele>447.000000</ele>
+ <name>TP2603</name>
+</trkpt>
+<trkpt lat="54.786878300" lon="-2.344388300">
+ <ele>447.000000</ele>
+ <name>TP2604</name>
+</trkpt>
+<trkpt lat="54.786898300" lon="-2.344381600">
+ <ele>447.000000</ele>
+ <name>TP2605</name>
+</trkpt>
+<trkpt lat="54.786901600" lon="-2.344380000">
+ <ele>447.000000</ele>
+ <name>TP2606</name>
+</trkpt>
+<trkpt lat="54.786904900" lon="-2.344374900">
+ <ele>447.000000</ele>
+ <name>TP2607</name>
+</trkpt>
+<trkpt lat="54.786901600" lon="-2.344374900">
+ <ele>447.000000</ele>
+ <name>TP2608</name>
+</trkpt>
+<trkpt lat="54.786895000" lon="-2.344368300">
+ <ele>447.000000</ele>
+ <name>TP2609</name>
+</trkpt>
+<trkpt lat="54.786893200" lon="-2.344366600">
+ <ele>447.000000</ele>
+ <name>TP2610</name>
+</trkpt>
+<trkpt lat="54.786893200" lon="-2.344361600">
+ <ele>447.000000</ele>
+ <name>TP2611</name>
+</trkpt>
+<trkpt lat="54.786896600" lon="-2.344356600">
+ <ele>447.000000</ele>
+ <name>TP2612</name>
+</trkpt>
+<trkpt lat="54.786898300" lon="-2.344354900">
+ <ele>447.000000</ele>
+ <name>TP2613</name>
+</trkpt>
+<trkpt lat="54.786903300" lon="-2.344349900">
+ <ele>447.000000</ele>
+ <name>TP2614</name>
+</trkpt>
+<trkpt lat="54.786888300" lon="-2.344349900">
+ <ele>447.000000</ele>
+ <name>TP2615</name>
+</trkpt>
+<trkpt lat="54.786891600" lon="-2.344339900">
+ <ele>447.000000</ele>
+ <name>TP2616</name>
+</trkpt>
+<trkpt lat="54.786883300" lon="-2.344324900">
+ <ele>447.000000</ele>
+ <name>TP2617</name>
+</trkpt>
+<trkpt lat="54.786861600" lon="-2.344331600">
+ <ele>447.000000</ele>
+ <name>TP2618</name>
+</trkpt>
+<trkpt lat="54.786855000" lon="-2.344330000">
+ <ele>447.000000</ele>
+ <name>TP2619</name>
+</trkpt>
+<trkpt lat="54.786844900" lon="-2.344324900">
+ <ele>447.000000</ele>
+ <name>TP2620</name>
+</trkpt>
+<trkpt lat="54.786838300" lon="-2.344330000">
+ <ele>447.000000</ele>
+ <name>TP2621</name>
+</trkpt>
+<trkpt lat="54.786818300" lon="-2.344343300">
+ <ele>447.000000</ele>
+ <name>TP2622</name>
+</trkpt>
+<trkpt lat="54.786831600" lon="-2.344313300">
+ <ele>447.000000</ele>
+ <name>TP2623</name>
+</trkpt>
+<trkpt lat="54.786840000" lon="-2.344310000">
+ <ele>447.000000</ele>
+ <name>TP2624</name>
+</trkpt>
+<trkpt lat="54.786843300" lon="-2.344306600">
+ <ele>447.000000</ele>
+ <name>TP2625</name>
+</trkpt>
+<trkpt lat="54.786818300" lon="-2.344323300">
+ <ele>447.000000</ele>
+ <name>TP2626</name>
+</trkpt>
+<trkpt lat="54.786841600" lon="-2.344319900">
+ <ele>446.000000</ele>
+ <name>TP2627</name>
+</trkpt>
+<trkpt lat="54.786850000" lon="-2.344311600">
+ <ele>446.000000</ele>
+ <name>TP2628</name>
+</trkpt>
+<trkpt lat="54.786903300" lon="-2.344281600">
+ <ele>446.000000</ele>
+ <name>TP2629</name>
+</trkpt>
+<trkpt lat="54.786938300" lon="-2.344261600">
+ <ele>446.000000</ele>
+ <name>TP2630</name>
+</trkpt>
+<trkpt lat="54.786971600" lon="-2.344236600">
+ <ele>446.000000</ele>
+ <name>TP2631</name>
+</trkpt>
+<trkpt lat="54.786993300" lon="-2.344226600">
+ <ele>446.000000</ele>
+ <name>TP2632</name>
+</trkpt>
+<trkpt lat="54.787033200" lon="-2.344193300">
+ <ele>446.000000</ele>
+ <name>TP2633</name>
+</trkpt>
+<trkpt lat="54.787046600" lon="-2.344183300">
+ <ele>446.000000</ele>
+ <name>TP2634</name>
+</trkpt>
+<trkpt lat="54.787101600" lon="-2.344176600">
+ <ele>446.000000</ele>
+ <name>TP2635</name>
+</trkpt>
+<trkpt lat="54.787113300" lon="-2.344173300">
+ <ele>446.000000</ele>
+ <name>TP2636</name>
+</trkpt>
+<trkpt lat="54.787131600" lon="-2.344164900">
+ <ele>446.000000</ele>
+ <name>TP2637</name>
+</trkpt>
+<trkpt lat="54.787131600" lon="-2.344166600">
+ <ele>446.000000</ele>
+ <name>TP2638</name>
+</trkpt>
+<trkpt lat="54.787128300" lon="-2.344168300">
+ <ele>446.000000</ele>
+ <name>TP2639</name>
+</trkpt>
+<trkpt lat="54.787111600" lon="-2.344181600">
+ <ele>446.000000</ele>
+ <name>TP2640</name>
+</trkpt>
+<trkpt lat="54.787096600" lon="-2.344193300">
+ <ele>446.000000</ele>
+ <name>TP2641</name>
+</trkpt>
+<trkpt lat="54.787075000" lon="-2.344208300">
+ <ele>446.000000</ele>
+ <name>TP2642</name>
+</trkpt>
+<trkpt lat="54.787053300" lon="-2.344226600">
+ <ele>446.000000</ele>
+ <name>TP2643</name>
+</trkpt>
+<trkpt lat="54.786908300" lon="-2.344319900">
+ <ele>447.000000</ele>
+ <name>TP2644</name>
+</trkpt>
+<trkpt lat="54.786874900" lon="-2.344310000">
+ <ele>447.000000</ele>
+ <name>TP2645</name>
+</trkpt>
+<trkpt lat="54.786863300" lon="-2.344291600">
+ <ele>447.000000</ele>
+ <name>TP2646</name>
+</trkpt>
+<trkpt lat="54.786873300" lon="-2.344288300">
+ <ele>447.000000</ele>
+ <name>TP2647</name>
+</trkpt>
+<trkpt lat="54.786871600" lon="-2.344278300">
+ <ele>447.000000</ele>
+ <name>TP2648</name>
+</trkpt>
+<trkpt lat="54.786868300" lon="-2.344275000">
+ <ele>447.000000</ele>
+ <name>TP2649</name>
+</trkpt>
+<trkpt lat="54.786865000" lon="-2.344283300">
+ <ele>447.000000</ele>
+ <name>TP2650</name>
+</trkpt>
+<trkpt lat="54.786871600" lon="-2.344288300">
+ <ele>447.000000</ele>
+ <name>TP2651</name>
+</trkpt>
+<trkpt lat="54.786871600" lon="-2.344289900">
+ <ele>447.000000</ele>
+ <name>TP2652</name>
+</trkpt>
+<trkpt lat="54.786873300" lon="-2.344286600">
+ <ele>447.000000</ele>
+ <name>TP2653</name>
+</trkpt>
+<trkpt lat="54.786841600" lon="-2.344288300">
+ <ele>447.000000</ele>
+ <name>TP2654</name>
+</trkpt>
+<trkpt lat="54.786819900" lon="-2.344281600">
+ <ele>447.000000</ele>
+ <name>TP2655</name>
+</trkpt>
+<trkpt lat="54.786781600" lon="-2.344293300">
+ <ele>447.000000</ele>
+ <name>TP2656</name>
+</trkpt>
+<trkpt lat="54.786743300" lon="-2.344308300">
+ <ele>447.000000</ele>
+ <name>TP2657</name>
+</trkpt>
+<trkpt lat="54.786731600" lon="-2.344318300">
+ <ele>447.000000</ele>
+ <name>TP2658</name>
+</trkpt>
+<trkpt lat="54.786719900" lon="-2.344319900">
+ <ele>447.000000</ele>
+ <name>TP2659</name>
+</trkpt>
+<trkpt lat="54.786728300" lon="-2.344336600">
+ <ele>447.000000</ele>
+ <name>TP2660</name>
+</trkpt>
+<trkpt lat="54.786733300" lon="-2.344336600">
+ <ele>447.000000</ele>
+ <name>TP2661</name>
+</trkpt>
+<trkpt lat="54.786740000" lon="-2.344331600">
+ <ele>447.000000</ele>
+ <name>TP2662</name>
+</trkpt>
+<trkpt lat="54.786751600" lon="-2.344326600">
+ <ele>447.000000</ele>
+ <name>TP2663</name>
+</trkpt>
+<trkpt lat="54.786766600" lon="-2.344333300">
+ <ele>447.000000</ele>
+ <name>TP2664</name>
+</trkpt>
+<trkpt lat="54.786776600" lon="-2.344330000">
+ <ele>447.000000</ele>
+ <name>TP2665</name>
+</trkpt>
+<trkpt lat="54.786783300" lon="-2.344330000">
+ <ele>447.000000</ele>
+ <name>TP2666</name>
+</trkpt>
+<trkpt lat="54.786785000" lon="-2.344324900">
+ <ele>447.000000</ele>
+ <name>TP2667</name>
+</trkpt>
+<trkpt lat="54.786776600" lon="-2.344336600">
+ <ele>448.000000</ele>
+ <name>TP2668</name>
+</trkpt>
+<trkpt lat="54.786783300" lon="-2.344331600">
+ <ele>448.000000</ele>
+ <name>TP2669</name>
+</trkpt>
+<trkpt lat="54.786774900" lon="-2.344341600">
+ <ele>448.000000</ele>
+ <name>TP2670</name>
+</trkpt>
+<trkpt lat="54.786806600" lon="-2.344321600">
+ <ele>448.000000</ele>
+ <name>TP2671</name>
+</trkpt>
+<trkpt lat="54.786813300" lon="-2.344316600">
+ <ele>448.000000</ele>
+ <name>TP2672</name>
+</trkpt>
+<trkpt lat="54.786833300" lon="-2.344304900">
+ <ele>448.000000</ele>
+ <name>TP2673</name>
+</trkpt>
+<trkpt lat="54.786829900" lon="-2.344306600">
+ <ele>448.000000</ele>
+ <name>TP2674</name>
+</trkpt>
+<trkpt lat="54.786840000" lon="-2.344295000">
+ <ele>448.000000</ele>
+ <name>TP2675</name>
+</trkpt>
+<trkpt lat="54.786850000" lon="-2.344286600">
+ <ele>448.000000</ele>
+ <name>TP2676</name>
+</trkpt>
+<trkpt lat="54.786865000" lon="-2.344299900">
+ <ele>448.000000</ele>
+ <name>TP2677</name>
+</trkpt>
+<trkpt lat="54.786850000" lon="-2.344314900">
+ <ele>448.000000</ele>
+ <name>TP2678</name>
+</trkpt>
+<trkpt lat="54.786838300" lon="-2.344321600">
+ <ele>448.000000</ele>
+ <name>TP2679</name>
+</trkpt>
+<trkpt lat="54.786828300" lon="-2.344336600">
+ <ele>448.000000</ele>
+ <name>TP2680</name>
+</trkpt>
+<trkpt lat="54.786819900" lon="-2.344343300">
+ <ele>448.000000</ele>
+ <name>TP2681</name>
+</trkpt>
+<trkpt lat="54.786808300" lon="-2.344349900">
+ <ele>448.000000</ele>
+ <name>TP2682</name>
+</trkpt>
+<trkpt lat="54.786801600" lon="-2.344349900">
+ <ele>448.000000</ele>
+ <name>TP2683</name>
+</trkpt>
+<trkpt lat="54.786801600" lon="-2.344338300">
+ <ele>448.000000</ele>
+ <name>TP2684</name>
+</trkpt>
+<trkpt lat="54.786796600" lon="-2.344333300">
+ <ele>448.000000</ele>
+ <name>TP2685</name>
+</trkpt>
+<trkpt lat="54.786796600" lon="-2.344394900">
+ <ele>448.000000</ele>
+ <name>TP2686</name>
+</trkpt>
+<trkpt lat="54.786804900" lon="-2.344394900">
+ <ele>448.000000</ele>
+ <name>TP2687</name>
+</trkpt>
+<trkpt lat="54.786798300" lon="-2.344393300">
+ <ele>448.000000</ele>
+ <name>TP2688</name>
+</trkpt>
+<trkpt lat="54.786795000" lon="-2.344391600">
+ <ele>448.000000</ele>
+ <name>TP2689</name>
+</trkpt>
+<trkpt lat="54.786793300" lon="-2.344396600">
+ <ele>448.000000</ele>
+ <name>TP2690</name>
+</trkpt>
+<trkpt lat="54.786798300" lon="-2.344400000">
+ <ele>448.000000</ele>
+ <name>TP2691</name>
+</trkpt>
+<trkpt lat="54.786795000" lon="-2.344398300">
+ <ele>448.000000</ele>
+ <name>TP2692</name>
+</trkpt>
+<trkpt lat="54.786798300" lon="-2.344406600">
+ <ele>448.000000</ele>
+ <name>TP2693</name>
+</trkpt>
+<trkpt lat="54.786799900" lon="-2.344406600">
+ <ele>448.000000</ele>
+ <name>TP2694</name>
+</trkpt>
+<trkpt lat="54.786853300" lon="-2.344358300">
+ <ele>448.000000</ele>
+ <name>TP2695</name>
+</trkpt>
+<trkpt lat="54.786868300" lon="-2.344359900">
+ <ele>448.000000</ele>
+ <name>TP2696</name>
+</trkpt>
+<trkpt lat="54.786884900" lon="-2.344348300">
+ <ele>448.000000</ele>
+ <name>TP2697</name>
+</trkpt>
+<trkpt lat="54.786881600" lon="-2.344351600">
+ <ele>448.000000</ele>
+ <name>TP2698</name>
+</trkpt>
+<trkpt lat="54.786874900" lon="-2.344349900">
+ <ele>448.000000</ele>
+ <name>TP2699</name>
+</trkpt>
+<trkpt lat="54.786866600" lon="-2.344354900">
+ <ele>448.000000</ele>
+ <name>TP2700</name>
+</trkpt>
+<trkpt lat="54.786858300" lon="-2.344361600">
+ <ele>448.000000</ele>
+ <name>TP2701</name>
+</trkpt>
+<trkpt lat="54.786851600" lon="-2.344368300">
+ <ele>448.000000</ele>
+ <name>TP2702</name>
+</trkpt>
+<trkpt lat="54.786844900" lon="-2.344380000">
+ <ele>448.000000</ele>
+ <name>TP2703</name>
+</trkpt>
+<trkpt lat="54.786858300" lon="-2.344388300">
+ <ele>448.000000</ele>
+ <name>TP2704</name>
+</trkpt>
+<trkpt lat="54.786865000" lon="-2.344391600">
+ <ele>448.000000</ele>
+ <name>TP2705</name>
+</trkpt>
+<trkpt lat="54.786863300" lon="-2.344389900">
+ <ele>448.000000</ele>
+ <name>TP2706</name>
+</trkpt>
+<trkpt lat="54.786855000" lon="-2.344398300">
+ <ele>448.000000</ele>
+ <name>TP2707</name>
+</trkpt>
+<trkpt lat="54.786859900" lon="-2.344403300">
+ <ele>448.000000</ele>
+ <name>TP2708</name>
+</trkpt>
+<trkpt lat="54.786868300" lon="-2.344408300">
+ <ele>448.000000</ele>
+ <name>TP2709</name>
+</trkpt>
+<trkpt lat="54.786836600" lon="-2.344406600">
+ <ele>448.000000</ele>
+ <name>TP2710</name>
+</trkpt>
+<trkpt lat="54.786833300" lon="-2.344406600">
+ <ele>448.000000</ele>
+ <name>TP2711</name>
+</trkpt>
+<trkpt lat="54.786838300" lon="-2.344413300">
+ <ele>448.000000</ele>
+ <name>TP2712</name>
+</trkpt>
+<trkpt lat="54.786844900" lon="-2.344423300">
+ <ele>448.000000</ele>
+ <name>TP2713</name>
+</trkpt>
+<trkpt lat="54.786843300" lon="-2.344433300">
+ <ele>448.000000</ele>
+ <name>TP2714</name>
+</trkpt>
+<trkpt lat="54.786844900" lon="-2.344439900">
+ <ele>448.000000</ele>
+ <name>TP2715</name>
+</trkpt>
+<trkpt lat="54.786846600" lon="-2.344446600">
+ <ele>448.000000</ele>
+ <name>TP2716</name>
+</trkpt>
+<trkpt lat="54.786866600" lon="-2.344448300">
+ <ele>448.000000</ele>
+ <name>TP2717</name>
+</trkpt>
+<trkpt lat="54.786873300" lon="-2.344458300">
+ <ele>448.000000</ele>
+ <name>TP2718</name>
+</trkpt>
+<trkpt lat="54.786883300" lon="-2.344456600">
+ <ele>448.000000</ele>
+ <name>TP2719</name>
+</trkpt>
+<trkpt lat="54.786889900" lon="-2.344458300">
+ <ele>448.000000</ele>
+ <name>TP2720</name>
+</trkpt>
+<trkpt lat="54.786901600" lon="-2.344458300">
+ <ele>448.000000</ele>
+ <name>TP2721</name>
+</trkpt>
+<trkpt lat="54.786936600" lon="-2.344446600">
+ <ele>448.000000</ele>
+ <name>TP2722</name>
+</trkpt>
+<trkpt lat="54.786954900" lon="-2.344451600">
+ <ele>448.000000</ele>
+ <name>TP2723</name>
+</trkpt>
+<trkpt lat="54.786950000" lon="-2.344463300">
+ <ele>448.000000</ele>
+ <name>TP2724</name>
+</trkpt>
+<trkpt lat="54.786965000" lon="-2.344463300">
+ <ele>448.000000</ele>
+ <name>TP2725</name>
+</trkpt>
+<trkpt lat="54.786978300" lon="-2.344464900">
+ <ele>448.000000</ele>
+ <name>TP2726</name>
+</trkpt>
+<trkpt lat="54.786986600" lon="-2.344463300">
+ <ele>448.000000</ele>
+ <name>TP2727</name>
+</trkpt>
+<trkpt lat="54.786980000" lon="-2.344459900">
+ <ele>448.000000</ele>
+ <name>TP2728</name>
+</trkpt>
+<trkpt lat="54.787116600" lon="-2.344249900">
+ <ele>448.000000</ele>
+ <name>TP2729</name>
+</trkpt>
+<trkpt lat="54.787076600" lon="-2.344279900">
+ <ele>448.000000</ele>
+ <name>TP2730</name>
+</trkpt>
+<trkpt lat="54.787111600" lon="-2.344303300">
+ <ele>448.000000</ele>
+ <name>TP2731</name>
+</trkpt>
+<trkpt lat="54.787098300" lon="-2.344321600">
+ <ele>448.000000</ele>
+ <name>TP2732</name>
+</trkpt>
+<trkpt lat="54.787094900" lon="-2.344323300">
+ <ele>448.000000</ele>
+ <name>TP2733</name>
+</trkpt>
+<trkpt lat="54.787093300" lon="-2.344323300">
+ <ele>448.000000</ele>
+ <name>TP2734</name>
+</trkpt>
+<trkpt lat="54.787083300" lon="-2.344324900">
+ <ele>448.000000</ele>
+ <name>TP2735</name>
+</trkpt>
+<trkpt lat="54.787076600" lon="-2.344326600">
+ <ele>448.000000</ele>
+ <name>TP2736</name>
+</trkpt>
+<trkpt lat="54.787069900" lon="-2.344324900">
+ <ele>448.000000</ele>
+ <name>TP2737</name>
+</trkpt>
+<trkpt lat="54.787063300" lon="-2.344319900">
+ <ele>448.000000</ele>
+ <name>TP2738</name>
+</trkpt>
+<trkpt lat="54.787059900" lon="-2.344313300">
+ <ele>448.000000</ele>
+ <name>TP2739</name>
+</trkpt>
+<trkpt lat="54.787054900" lon="-2.344314900">
+ <ele>448.000000</ele>
+ <name>TP2740</name>
+</trkpt>
+<trkpt lat="54.787046600" lon="-2.344318300">
+ <ele>448.000000</ele>
+ <name>TP2741</name>
+</trkpt>
+<trkpt lat="54.787043300" lon="-2.344313300">
+ <ele>448.000000</ele>
+ <name>TP2742</name>
+</trkpt>
+<trkpt lat="54.787036600" lon="-2.344310000">
+ <ele>448.000000</ele>
+ <name>TP2743</name>
+</trkpt>
+<trkpt lat="54.787023300" lon="-2.344316600">
+ <ele>448.000000</ele>
+ <name>TP2744</name>
+</trkpt>
+<trkpt lat="54.786999900" lon="-2.344336600">
+ <ele>448.000000</ele>
+ <name>TP2745</name>
+</trkpt>
+<trkpt lat="54.786974900" lon="-2.344339900">
+ <ele>448.000000</ele>
+ <name>TP2746</name>
+</trkpt>
+<trkpt lat="54.786953300" lon="-2.344351600">
+ <ele>448.000000</ele>
+ <name>TP2747</name>
+</trkpt>
+<trkpt lat="54.786925000" lon="-2.344369900">
+ <ele>448.000000</ele>
+ <name>TP2748</name>
+</trkpt>
+<trkpt lat="54.787488300" lon="-2.343711600">
+ <ele>448.000000</ele>
+ <name>TP2749</name>
+</trkpt>
+<trkpt lat="54.787458300" lon="-2.343744900">
+ <ele>448.000000</ele>
+ <name>TP2750</name>
+</trkpt>
+<trkpt lat="54.787451600" lon="-2.343755000">
+ <ele>448.000000</ele>
+ <name>TP2751</name>
+</trkpt>
+<trkpt lat="54.787413300" lon="-2.343793300">
+ <ele>448.000000</ele>
+ <name>TP2752</name>
+</trkpt>
+<trkpt lat="54.787436600" lon="-2.343773300">
+ <ele>448.000000</ele>
+ <name>TP2753</name>
+</trkpt>
+<trkpt lat="54.787385000" lon="-2.343816600">
+ <ele>448.000000</ele>
+ <name>TP2754</name>
+</trkpt>
+<trkpt lat="54.787366600" lon="-2.343818300">
+ <ele>448.000000</ele>
+ <name>TP2755</name>
+</trkpt>
+<trkpt lat="54.787328200" lon="-2.343838300">
+ <ele>448.000000</ele>
+ <name>TP2756</name>
+</trkpt>
+<trkpt lat="54.787304900" lon="-2.343844900">
+ <ele>448.000000</ele>
+ <name>TP2757</name>
+</trkpt>
+<trkpt lat="54.787275000" lon="-2.343878300">
+ <ele>448.000000</ele>
+ <name>TP2758</name>
+</trkpt>
+<trkpt lat="54.787263300" lon="-2.343884900">
+ <ele>448.000000</ele>
+ <name>TP2759</name>
+</trkpt>
+<trkpt lat="54.787271600" lon="-2.343875000">
+ <ele>448.000000</ele>
+ <name>TP2760</name>
+</trkpt>
+<trkpt lat="54.787258200" lon="-2.343879900">
+ <ele>448.000000</ele>
+ <name>TP2761</name>
+</trkpt>
+<trkpt lat="54.787256600" lon="-2.343876600">
+ <ele>448.000000</ele>
+ <name>TP2762</name>
+</trkpt>
+<trkpt lat="54.787261600" lon="-2.343871600">
+ <ele>448.000000</ele>
+ <name>TP2763</name>
+</trkpt>
+<trkpt lat="54.787286600" lon="-2.343851600">
+ <ele>448.000000</ele>
+ <name>TP2764</name>
+</trkpt>
+<trkpt lat="54.787321600" lon="-2.343821600">
+ <ele>448.000000</ele>
+ <name>TP2765</name>
+</trkpt>
+<trkpt lat="54.787336600" lon="-2.343805000">
+ <ele>448.000000</ele>
+ <name>TP2766</name>
+</trkpt>
+<trkpt lat="54.787326600" lon="-2.343816600">
+ <ele>448.000000</ele>
+ <name>TP2767</name>
+</trkpt>
+<trkpt lat="54.787324900" lon="-2.343828300">
+ <ele>448.000000</ele>
+ <name>TP2768</name>
+</trkpt>
+<trkpt lat="54.787279900" lon="-2.343904900">
+ <ele>448.000000</ele>
+ <name>TP2769</name>
+</trkpt>
+<trkpt lat="54.787268300" lon="-2.343916600">
+ <ele>448.000000</ele>
+ <name>TP2770</name>
+</trkpt>
+<trkpt lat="54.787248300" lon="-2.343941600">
+ <ele>448.000000</ele>
+ <name>TP2771</name>
+</trkpt>
+<trkpt lat="54.787239900" lon="-2.343949900">
+ <ele>448.000000</ele>
+ <name>TP2772</name>
+</trkpt>
+<trkpt lat="54.787193300" lon="-2.344013300">
+ <ele>448.000000</ele>
+ <name>TP2773</name>
+</trkpt>
+<trkpt lat="54.787105000" lon="-2.344149900">
+ <ele>448.000000</ele>
+ <name>TP2774</name>
+</trkpt>
+<trkpt lat="54.787061600" lon="-2.344206600">
+ <ele>448.000000</ele>
+ <name>TP2775</name>
+</trkpt>
+<trkpt lat="54.787039900" lon="-2.344234900">
+ <ele>448.000000</ele>
+ <name>TP2776</name>
+</trkpt>
+<trkpt lat="54.787021600" lon="-2.344263300">
+ <ele>448.000000</ele>
+ <name>TP2777</name>
+</trkpt>
+<trkpt lat="54.787006600" lon="-2.344281600">
+ <ele>448.000000</ele>
+ <name>TP2778</name>
+</trkpt>
+<trkpt lat="54.787005000" lon="-2.344293300">
+ <ele>448.000000</ele>
+ <name>TP2779</name>
+</trkpt>
+<trkpt lat="54.786998300" lon="-2.344308300">
+ <ele>448.000000</ele>
+ <name>TP2780</name>
+</trkpt>
+<trkpt lat="54.786998300" lon="-2.344324900">
+ <ele>448.000000</ele>
+ <name>TP2781</name>
+</trkpt>
+<trkpt lat="54.787023300" lon="-2.344343300">
+ <ele>448.000000</ele>
+ <name>TP2782</name>
+</trkpt>
+<trkpt lat="54.787008300" lon="-2.344408300">
+ <ele>448.000000</ele>
+ <name>TP2783</name>
+</trkpt>
+<trkpt lat="54.787014900" lon="-2.344389900">
+ <ele>448.000000</ele>
+ <name>TP2784</name>
+</trkpt>
+<trkpt lat="54.787018300" lon="-2.344386600">
+ <ele>448.000000</ele>
+ <name>TP2785</name>
+</trkpt>
+<trkpt lat="54.787020000" lon="-2.344386600">
+ <ele>448.000000</ele>
+ <name>TP2786</name>
+</trkpt>
+<trkpt lat="54.787024900" lon="-2.344376600">
+ <ele>448.000000</ele>
+ <name>TP2787</name>
+</trkpt>
+<trkpt lat="54.787026600" lon="-2.344366600">
+ <ele>448.000000</ele>
+ <name>TP2788</name>
+</trkpt>
+<trkpt lat="54.787031600" lon="-2.344358300">
+ <ele>448.000000</ele>
+ <name>TP2789</name>
+</trkpt>
+<trkpt lat="54.787038300" lon="-2.344349900">
+ <ele>448.000000</ele>
+ <name>TP2790</name>
+</trkpt>
+<trkpt lat="54.787054900" lon="-2.344326600">
+ <ele>448.000000</ele>
+ <name>TP2791</name>
+</trkpt>
+<trkpt lat="54.787054900" lon="-2.344313300">
+ <ele>448.000000</ele>
+ <name>TP2792</name>
+</trkpt>
+<trkpt lat="54.787078300" lon="-2.344286600">
+ <ele>448.000000</ele>
+ <name>TP2793</name>
+</trkpt>
+<trkpt lat="54.787166600" lon="-2.344105000">
+ <ele>448.000000</ele>
+ <name>TP2794</name>
+</trkpt>
+<trkpt lat="54.787175000" lon="-2.344106600">
+ <ele>448.000000</ele>
+ <name>TP2795</name>
+</trkpt>
+<trkpt lat="54.787151600" lon="-2.344121600">
+ <ele>448.000000</ele>
+ <name>TP2796</name>
+</trkpt>
+<trkpt lat="54.787154900" lon="-2.344114900">
+ <ele>448.000000</ele>
+ <name>TP2797</name>
+</trkpt>
+<trkpt lat="54.787221600" lon="-2.344053300">
+ <ele>448.000000</ele>
+ <name>TP2798</name>
+</trkpt>
+<trkpt lat="54.787233300" lon="-2.344009900">
+ <ele>449.000000</ele>
+ <name>TP2799</name>
+</trkpt>
+<trkpt lat="54.787245000" lon="-2.344004900">
+ <ele>449.000000</ele>
+ <name>TP2800</name>
+</trkpt>
+<trkpt lat="54.787223300" lon="-2.344033300">
+ <ele>449.000000</ele>
+ <name>TP2801</name>
+</trkpt>
+<trkpt lat="54.787199900" lon="-2.344046600">
+ <ele>449.000000</ele>
+ <name>TP2802</name>
+</trkpt>
+<trkpt lat="54.787181600" lon="-2.344054900">
+ <ele>449.000000</ele>
+ <name>TP2803</name>
+</trkpt>
+<trkpt lat="54.787154900" lon="-2.344078300">
+ <ele>449.000000</ele>
+ <name>TP2804</name>
+</trkpt>
+<trkpt lat="54.787129900" lon="-2.344093300">
+ <ele>449.000000</ele>
+ <name>TP2805</name>
+</trkpt>
+<trkpt lat="54.787111600" lon="-2.344100000">
+ <ele>449.000000</ele>
+ <name>TP2806</name>
+</trkpt>
+<trkpt lat="54.787073300" lon="-2.344124900">
+ <ele>449.000000</ele>
+ <name>TP2807</name>
+</trkpt>
+<trkpt lat="54.786896600" lon="-2.344283300">
+ <ele>449.000000</ele>
+ <name>TP2808</name>
+</trkpt>
+<trkpt lat="54.786846600" lon="-2.344323300">
+ <ele>449.000000</ele>
+ <name>TP2809</name>
+</trkpt>
+<trkpt lat="54.786828300" lon="-2.344319900">
+ <ele>449.000000</ele>
+ <name>TP2810</name>
+</trkpt>
+<trkpt lat="54.786821600" lon="-2.344321600">
+ <ele>449.000000</ele>
+ <name>TP2811</name>
+</trkpt>
+<trkpt lat="54.786799900" lon="-2.344336600">
+ <ele>449.000000</ele>
+ <name>TP2812</name>
+</trkpt>
+<trkpt lat="54.786728300" lon="-2.344423300">
+ <ele>449.000000</ele>
+ <name>TP2813</name>
+</trkpt>
+<trkpt lat="54.786615000" lon="-2.344485000">
+ <ele>449.000000</ele>
+ <name>TP2814</name>
+</trkpt>
+<trkpt lat="54.786568300" lon="-2.344503300">
+ <ele>449.000000</ele>
+ <name>TP2815</name>
+</trkpt>
+<trkpt lat="54.786548300" lon="-2.344516600">
+ <ele>449.000000</ele>
+ <name>TP2816</name>
+</trkpt>
+<trkpt lat="54.786530000" lon="-2.344496600">
+ <ele>449.000000</ele>
+ <name>TP2817</name>
+</trkpt>
+<trkpt lat="54.786533300" lon="-2.344493300">
+ <ele>449.000000</ele>
+ <name>TP2818</name>
+</trkpt>
+<trkpt lat="54.786585000" lon="-2.344388300">
+ <ele>449.000000</ele>
+ <name>TP2819</name>
+</trkpt>
+<trkpt lat="54.786901600" lon="-2.344310000">
+ <ele>449.000000</ele>
+ <name>TP2820</name>
+</trkpt>
+<trkpt lat="54.786916600" lon="-2.344383300">
+ <ele>449.000000</ele>
+ <name>TP2821</name>
+</trkpt>
+<trkpt lat="54.786961600" lon="-2.344349900">
+ <ele>449.000000</ele>
+ <name>TP2822</name>
+</trkpt>
+<trkpt lat="54.786976600" lon="-2.344345000">
+ <ele>449.000000</ele>
+ <name>TP2823</name>
+</trkpt>
+<trkpt lat="54.786995000" lon="-2.344339900">
+ <ele>449.000000</ele>
+ <name>TP2824</name>
+</trkpt>
+<trkpt lat="54.787013300" lon="-2.344331600">
+ <ele>449.000000</ele>
+ <name>TP2825</name>
+</trkpt>
+<trkpt lat="54.787023300" lon="-2.344324900">
+ <ele>449.000000</ele>
+ <name>TP2826</name>
+</trkpt>
+<trkpt lat="54.787038300" lon="-2.344326600">
+ <ele>449.000000</ele>
+ <name>TP2827</name>
+</trkpt>
+<trkpt lat="54.787029900" lon="-2.344316600">
+ <ele>449.000000</ele>
+ <name>TP2828</name>
+</trkpt>
+<trkpt lat="54.786974900" lon="-2.344296600">
+ <ele>449.000000</ele>
+ <name>TP2829</name>
+</trkpt>
+<trkpt lat="54.786959900" lon="-2.344304900">
+ <ele>449.000000</ele>
+ <name>TP2830</name>
+</trkpt>
+<trkpt lat="54.786956600" lon="-2.344308300">
+ <ele>449.000000</ele>
+ <name>TP2831</name>
+</trkpt>
+<trkpt lat="54.786965000" lon="-2.344316600">
+ <ele>449.000000</ele>
+ <name>TP2832</name>
+</trkpt>
+<trkpt lat="54.786961600" lon="-2.344328300">
+ <ele>449.000000</ele>
+ <name>TP2833</name>
+</trkpt>
+<trkpt lat="54.786956600" lon="-2.344334900">
+ <ele>449.000000</ele>
+ <name>TP2834</name>
+</trkpt>
+<trkpt lat="54.786959900" lon="-2.344326600">
+ <ele>449.000000</ele>
+ <name>TP2835</name>
+</trkpt>
+<trkpt lat="54.786958300" lon="-2.344324900">
+ <ele>449.000000</ele>
+ <name>TP2836</name>
+</trkpt>
+<trkpt lat="54.786958300" lon="-2.344324900">
+ <ele>449.000000</ele>
+ <name>TP2837</name>
+</trkpt>
+<trkpt lat="54.786961600" lon="-2.344306600">
+ <ele>449.000000</ele>
+ <name>TP2838</name>
+</trkpt>
+<trkpt lat="54.786961600" lon="-2.344310000">
+ <ele>449.000000</ele>
+ <name>TP2839</name>
+</trkpt>
+<trkpt lat="54.786965000" lon="-2.344314900">
+ <ele>449.000000</ele>
+ <name>TP2840</name>
+</trkpt>
+<trkpt lat="54.786968300" lon="-2.344319900">
+ <ele>449.000000</ele>
+ <name>TP2841</name>
+</trkpt>
+<trkpt lat="54.786971600" lon="-2.344323300">
+ <ele>449.000000</ele>
+ <name>TP2842</name>
+</trkpt>
+<trkpt lat="54.786978300" lon="-2.344328300">
+ <ele>449.000000</ele>
+ <name>TP2843</name>
+</trkpt>
+<trkpt lat="54.786980000" lon="-2.344334900">
+ <ele>449.000000</ele>
+ <name>TP2844</name>
+</trkpt>
+<trkpt lat="54.786981600" lon="-2.344336600">
+ <ele>449.000000</ele>
+ <name>TP2845</name>
+</trkpt>
+<trkpt lat="54.786986600" lon="-2.344339900">
+ <ele>449.000000</ele>
+ <name>TP2846</name>
+</trkpt>
+<trkpt lat="54.786988300" lon="-2.344339900">
+ <ele>449.000000</ele>
+ <name>TP2847</name>
+</trkpt>
+<trkpt lat="54.786989900" lon="-2.344343300">
+ <ele>449.000000</ele>
+ <name>TP2848</name>
+</trkpt>
+<trkpt lat="54.786993300" lon="-2.344339900">
+ <ele>449.000000</ele>
+ <name>TP2849</name>
+</trkpt>
+<trkpt lat="54.786996600" lon="-2.344338300">
+ <ele>449.000000</ele>
+ <name>TP2850</name>
+</trkpt>
+<trkpt lat="54.786999900" lon="-2.344333300">
+ <ele>449.000000</ele>
+ <name>TP2851</name>
+</trkpt>
+<trkpt lat="54.787001600" lon="-2.344334900">
+ <ele>449.000000</ele>
+ <name>TP2852</name>
+</trkpt>
+<trkpt lat="54.787001600" lon="-2.344323300">
+ <ele>449.000000</ele>
+ <name>TP2853</name>
+</trkpt>
+<trkpt lat="54.787006600" lon="-2.344321600">
+ <ele>449.000000</ele>
+ <name>TP2854</name>
+</trkpt>
+<trkpt lat="54.787009900" lon="-2.344319900">
+ <ele>449.000000</ele>
+ <name>TP2855</name>
+</trkpt>
+<trkpt lat="54.787013300" lon="-2.344319900">
+ <ele>449.000000</ele>
+ <name>TP2856</name>
+</trkpt>
+<trkpt lat="54.787014900" lon="-2.344319900">
+ <ele>449.000000</ele>
+ <name>TP2857</name>
+</trkpt>
+<trkpt lat="54.787021600" lon="-2.344326600">
+ <ele>449.000000</ele>
+ <name>TP2858</name>
+</trkpt>
+<trkpt lat="54.787036600" lon="-2.344328300">
+ <ele>449.000000</ele>
+ <name>TP2859</name>
+</trkpt>
+<trkpt lat="54.787044900" lon="-2.344321600">
+ <ele>449.000000</ele>
+ <name>TP2860</name>
+</trkpt>
+<trkpt lat="54.787046600" lon="-2.344314900">
+ <ele>449.000000</ele>
+ <name>TP2861</name>
+</trkpt>
+<trkpt lat="54.787031600" lon="-2.344310000">
+ <ele>449.000000</ele>
+ <name>TP2862</name>
+</trkpt>
+<trkpt lat="54.787043300" lon="-2.344310000">
+ <ele>449.000000</ele>
+ <name>TP2863</name>
+</trkpt>
+<trkpt lat="54.787048300" lon="-2.344304900">
+ <ele>449.000000</ele>
+ <name>TP2864</name>
+</trkpt>
+<trkpt lat="54.787053300" lon="-2.344295000">
+ <ele>449.000000</ele>
+ <name>TP2865</name>
+</trkpt>
+<trkpt lat="54.787065000" lon="-2.344289900">
+ <ele>449.000000</ele>
+ <name>TP2866</name>
+</trkpt>
+<trkpt lat="54.787088300" lon="-2.344291600">
+ <ele>449.000000</ele>
+ <name>TP2867</name>
+</trkpt>
+<trkpt lat="54.787098300" lon="-2.344271600">
+ <ele>449.000000</ele>
+ <name>TP2868</name>
+</trkpt>
+<trkpt lat="54.787113300" lon="-2.344273300">
+ <ele>449.000000</ele>
+ <name>TP2869</name>
+</trkpt>
+<trkpt lat="54.787044900" lon="-2.344278300">
+ <ele>449.000000</ele>
+ <name>TP2870</name>
+</trkpt>
+<trkpt lat="54.787031600" lon="-2.344273300">
+ <ele>449.000000</ele>
+ <name>TP2871</name>
+</trkpt>
+<trkpt lat="54.787035000" lon="-2.344275000">
+ <ele>449.000000</ele>
+ <name>TP2872</name>
+</trkpt>
+<trkpt lat="54.787005000" lon="-2.344264900">
+ <ele>449.000000</ele>
+ <name>TP2873</name>
+</trkpt>
+<trkpt lat="54.786981600" lon="-2.344260000">
+ <ele>448.000000</ele>
+ <name>TP2874</name>
+</trkpt>
+<trkpt lat="54.786973300" lon="-2.344258300">
+ <ele>448.000000</ele>
+ <name>TP2875</name>
+</trkpt>
+<trkpt lat="54.786825000" lon="-2.344219900">
+ <ele>448.000000</ele>
+ <name>TP2876</name>
+</trkpt>
+<trkpt lat="54.786811600" lon="-2.344216600">
+ <ele>448.000000</ele>
+ <name>TP2877</name>
+</trkpt>
+<trkpt lat="54.786764900" lon="-2.344205000">
+ <ele>448.000000</ele>
+ <name>TP2878</name>
+</trkpt>
+<trkpt lat="54.786743300" lon="-2.344199900">
+ <ele>448.000000</ele>
+ <name>TP2879</name>
+</trkpt>
+<trkpt lat="54.786681600" lon="-2.344183300">
+ <ele>448.000000</ele>
+ <name>TP2880</name>
+</trkpt>
+<trkpt lat="54.786646600" lon="-2.344174900">
+ <ele>448.000000</ele>
+ <name>TP2881</name>
+</trkpt>
+<trkpt lat="54.786734900" lon="-2.344205000">
+ <ele>448.000000</ele>
+ <name>TP2882</name>
+</trkpt>
+<trkpt lat="54.786604900" lon="-2.344193300">
+ <ele>448.000000</ele>
+ <name>TP2883</name>
+</trkpt>
+<trkpt lat="54.786631600" lon="-2.344201600">
+ <ele>448.000000</ele>
+ <name>TP2884</name>
+</trkpt>
+<trkpt lat="54.786674900" lon="-2.344211600">
+ <ele>448.000000</ele>
+ <name>TP2885</name>
+</trkpt>
+<trkpt lat="54.786715000" lon="-2.344223300">
+ <ele>448.000000</ele>
+ <name>TP2886</name>
+</trkpt>
+<trkpt lat="54.786744900" lon="-2.344231600">
+ <ele>448.000000</ele>
+ <name>TP2887</name>
+</trkpt>
+<trkpt lat="54.786776600" lon="-2.344240000">
+ <ele>448.000000</ele>
+ <name>TP2888</name>
+</trkpt>
+<trkpt lat="54.786803300" lon="-2.344246600">
+ <ele>448.000000</ele>
+ <name>TP2889</name>
+</trkpt>
+<trkpt lat="54.786825000" lon="-2.344251600">
+ <ele>448.000000</ele>
+ <name>TP2890</name>
+</trkpt>
+<trkpt lat="54.786838300" lon="-2.344256600">
+ <ele>448.000000</ele>
+ <name>TP2891</name>
+</trkpt>
+<trkpt lat="54.786851600" lon="-2.344260000">
+ <ele>448.000000</ele>
+ <name>TP2892</name>
+</trkpt>
+<trkpt lat="54.786866600" lon="-2.344263300">
+ <ele>448.000000</ele>
+ <name>TP2893</name>
+</trkpt>
+<trkpt lat="54.786874900" lon="-2.344266600">
+ <ele>448.000000</ele>
+ <name>TP2894</name>
+</trkpt>
+<trkpt lat="54.786889900" lon="-2.344271600">
+ <ele>448.000000</ele>
+ <name>TP2895</name>
+</trkpt>
+<trkpt lat="54.786908300" lon="-2.344276600">
+ <ele>448.000000</ele>
+ <name>TP2896</name>
+</trkpt>
+<trkpt lat="54.786923300" lon="-2.344281600">
+ <ele>448.000000</ele>
+ <name>TP2897</name>
+</trkpt>
+<trkpt lat="54.786950000" lon="-2.344289900">
+ <ele>448.000000</ele>
+ <name>TP2898</name>
+</trkpt>
+<trkpt lat="54.786958300" lon="-2.344293300">
+ <ele>448.000000</ele>
+ <name>TP2899</name>
+</trkpt>
+<trkpt lat="54.786958300" lon="-2.344295000">
+ <ele>448.000000</ele>
+ <name>TP2900</name>
+</trkpt>
+<trkpt lat="54.786946600" lon="-2.344293300">
+ <ele>448.000000</ele>
+ <name>TP2901</name>
+</trkpt>
+<trkpt lat="54.786573300" lon="-2.344503300">
+ <ele>448.000000</ele>
+ <name>TP2902</name>
+</trkpt>
+<trkpt lat="54.786518300" lon="-2.344488300">
+ <ele>448.000000</ele>
+ <name>TP2903</name>
+</trkpt>
+<trkpt lat="54.786509900" lon="-2.344498300">
+ <ele>448.000000</ele>
+ <name>TP2904</name>
+</trkpt>
+<trkpt lat="54.786490000" lon="-2.344513300">
+ <ele>448.000000</ele>
+ <name>TP2905</name>
+</trkpt>
+<trkpt lat="54.786491600" lon="-2.344509900">
+ <ele>448.000000</ele>
+ <name>TP2906</name>
+</trkpt>
+<trkpt lat="54.786416600" lon="-2.344511600">
+ <ele>448.000000</ele>
+ <name>TP2907</name>
+</trkpt>
+<trkpt lat="54.786399900" lon="-2.344509900">
+ <ele>448.000000</ele>
+ <name>TP2908</name>
+</trkpt>
+<trkpt lat="54.786453300" lon="-2.344508300">
+ <ele>448.000000</ele>
+ <name>TP2909</name>
+</trkpt>
+<trkpt lat="54.786466600" lon="-2.344520000">
+ <ele>448.000000</ele>
+ <name>TP2910</name>
+</trkpt>
+<trkpt lat="54.786813300" lon="-2.344485000">
+ <ele>448.000000</ele>
+ <name>TP2911</name>
+</trkpt>
+<trkpt lat="54.786818300" lon="-2.344501600">
+ <ele>448.000000</ele>
+ <name>TP2912</name>
+</trkpt>
+<trkpt lat="54.786819900" lon="-2.344491600">
+ <ele>448.000000</ele>
+ <name>TP2913</name>
+</trkpt>
+<trkpt lat="54.786969900" lon="-2.344373300">
+ <ele>448.000000</ele>
+ <name>TP2914</name>
+</trkpt>
+<trkpt lat="54.787023300" lon="-2.344295000">
+ <ele>448.000000</ele>
+ <name>TP2915</name>
+</trkpt>
+<trkpt lat="54.787018300" lon="-2.344298300">
+ <ele>448.000000</ele>
+ <name>TP2916</name>
+</trkpt>
+<trkpt lat="54.787013300" lon="-2.344301600">
+ <ele>448.000000</ele>
+ <name>TP2917</name>
+</trkpt>
+<trkpt lat="54.787008300" lon="-2.344304900">
+ <ele>448.000000</ele>
+ <name>TP2918</name>
+</trkpt>
+<trkpt lat="54.787006600" lon="-2.344310000">
+ <ele>448.000000</ele>
+ <name>TP2919</name>
+</trkpt>
+<trkpt lat="54.787003300" lon="-2.344314900">
+ <ele>448.000000</ele>
+ <name>TP2920</name>
+</trkpt>
+<trkpt lat="54.786999900" lon="-2.344319900">
+ <ele>448.000000</ele>
+ <name>TP2921</name>
+</trkpt>
+<trkpt lat="54.786999900" lon="-2.344330000">
+ <ele>448.000000</ele>
+ <name>TP2922</name>
+</trkpt>
+<trkpt lat="54.786998300" lon="-2.344334900">
+ <ele>448.000000</ele>
+ <name>TP2923</name>
+</trkpt>
+<trkpt lat="54.786996600" lon="-2.344341600">
+ <ele>448.000000</ele>
+ <name>TP2924</name>
+</trkpt>
+<trkpt lat="54.786991600" lon="-2.344351600">
+ <ele>448.000000</ele>
+ <name>TP2925</name>
+</trkpt>
+<trkpt lat="54.786991600" lon="-2.344358300">
+ <ele>448.000000</ele>
+ <name>TP2926</name>
+</trkpt>
+<trkpt lat="54.786993300" lon="-2.344366600">
+ <ele>448.000000</ele>
+ <name>TP2927</name>
+</trkpt>
+<trkpt lat="54.786991600" lon="-2.344378300">
+ <ele>448.000000</ele>
+ <name>TP2928</name>
+</trkpt>
+<trkpt lat="54.786999900" lon="-2.344383300">
+ <ele>448.000000</ele>
+ <name>TP2929</name>
+</trkpt>
+<trkpt lat="54.786999900" lon="-2.344386600">
+ <ele>448.000000</ele>
+ <name>TP2930</name>
+</trkpt>
+<trkpt lat="54.786999900" lon="-2.344394900">
+ <ele>448.000000</ele>
+ <name>TP2931</name>
+</trkpt>
+<trkpt lat="54.786995000" lon="-2.344398300">
+ <ele>448.000000</ele>
+ <name>TP2932</name>
+</trkpt>
+<trkpt lat="54.786989900" lon="-2.344403300">
+ <ele>448.000000</ele>
+ <name>TP2933</name>
+</trkpt>
+<trkpt lat="54.787005000" lon="-2.344408300">
+ <ele>448.000000</ele>
+ <name>TP2934</name>
+</trkpt>
+<trkpt lat="54.786999900" lon="-2.344415000">
+ <ele>448.000000</ele>
+ <name>TP2935</name>
+</trkpt>
+<trkpt lat="54.786980000" lon="-2.344429900">
+ <ele>448.000000</ele>
+ <name>TP2936</name>
+</trkpt>
+<trkpt lat="54.786973300" lon="-2.344435000">
+ <ele>448.000000</ele>
+ <name>TP2937</name>
+</trkpt>
+<trkpt lat="54.786980000" lon="-2.344421600">
+ <ele>448.000000</ele>
+ <name>TP2938</name>
+</trkpt>
+<trkpt lat="54.786973300" lon="-2.344396600">
+ <ele>448.000000</ele>
+ <name>TP2939</name>
+</trkpt>
+<trkpt lat="54.786925000" lon="-2.344346600">
+ <ele>448.000000</ele>
+ <name>TP2940</name>
+</trkpt>
+<trkpt lat="54.786999900" lon="-2.344295000">
+ <ele>448.000000</ele>
+ <name>TP2941</name>
+</trkpt>
+<trkpt lat="54.786978300" lon="-2.344263300">
+ <ele>448.000000</ele>
+ <name>TP2942</name>
+</trkpt>
+<trkpt lat="54.786978300" lon="-2.344249900">
+ <ele>448.000000</ele>
+ <name>TP2943</name>
+</trkpt>
+<trkpt lat="54.786981600" lon="-2.344233300">
+ <ele>448.000000</ele>
+ <name>TP2944</name>
+</trkpt>
+<trkpt lat="54.786980000" lon="-2.344226600">
+ <ele>448.000000</ele>
+ <name>TP2945</name>
+</trkpt>
+<trkpt lat="54.786989900" lon="-2.344211600">
+ <ele>448.000000</ele>
+ <name>TP2946</name>
+</trkpt>
+<trkpt lat="54.786993300" lon="-2.344194900">
+ <ele>448.000000</ele>
+ <name>TP2947</name>
+</trkpt>
+<trkpt lat="54.786916600" lon="-2.344543300">
+ <ele>448.000000</ele>
+ <name>TP2948</name>
+</trkpt>
+<trkpt lat="54.786939900" lon="-2.344499900">
+ <ele>448.000000</ele>
+ <name>TP2949</name>
+</trkpt>
+<trkpt lat="54.787061600" lon="-2.344319900">
+ <ele>448.000000</ele>
+ <name>TP2950</name>
+</trkpt>
+<trkpt lat="54.787018300" lon="-2.344394900">
+ <ele>448.000000</ele>
+ <name>TP2951</name>
+</trkpt>
+<trkpt lat="54.787059900" lon="-2.344278300">
+ <ele>448.000000</ele>
+ <name>TP2952</name>
+</trkpt>
+<trkpt lat="54.787044900" lon="-2.344236600">
+ <ele>448.000000</ele>
+ <name>TP2953</name>
+</trkpt>
+<trkpt lat="54.787043300" lon="-2.344238300">
+ <ele>448.000000</ele>
+ <name>TP2954</name>
+</trkpt>
+<trkpt lat="54.787036600" lon="-2.344244900">
+ <ele>448.000000</ele>
+ <name>TP2955</name>
+</trkpt>
+<trkpt lat="54.787033200" lon="-2.344219900">
+ <ele>448.000000</ele>
+ <name>TP2956</name>
+</trkpt>
+<trkpt lat="54.787033200" lon="-2.344286600">
+ <ele>448.000000</ele>
+ <name>TP2957</name>
+</trkpt>
+<trkpt lat="54.787011600" lon="-2.344464900">
+ <ele>448.000000</ele>
+ <name>TP2958</name>
+</trkpt>
+<trkpt lat="54.786995000" lon="-2.344448300">
+ <ele>448.000000</ele>
+ <name>TP2959</name>
+</trkpt>
+<trkpt lat="54.786989900" lon="-2.344454900">
+ <ele>448.000000</ele>
+ <name>TP2960</name>
+</trkpt>
+<trkpt lat="54.786998300" lon="-2.344453300">
+ <ele>448.000000</ele>
+ <name>TP2961</name>
+</trkpt>
+<trkpt lat="54.786991600" lon="-2.344450000">
+ <ele>448.000000</ele>
+ <name>TP2962</name>
+</trkpt>
+<trkpt lat="54.786989900" lon="-2.344435000">
+ <ele>448.000000</ele>
+ <name>TP2963</name>
+</trkpt>
+<trkpt lat="54.786961600" lon="-2.344438300">
+ <ele>448.000000</ele>
+ <name>TP2964</name>
+</trkpt>
+<trkpt lat="54.786951600" lon="-2.344464900">
+ <ele>448.000000</ele>
+ <name>TP2965</name>
+</trkpt>
+<trkpt lat="54.786941600" lon="-2.344494900">
+ <ele>448.000000</ele>
+ <name>TP2966</name>
+</trkpt>
+<trkpt lat="54.786950000" lon="-2.344534900">
+ <ele>448.000000</ele>
+ <name>TP2967</name>
+</trkpt>
+<trkpt lat="54.786963200" lon="-2.344456600">
+ <ele>448.000000</ele>
+ <name>TP2968</name>
+</trkpt>
+<trkpt lat="54.786965000" lon="-2.344429900">
+ <ele>448.000000</ele>
+ <name>TP2969</name>
+</trkpt>
+<trkpt lat="54.786966600" lon="-2.344424900">
+ <ele>448.000000</ele>
+ <name>TP2970</name>
+</trkpt>
+<trkpt lat="54.786966600" lon="-2.344415000">
+ <ele>448.000000</ele>
+ <name>TP2971</name>
+</trkpt>
+<trkpt lat="54.786963200" lon="-2.344401600">
+ <ele>448.000000</ele>
+ <name>TP2972</name>
+</trkpt>
+<trkpt lat="54.786965000" lon="-2.344384900">
+ <ele>448.000000</ele>
+ <name>TP2973</name>
+</trkpt>
+<trkpt lat="54.786968300" lon="-2.344381600">
+ <ele>448.000000</ele>
+ <name>TP2974</name>
+</trkpt>
+<trkpt lat="54.786969900" lon="-2.344376600">
+ <ele>448.000000</ele>
+ <name>TP2975</name>
+</trkpt>
+<trkpt lat="54.786966600" lon="-2.344363300">
+ <ele>448.000000</ele>
+ <name>TP2976</name>
+</trkpt>
+<trkpt lat="54.786966600" lon="-2.344363300">
+ <ele>448.000000</ele>
+ <name>TP2977</name>
+</trkpt>
+<trkpt lat="54.786966600" lon="-2.344358300">
+ <ele>448.000000</ele>
+ <name>TP2978</name>
+</trkpt>
+<trkpt lat="54.786789900" lon="-2.344389900">
+ <ele>448.000000</ele>
+ <name>TP2979</name>
+</trkpt>
+<trkpt lat="54.786776600" lon="-2.344383300">
+ <ele>448.000000</ele>
+ <name>TP2980</name>
+</trkpt>
+<trkpt lat="54.786763300" lon="-2.344408300">
+ <ele>448.000000</ele>
+ <name>TP2981</name>
+</trkpt>
+<trkpt lat="54.786814900" lon="-2.344496600">
+ <ele>448.000000</ele>
+ <name>TP2982</name>
+</trkpt>
+<trkpt lat="54.786818300" lon="-2.344508300">
+ <ele>448.000000</ele>
+ <name>TP2983</name>
+</trkpt>
+<trkpt lat="54.786819900" lon="-2.344520000">
+ <ele>448.000000</ele>
+ <name>TP2984</name>
+</trkpt>
+<trkpt lat="54.786823200" lon="-2.344516600">
+ <ele>448.000000</ele>
+ <name>TP2985</name>
+</trkpt>
+<trkpt lat="54.786826600" lon="-2.344523300">
+ <ele>448.000000</ele>
+ <name>TP2986</name>
+</trkpt>
+<trkpt lat="54.786829900" lon="-2.344533300">
+ <ele>448.000000</ele>
+ <name>TP2987</name>
+</trkpt>
+<trkpt lat="54.786811600" lon="-2.344468300">
+ <ele>448.000000</ele>
+ <name>TP2988</name>
+</trkpt>
+<trkpt lat="54.786810000" lon="-2.344463300">
+ <ele>448.000000</ele>
+ <name>TP2989</name>
+</trkpt>
+<trkpt lat="54.786808300" lon="-2.344458300">
+ <ele>448.000000</ele>
+ <name>TP2990</name>
+</trkpt>
+<trkpt lat="54.786808300" lon="-2.344456600">
+ <ele>448.000000</ele>
+ <name>TP2991</name>
+</trkpt>
+<trkpt lat="54.786785000" lon="-2.344446600">
+ <ele>448.000000</ele>
+ <name>TP2992</name>
+</trkpt>
+<trkpt lat="54.786771600" lon="-2.344441600">
+ <ele>448.000000</ele>
+ <name>TP2993</name>
+</trkpt>
+<trkpt lat="54.786766600" lon="-2.344444900">
+ <ele>448.000000</ele>
+ <name>TP2994</name>
+</trkpt>
+<trkpt lat="54.786783300" lon="-2.344464900">
+ <ele>448.000000</ele>
+ <name>TP2995</name>
+</trkpt>
+<trkpt lat="54.786785000" lon="-2.344424900">
+ <ele>448.000000</ele>
+ <name>TP2996</name>
+</trkpt>
+<trkpt lat="54.786788300" lon="-2.344423300">
+ <ele>449.000000</ele>
+ <name>TP2997</name>
+</trkpt>
+<trkpt lat="54.786793300" lon="-2.344421600">
+ <ele>449.000000</ele>
+ <name>TP2998</name>
+</trkpt>
+<trkpt lat="54.786798300" lon="-2.344419900">
+ <ele>449.000000</ele>
+ <name>TP2999</name>
+</trkpt>
+<trkpt lat="54.786806600" lon="-2.344415000">
+ <ele>449.000000</ele>
+ <name>TP3000</name>
+</trkpt>
+<trkpt lat="54.786818300" lon="-2.344406600">
+ <ele>449.000000</ele>
+ <name>TP3001</name>
+</trkpt>
+<trkpt lat="54.786825000" lon="-2.344398300">
+ <ele>449.000000</ele>
+ <name>TP3002</name>
+</trkpt>
+<trkpt lat="54.786834900" lon="-2.344389900">
+ <ele>449.000000</ele>
+ <name>TP3003</name>
+</trkpt>
+<trkpt lat="54.786844900" lon="-2.344380000">
+ <ele>449.000000</ele>
+ <name>TP3004</name>
+</trkpt>
+<trkpt lat="54.786844900" lon="-2.344376600">
+ <ele>449.000000</ele>
+ <name>TP3005</name>
+</trkpt>
+<trkpt lat="54.786840000" lon="-2.344361600">
+ <ele>449.000000</ele>
+ <name>TP3006</name>
+</trkpt>
+<trkpt lat="54.786838300" lon="-2.344324900">
+ <ele>449.000000</ele>
+ <name>TP3007</name>
+</trkpt>
+<trkpt lat="54.786834900" lon="-2.344318300">
+ <ele>449.000000</ele>
+ <name>TP3008</name>
+</trkpt>
+<trkpt lat="54.786843300" lon="-2.344310000">
+ <ele>449.000000</ele>
+ <name>TP3009</name>
+</trkpt>
+<trkpt lat="54.786855000" lon="-2.344295000">
+ <ele>449.000000</ele>
+ <name>TP3010</name>
+</trkpt>
+<trkpt lat="54.786863300" lon="-2.344288300">
+ <ele>449.000000</ele>
+ <name>TP3011</name>
+</trkpt>
+<trkpt lat="54.786913300" lon="-2.344229900">
+ <ele>449.000000</ele>
+ <name>TP3012</name>
+</trkpt>
+<trkpt lat="54.786855000" lon="-2.344316600">
+ <ele>449.000000</ele>
+ <name>TP3013</name>
+</trkpt>
+<trkpt lat="54.786848300" lon="-2.344306600">
+ <ele>449.000000</ele>
+ <name>TP3014</name>
+</trkpt>
+<trkpt lat="54.786840000" lon="-2.344295000">
+ <ele>449.000000</ele>
+ <name>TP3015</name>
+</trkpt>
+<trkpt lat="54.786834900" lon="-2.344293300">
+ <ele>449.000000</ele>
+ <name>TP3016</name>
+</trkpt>
+<trkpt lat="54.786826600" lon="-2.344293300">
+ <ele>449.000000</ele>
+ <name>TP3017</name>
+</trkpt>
+<trkpt lat="54.786825000" lon="-2.344293300">
+ <ele>449.000000</ele>
+ <name>TP3018</name>
+</trkpt>
+<trkpt lat="54.787319900" lon="-2.343995000">
+ <ele>449.000000</ele>
+ <name>TP3019</name>
+</trkpt>
+<trkpt lat="54.787330000" lon="-2.343993300">
+ <ele>449.000000</ele>
+ <name>TP3020</name>
+</trkpt>
+<trkpt lat="54.787348300" lon="-2.343978300">
+ <ele>449.000000</ele>
+ <name>TP3021</name>
+</trkpt>
+<trkpt lat="54.787349900" lon="-2.343980000">
+ <ele>449.000000</ele>
+ <name>TP3022</name>
+</trkpt>
+<trkpt lat="54.787356600" lon="-2.343978300">
+ <ele>449.000000</ele>
+ <name>TP3023</name>
+</trkpt>
+<trkpt lat="54.787373300" lon="-2.343958300">
+ <ele>449.000000</ele>
+ <name>TP3024</name>
+</trkpt>
+<trkpt lat="54.787404900" lon="-2.343933300">
+ <ele>449.000000</ele>
+ <name>TP3025</name>
+</trkpt>
+<trkpt lat="54.787415000" lon="-2.343930000">
+ <ele>449.000000</ele>
+ <name>TP3026</name>
+</trkpt>
+<trkpt lat="54.787446600" lon="-2.343901600">
+ <ele>449.000000</ele>
+ <name>TP3027</name>
+</trkpt>
+<trkpt lat="54.787456600" lon="-2.343886600">
+ <ele>449.000000</ele>
+ <name>TP3028</name>
+</trkpt>
+<trkpt lat="54.787318300" lon="-2.344001600">
+ <ele>449.000000</ele>
+ <name>TP3029</name>
+</trkpt>
+<trkpt lat="54.787318300" lon="-2.343966600">
+ <ele>449.000000</ele>
+ <name>TP3030</name>
+</trkpt>
+<trkpt lat="54.787370000" lon="-2.343853300">
+ <ele>449.000000</ele>
+ <name>TP3031</name>
+</trkpt>
+<trkpt lat="54.787385000" lon="-2.343846600">
+ <ele>449.000000</ele>
+ <name>TP3032</name>
+</trkpt>
+<trkpt lat="54.787474900" lon="-2.343766600">
+ <ele>449.000000</ele>
+ <name>TP3033</name>
+</trkpt>
+<trkpt lat="54.787514900" lon="-2.343766600">
+ <ele>449.000000</ele>
+ <name>TP3034</name>
+</trkpt>
+<trkpt lat="54.787528300" lon="-2.343761600">
+ <ele>449.000000</ele>
+ <name>TP3035</name>
+</trkpt>
+<trkpt lat="54.787531600" lon="-2.343776600">
+ <ele>449.000000</ele>
+ <name>TP3036</name>
+</trkpt>
+<trkpt lat="54.787418300" lon="-2.343930000">
+ <ele>449.000000</ele>
+ <name>TP3037</name>
+</trkpt>
+<trkpt lat="54.787339900" lon="-2.344016600">
+ <ele>449.000000</ele>
+ <name>TP3038</name>
+</trkpt>
+<trkpt lat="54.787296600" lon="-2.344065000">
+ <ele>449.000000</ele>
+ <name>TP3039</name>
+</trkpt>
+<trkpt lat="54.787271600" lon="-2.344091600">
+ <ele>449.000000</ele>
+ <name>TP3040</name>
+</trkpt>
+<trkpt lat="54.787239900" lon="-2.344135000">
+ <ele>449.000000</ele>
+ <name>TP3041</name>
+</trkpt>
+<trkpt lat="54.787243200" lon="-2.344141600">
+ <ele>449.000000</ele>
+ <name>TP3042</name>
+</trkpt>
+<trkpt lat="54.787281600" lon="-2.344124900">
+ <ele>449.000000</ele>
+ <name>TP3043</name>
+</trkpt>
+<trkpt lat="54.787248300" lon="-2.344179900">
+ <ele>449.000000</ele>
+ <name>TP3044</name>
+</trkpt>
+<trkpt lat="54.787208300" lon="-2.344240000">
+ <ele>449.000000</ele>
+ <name>TP3045</name>
+</trkpt>
+<trkpt lat="54.787186600" lon="-2.344261600">
+ <ele>449.000000</ele>
+ <name>TP3046</name>
+</trkpt>
+<trkpt lat="54.787128300" lon="-2.344331600">
+ <ele>449.000000</ele>
+ <name>TP3047</name>
+</trkpt>
+<trkpt lat="54.787101600" lon="-2.344371600">
+ <ele>449.000000</ele>
+ <name>TP3048</name>
+</trkpt>
+<trkpt lat="54.787094900" lon="-2.344393300">
+ <ele>449.000000</ele>
+ <name>TP3049</name>
+</trkpt>
+<trkpt lat="54.787075000" lon="-2.344408300">
+ <ele>449.000000</ele>
+ <name>TP3050</name>
+</trkpt>
+<trkpt lat="54.787053300" lon="-2.344446600">
+ <ele>449.000000</ele>
+ <name>TP3051</name>
+</trkpt>
+<trkpt lat="54.786984900" lon="-2.344464900">
+ <ele>449.000000</ele>
+ <name>TP3052</name>
+</trkpt>
+<trkpt lat="54.786984900" lon="-2.344453300">
+ <ele>449.000000</ele>
+ <name>TP3053</name>
+</trkpt>
+<trkpt lat="54.786913300" lon="-2.344441600">
+ <ele>449.000000</ele>
+ <name>TP3054</name>
+</trkpt>
+<trkpt lat="54.786871600" lon="-2.344441600">
+ <ele>449.000000</ele>
+ <name>TP3055</name>
+</trkpt>
+<trkpt lat="54.786828300" lon="-2.344436600">
+ <ele>449.000000</ele>
+ <name>TP3056</name>
+</trkpt>
+<trkpt lat="54.786776600" lon="-2.344416600">
+ <ele>449.000000</ele>
+ <name>TP3057</name>
+</trkpt>
+<trkpt lat="54.786701600" lon="-2.344474900">
+ <ele>449.000000</ele>
+ <name>TP3058</name>
+</trkpt>
+<trkpt lat="54.786689900" lon="-2.344514900">
+ <ele>449.000000</ele>
+ <name>TP3059</name>
+</trkpt>
+<trkpt lat="54.786710000" lon="-2.344498300">
+ <ele>449.000000</ele>
+ <name>TP3060</name>
+</trkpt>
+<trkpt lat="54.786729900" lon="-2.344489900">
+ <ele>449.000000</ele>
+ <name>TP3061</name>
+</trkpt>
+<trkpt lat="54.786740000" lon="-2.344483300">
+ <ele>449.000000</ele>
+ <name>TP3062</name>
+</trkpt>
+<trkpt lat="54.786743300" lon="-2.344473300">
+ <ele>449.000000</ele>
+ <name>TP3063</name>
+</trkpt>
+<trkpt lat="54.786755000" lon="-2.344459900">
+ <ele>449.000000</ele>
+ <name>TP3064</name>
+</trkpt>
+<trkpt lat="54.786758300" lon="-2.344448300">
+ <ele>449.000000</ele>
+ <name>TP3065</name>
+</trkpt>
+<trkpt lat="54.786761600" lon="-2.344441600">
+ <ele>449.000000</ele>
+ <name>TP3066</name>
+</trkpt>
+<trkpt lat="54.786763300" lon="-2.344429900">
+ <ele>449.000000</ele>
+ <name>TP3067</name>
+</trkpt>
+<trkpt lat="54.786759900" lon="-2.344424900">
+ <ele>449.000000</ele>
+ <name>TP3068</name>
+</trkpt>
+<trkpt lat="54.786761600" lon="-2.344418300">
+ <ele>449.000000</ele>
+ <name>TP3069</name>
+</trkpt>
+<trkpt lat="54.786759900" lon="-2.344406600">
+ <ele>449.000000</ele>
+ <name>TP3070</name>
+</trkpt>
+<trkpt lat="54.786759900" lon="-2.344394900">
+ <ele>449.000000</ele>
+ <name>TP3071</name>
+</trkpt>
+<trkpt lat="54.786759900" lon="-2.344386600">
+ <ele>449.000000</ele>
+ <name>TP3072</name>
+</trkpt>
+<trkpt lat="54.786761600" lon="-2.344378300">
+ <ele>449.000000</ele>
+ <name>TP3073</name>
+</trkpt>
+<trkpt lat="54.786761600" lon="-2.344376600">
+ <ele>449.000000</ele>
+ <name>TP3074</name>
+</trkpt>
+<trkpt lat="54.786773300" lon="-2.344374900">
+ <ele>449.000000</ele>
+ <name>TP3075</name>
+</trkpt>
+<trkpt lat="54.786776600" lon="-2.344378300">
+ <ele>449.000000</ele>
+ <name>TP3076</name>
+</trkpt>
+<trkpt lat="54.786776600" lon="-2.344393300">
+ <ele>449.000000</ele>
+ <name>TP3077</name>
+</trkpt>
+<trkpt lat="54.786773300" lon="-2.344389900">
+ <ele>449.000000</ele>
+ <name>TP3078</name>
+</trkpt>
+<trkpt lat="54.786771600" lon="-2.344388300">
+ <ele>449.000000</ele>
+ <name>TP3079</name>
+</trkpt>
+<trkpt lat="54.786786600" lon="-2.344549900">
+ <ele>449.000000</ele>
+ <name>TP3080</name>
+</trkpt>
+<trkpt lat="54.786764900" lon="-2.344575000">
+ <ele>449.000000</ele>
+ <name>TP3081</name>
+</trkpt>
+<trkpt lat="54.786773300" lon="-2.344586600">
+ <ele>449.000000</ele>
+ <name>TP3082</name>
+</trkpt>
+<trkpt lat="54.786778300" lon="-2.344569900">
+ <ele>449.000000</ele>
+ <name>TP3083</name>
+</trkpt>
+<trkpt lat="54.786773300" lon="-2.344566600">
+ <ele>449.000000</ele>
+ <name>TP3084</name>
+</trkpt>
+<trkpt lat="54.786746600" lon="-2.344561600">
+ <ele>449.000000</ele>
+ <name>TP3085</name>
+</trkpt>
+<trkpt lat="54.786749900" lon="-2.344559900">
+ <ele>449.000000</ele>
+ <name>TP3086</name>
+</trkpt>
+<trkpt lat="54.786038200" lon="-2.345153300">
+ <ele>449.000000</ele>
+ <name>TP3087</name>
+</trkpt>
+<trkpt lat="54.786195000" lon="-2.345061600">
+ <ele>449.000000</ele>
+ <name>TP3088</name>
+</trkpt>
+<trkpt lat="54.786266600" lon="-2.345006600">
+ <ele>449.000000</ele>
+ <name>TP3089</name>
+</trkpt>
+<trkpt lat="54.786318200" lon="-2.344971600">
+ <ele>449.000000</ele>
+ <name>TP3090</name>
+</trkpt>
+<trkpt lat="54.786333200" lon="-2.344964900">
+ <ele>449.000000</ele>
+ <name>TP3091</name>
+</trkpt>
+<trkpt lat="54.786358300" lon="-2.344943300">
+ <ele>449.000000</ele>
+ <name>TP3092</name>
+</trkpt>
+<trkpt lat="54.786379900" lon="-2.344929900">
+ <ele>449.000000</ele>
+ <name>TP3093</name>
+</trkpt>
+<trkpt lat="54.786371600" lon="-2.344936600">
+ <ele>449.000000</ele>
+ <name>TP3094</name>
+</trkpt>
+<trkpt lat="54.786323300" lon="-2.344968300">
+ <ele>449.000000</ele>
+ <name>TP3095</name>
+</trkpt>
+<trkpt lat="54.786328300" lon="-2.344968300">
+ <ele>449.000000</ele>
+ <name>TP3096</name>
+</trkpt>
+<trkpt lat="54.786335000" lon="-2.344964900">
+ <ele>449.000000</ele>
+ <name>TP3097</name>
+</trkpt>
+<trkpt lat="54.786339900" lon="-2.344963300">
+ <ele>449.000000</ele>
+ <name>TP3098</name>
+</trkpt>
+<trkpt lat="54.786344900" lon="-2.344960000">
+ <ele>449.000000</ele>
+ <name>TP3099</name>
+</trkpt>
+<trkpt lat="54.786350000" lon="-2.344956600">
+ <ele>449.000000</ele>
+ <name>TP3100</name>
+</trkpt>
+<trkpt lat="54.786358300" lon="-2.344953300">
+ <ele>449.000000</ele>
+ <name>TP3101</name>
+</trkpt>
+<trkpt lat="54.786366600" lon="-2.344944900">
+ <ele>449.000000</ele>
+ <name>TP3102</name>
+</trkpt>
+<trkpt lat="54.786373300" lon="-2.344933300">
+ <ele>449.000000</ele>
+ <name>TP3103</name>
+</trkpt>
+<trkpt lat="54.786373300" lon="-2.344925000">
+ <ele>449.000000</ele>
+ <name>TP3104</name>
+</trkpt>
+<trkpt lat="54.786375000" lon="-2.344918300">
+ <ele>449.000000</ele>
+ <name>TP3105</name>
+</trkpt>
+<trkpt lat="54.786378300" lon="-2.344909900">
+ <ele>449.000000</ele>
+ <name>TP3106</name>
+</trkpt>
+<trkpt lat="54.786383300" lon="-2.344906600">
+ <ele>449.000000</ele>
+ <name>TP3107</name>
+</trkpt>
+<trkpt lat="54.786393300" lon="-2.344885000">
+ <ele>449.000000</ele>
+ <name>TP3108</name>
+</trkpt>
+<trkpt lat="54.786401600" lon="-2.344870000">
+ <ele>449.000000</ele>
+ <name>TP3109</name>
+</trkpt>
+<trkpt lat="54.786411600" lon="-2.344846600">
+ <ele>449.000000</ele>
+ <name>TP3110</name>
+</trkpt>
+<trkpt lat="54.786436600" lon="-2.344804900">
+ <ele>449.000000</ele>
+ <name>TP3111</name>
+</trkpt>
+<trkpt lat="54.786966600" lon="-2.344568300">
+ <ele>449.000000</ele>
+ <name>TP3112</name>
+</trkpt>
+<trkpt lat="54.786976600" lon="-2.344553300">
+ <ele>449.000000</ele>
+ <name>TP3113</name>
+</trkpt>
+<trkpt lat="54.786989900" lon="-2.344543300">
+ <ele>449.000000</ele>
+ <name>TP3114</name>
+</trkpt>
+<trkpt lat="54.786976600" lon="-2.344548300">
+ <ele>449.000000</ele>
+ <name>TP3115</name>
+</trkpt>
+<trkpt lat="54.786999900" lon="-2.344501600">
+ <ele>449.000000</ele>
+ <name>TP3116</name>
+</trkpt>
+<trkpt lat="54.787020000" lon="-2.344489900">
+ <ele>449.000000</ele>
+ <name>TP3117</name>
+</trkpt>
+<trkpt lat="54.787035000" lon="-2.344483300">
+ <ele>449.000000</ele>
+ <name>TP3118</name>
+</trkpt>
+<trkpt lat="54.787041600" lon="-2.344479900">
+ <ele>449.000000</ele>
+ <name>TP3119</name>
+</trkpt>
+<trkpt lat="54.787054900" lon="-2.344466600">
+ <ele>449.000000</ele>
+ <name>TP3120</name>
+</trkpt>
+<trkpt lat="54.787071600" lon="-2.344443300">
+ <ele>449.000000</ele>
+ <name>TP3121</name>
+</trkpt>
+<trkpt lat="54.787076600" lon="-2.344428300">
+ <ele>449.000000</ele>
+ <name>TP3122</name>
+</trkpt>
+<trkpt lat="54.787084900" lon="-2.344419900">
+ <ele>449.000000</ele>
+ <name>TP3123</name>
+</trkpt>
+<trkpt lat="54.787065000" lon="-2.344404900">
+ <ele>449.000000</ele>
+ <name>TP3124</name>
+</trkpt>
+<trkpt lat="54.787044900" lon="-2.344401600">
+ <ele>449.000000</ele>
+ <name>TP3125</name>
+</trkpt>
+<trkpt lat="54.786906600" lon="-2.344374900">
+ <ele>449.000000</ele>
+ <name>TP3126</name>
+</trkpt>
+<trkpt lat="54.786910000" lon="-2.344381600">
+ <ele>449.000000</ele>
+ <name>TP3127</name>
+</trkpt>
+<trkpt lat="54.786908300" lon="-2.344471600">
+ <ele>449.000000</ele>
+ <name>TP3128</name>
+</trkpt>
+<trkpt lat="54.786876600" lon="-2.344505000">
+ <ele>449.000000</ele>
+ <name>TP3129</name>
+</trkpt>
+<trkpt lat="54.786869900" lon="-2.344521600">
+ <ele>449.000000</ele>
+ <name>TP3130</name>
+</trkpt>
+<trkpt lat="54.786869900" lon="-2.344526600">
+ <ele>449.000000</ele>
+ <name>TP3131</name>
+</trkpt>
+<trkpt lat="54.786883300" lon="-2.344499900">
+ <ele>449.000000</ele>
+ <name>TP3132</name>
+</trkpt>
+<trkpt lat="54.786906600" lon="-2.344481600">
+ <ele>449.000000</ele>
+ <name>TP3133</name>
+</trkpt>
+<trkpt lat="54.787153300" lon="-2.344558300">
+ <ele>449.000000</ele>
+ <name>TP3134</name>
+</trkpt>
+<trkpt lat="54.787123300" lon="-2.344541600">
+ <ele>449.000000</ele>
+ <name>TP3135</name>
+</trkpt>
+<trkpt lat="54.787079900" lon="-2.344481600">
+ <ele>449.000000</ele>
+ <name>TP3136</name>
+</trkpt>
+<trkpt lat="54.787031600" lon="-2.344443300">
+ <ele>449.000000</ele>
+ <name>TP3137</name>
+</trkpt>
+<trkpt lat="54.786951600" lon="-2.344339900">
+ <ele>449.000000</ele>
+ <name>TP3138</name>
+</trkpt>
+<trkpt lat="54.787028300" lon="-2.344424900">
+ <ele>449.000000</ele>
+ <name>TP3139</name>
+</trkpt>
+<trkpt lat="54.786973300" lon="-2.344408300">
+ <ele>449.000000</ele>
+ <name>TP3140</name>
+</trkpt>
+<trkpt lat="54.786976600" lon="-2.344419900">
+ <ele>449.000000</ele>
+ <name>TP3141</name>
+</trkpt>
+<trkpt lat="54.786956600" lon="-2.344419900">
+ <ele>449.000000</ele>
+ <name>TP3142</name>
+</trkpt>
+<trkpt lat="54.786954900" lon="-2.344429900">
+ <ele>449.000000</ele>
+ <name>TP3143</name>
+</trkpt>
+<trkpt lat="54.786943300" lon="-2.344450000">
+ <ele>449.000000</ele>
+ <name>TP3144</name>
+</trkpt>
+<trkpt lat="54.786944900" lon="-2.344470000">
+ <ele>449.000000</ele>
+ <name>TP3145</name>
+</trkpt>
+<trkpt lat="54.786935000" lon="-2.344473300">
+ <ele>449.000000</ele>
+ <name>TP3146</name>
+</trkpt>
+<trkpt lat="54.786931600" lon="-2.344471600">
+ <ele>449.000000</ele>
+ <name>TP3147</name>
+</trkpt>
+<trkpt lat="54.786943300" lon="-2.344470000">
+ <ele>449.000000</ele>
+ <name>TP3148</name>
+</trkpt>
+<trkpt lat="54.786683200" lon="-2.344363300">
+ <ele>449.000000</ele>
+ <name>TP3149</name>
+</trkpt>
+<trkpt lat="54.786786600" lon="-2.344386600">
+ <ele>449.000000</ele>
+ <name>TP3150</name>
+</trkpt>
+<trkpt lat="54.786856600" lon="-2.344400000">
+ <ele>449.000000</ele>
+ <name>TP3151</name>
+</trkpt>
+<trkpt lat="54.786841600" lon="-2.344378300">
+ <ele>449.000000</ele>
+ <name>TP3152</name>
+</trkpt>
+<trkpt lat="54.786874900" lon="-2.344366600">
+ <ele>449.000000</ele>
+ <name>TP3153</name>
+</trkpt>
+<trkpt lat="54.786881600" lon="-2.344368300">
+ <ele>449.000000</ele>
+ <name>TP3154</name>
+</trkpt>
+<trkpt lat="54.786899900" lon="-2.344368300">
+ <ele>449.000000</ele>
+ <name>TP3155</name>
+</trkpt>
+<trkpt lat="54.786898300" lon="-2.344358300">
+ <ele>449.000000</ele>
+ <name>TP3156</name>
+</trkpt>
+<trkpt lat="54.786903300" lon="-2.344339900">
+ <ele>449.000000</ele>
+ <name>TP3157</name>
+</trkpt>
+<trkpt lat="54.786933300" lon="-2.344298300">
+ <ele>449.000000</ele>
+ <name>TP3158</name>
+</trkpt>
+<trkpt lat="54.786953300" lon="-2.344266600">
+ <ele>449.000000</ele>
+ <name>TP3159</name>
+</trkpt>
+<trkpt lat="54.786969900" lon="-2.344254900">
+ <ele>449.000000</ele>
+ <name>TP3160</name>
+</trkpt>
+<trkpt lat="54.786965000" lon="-2.344283300">
+ <ele>449.000000</ele>
+ <name>TP3161</name>
+</trkpt>
+<trkpt lat="54.786948300" lon="-2.344301600">
+ <ele>449.000000</ele>
+ <name>TP3162</name>
+</trkpt>
+<trkpt lat="54.786941600" lon="-2.344310000">
+ <ele>449.000000</ele>
+ <name>TP3163</name>
+</trkpt>
+<trkpt lat="54.786941600" lon="-2.344314900">
+ <ele>449.000000</ele>
+ <name>TP3164</name>
+</trkpt>
+<trkpt lat="54.786928300" lon="-2.344323300">
+ <ele>449.000000</ele>
+ <name>TP3165</name>
+</trkpt>
+<trkpt lat="54.786919900" lon="-2.344323300">
+ <ele>449.000000</ele>
+ <name>TP3166</name>
+</trkpt>
+<trkpt lat="54.786911600" lon="-2.344323300">
+ <ele>449.000000</ele>
+ <name>TP3167</name>
+</trkpt>
+<trkpt lat="54.786899900" lon="-2.344333300">
+ <ele>449.000000</ele>
+ <name>TP3168</name>
+</trkpt>
+<trkpt lat="54.786884900" lon="-2.344334900">
+ <ele>449.000000</ele>
+ <name>TP3169</name>
+</trkpt>
+<trkpt lat="54.786880000" lon="-2.344338300">
+ <ele>449.000000</ele>
+ <name>TP3170</name>
+</trkpt>
+<trkpt lat="54.786874900" lon="-2.344334900">
+ <ele>449.000000</ele>
+ <name>TP3171</name>
+</trkpt>
+<trkpt lat="54.786868300" lon="-2.344333300">
+ <ele>449.000000</ele>
+ <name>TP3172</name>
+</trkpt>
+<trkpt lat="54.786855000" lon="-2.344334900">
+ <ele>449.000000</ele>
+ <name>TP3173</name>
+</trkpt>
+<trkpt lat="54.786853300" lon="-2.344339900">
+ <ele>449.000000</ele>
+ <name>TP3174</name>
+</trkpt>
+<trkpt lat="54.786843300" lon="-2.344348300">
+ <ele>449.000000</ele>
+ <name>TP3175</name>
+</trkpt>
+<trkpt lat="54.786838300" lon="-2.344348300">
+ <ele>449.000000</ele>
+ <name>TP3176</name>
+</trkpt>
+<trkpt lat="54.786840000" lon="-2.344353300">
+ <ele>449.000000</ele>
+ <name>TP3177</name>
+</trkpt>
+<trkpt lat="54.786841600" lon="-2.344348300">
+ <ele>449.000000</ele>
+ <name>TP3178</name>
+</trkpt>
+<trkpt lat="54.786841600" lon="-2.344338300">
+ <ele>449.000000</ele>
+ <name>TP3179</name>
+</trkpt>
+<trkpt lat="54.787190000" lon="-2.344141600">
+ <ele>449.000000</ele>
+ <name>TP3180</name>
+</trkpt>
+<trkpt lat="54.787113300" lon="-2.344213300">
+ <ele>449.000000</ele>
+ <name>TP3181</name>
+</trkpt>
+<trkpt lat="54.787116600" lon="-2.344218300">
+ <ele>449.000000</ele>
+ <name>TP3182</name>
+</trkpt>
+<trkpt lat="54.787096600" lon="-2.344238300">
+ <ele>449.000000</ele>
+ <name>TP3183</name>
+</trkpt>
+<trkpt lat="54.787048300" lon="-2.344269900">
+ <ele>449.000000</ele>
+ <name>TP3184</name>
+</trkpt>
+<trkpt lat="54.786974900" lon="-2.344323300">
+ <ele>449.000000</ele>
+ <name>TP3185</name>
+</trkpt>
+<trkpt lat="54.786923300" lon="-2.344363300">
+ <ele>449.000000</ele>
+ <name>TP3186</name>
+</trkpt>
+<trkpt lat="54.786889900" lon="-2.344383300">
+ <ele>449.000000</ele>
+ <name>TP3187</name>
+</trkpt>
+<trkpt lat="54.786848300" lon="-2.344408300">
+ <ele>449.000000</ele>
+ <name>TP3188</name>
+</trkpt>
+<trkpt lat="54.786785000" lon="-2.344441600">
+ <ele>449.000000</ele>
+ <name>TP3189</name>
+</trkpt>
+<trkpt lat="54.786778300" lon="-2.344443300">
+ <ele>449.000000</ele>
+ <name>TP3190</name>
+</trkpt>
+<trkpt lat="54.786776600" lon="-2.344448300">
+ <ele>449.000000</ele>
+ <name>TP3191</name>
+</trkpt>
+<trkpt lat="54.786801600" lon="-2.344435000">
+ <ele>449.000000</ele>
+ <name>TP3192</name>
+</trkpt>
+<trkpt lat="54.786821600" lon="-2.344378300">
+ <ele>449.000000</ele>
+ <name>TP3193</name>
+</trkpt>
+<trkpt lat="54.786829900" lon="-2.344359900">
+ <ele>449.000000</ele>
+ <name>TP3194</name>
+</trkpt>
+<trkpt lat="54.786863300" lon="-2.344334900">
+ <ele>449.000000</ele>
+ <name>TP3195</name>
+</trkpt>
+<trkpt lat="54.786859900" lon="-2.344323300">
+ <ele>449.000000</ele>
+ <name>TP3196</name>
+</trkpt>
+<trkpt lat="54.786881600" lon="-2.344299900">
+ <ele>449.000000</ele>
+ <name>TP3197</name>
+</trkpt>
+<trkpt lat="54.786834900" lon="-2.344339900">
+ <ele>449.000000</ele>
+ <name>TP3198</name>
+</trkpt>
+<trkpt lat="54.786840000" lon="-2.344336600">
+ <ele>449.000000</ele>
+ <name>TP3199</name>
+</trkpt>
+<trkpt lat="54.786843300" lon="-2.344334900">
+ <ele>449.000000</ele>
+ <name>TP3200</name>
+</trkpt>
+<trkpt lat="54.786843300" lon="-2.344339900">
+ <ele>449.000000</ele>
+ <name>TP3201</name>
+</trkpt>
+<trkpt lat="54.786713300" lon="-2.344509900">
+ <ele>449.000000</ele>
+ <name>TP3202</name>
+</trkpt>
+<trkpt lat="54.786799900" lon="-2.344450000">
+ <ele>449.000000</ele>
+ <name>TP3203</name>
+</trkpt>
+<trkpt lat="54.786901600" lon="-2.344383300">
+ <ele>449.000000</ele>
+ <name>TP3204</name>
+</trkpt>
+<trkpt lat="54.786923300" lon="-2.344366600">
+ <ele>449.000000</ele>
+ <name>TP3205</name>
+</trkpt>
+<trkpt lat="54.786876600" lon="-2.344348300">
+ <ele>449.000000</ele>
+ <name>TP3206</name>
+</trkpt>
+<trkpt lat="54.786861600" lon="-2.344334900">
+ <ele>449.000000</ele>
+ <name>TP3207</name>
+</trkpt>
+<trkpt lat="54.786850000" lon="-2.344324900">
+ <ele>449.000000</ele>
+ <name>TP3208</name>
+</trkpt>
+<trkpt lat="54.786823200" lon="-2.344324900">
+ <ele>449.000000</ele>
+ <name>TP3209</name>
+</trkpt>
+<trkpt lat="54.786953300" lon="-2.344043300">
+ <ele>449.000000</ele>
+ <name>TP3210</name>
+</trkpt>
+<trkpt lat="54.786988300" lon="-2.344019900">
+ <ele>449.000000</ele>
+ <name>TP3211</name>
+</trkpt>
+<trkpt lat="54.786958300" lon="-2.344059900">
+ <ele>449.000000</ele>
+ <name>TP3212</name>
+</trkpt>
+<trkpt lat="54.786971600" lon="-2.344046600">
+ <ele>449.000000</ele>
+ <name>TP3213</name>
+</trkpt>
+<trkpt lat="54.786965000" lon="-2.344065000">
+ <ele>449.000000</ele>
+ <name>TP3214</name>
+</trkpt>
+<trkpt lat="54.786963200" lon="-2.344078300">
+ <ele>449.000000</ele>
+ <name>TP3215</name>
+</trkpt>
+<trkpt lat="54.786959900" lon="-2.344081600">
+ <ele>449.000000</ele>
+ <name>TP3216</name>
+</trkpt>
+<trkpt lat="54.786956600" lon="-2.344088300">
+ <ele>449.000000</ele>
+ <name>TP3217</name>
+</trkpt>
+<trkpt lat="54.786954900" lon="-2.344091600">
+ <ele>449.000000</ele>
+ <name>TP3218</name>
+</trkpt>
+<trkpt lat="54.786951600" lon="-2.344063300">
+ <ele>449.000000</ele>
+ <name>TP3219</name>
+</trkpt>
+<trkpt lat="54.786946600" lon="-2.344076600">
+ <ele>449.000000</ele>
+ <name>TP3220</name>
+</trkpt>
+<trkpt lat="54.786961600" lon="-2.344063300">
+ <ele>449.000000</ele>
+ <name>TP3221</name>
+</trkpt>
+<trkpt lat="54.786983300" lon="-2.344024900">
+ <ele>449.000000</ele>
+ <name>TP3222</name>
+</trkpt>
+<trkpt lat="54.786995000" lon="-2.344006600">
+ <ele>449.000000</ele>
+ <name>TP3223</name>
+</trkpt>
+<trkpt lat="54.787001600" lon="-2.344000000">
+ <ele>449.000000</ele>
+ <name>TP3224</name>
+</trkpt>
+<trkpt lat="54.787009900" lon="-2.344004900">
+ <ele>449.000000</ele>
+ <name>TP3225</name>
+</trkpt>
+<trkpt lat="54.787013300" lon="-2.343989900">
+ <ele>449.000000</ele>
+ <name>TP3226</name>
+</trkpt>
+<trkpt lat="54.787005000" lon="-2.344000000">
+ <ele>449.000000</ele>
+ <name>TP3227</name>
+</trkpt>
+<trkpt lat="54.786995000" lon="-2.344038300">
+ <ele>449.000000</ele>
+ <name>TP3228</name>
+</trkpt>
+<trkpt lat="54.786999900" lon="-2.344038300">
+ <ele>449.000000</ele>
+ <name>TP3229</name>
+</trkpt>
+<trkpt lat="54.787005000" lon="-2.344019900">
+ <ele>449.000000</ele>
+ <name>TP3230</name>
+</trkpt>
+<trkpt lat="54.787020000" lon="-2.343976600">
+ <ele>449.000000</ele>
+ <name>TP3231</name>
+</trkpt>
+<trkpt lat="54.787035000" lon="-2.343953300">
+ <ele>449.000000</ele>
+ <name>TP3232</name>
+</trkpt>
+<trkpt lat="54.787035000" lon="-2.343936600">
+ <ele>449.000000</ele>
+ <name>TP3233</name>
+</trkpt>
+<trkpt lat="54.787041600" lon="-2.343916600">
+ <ele>449.000000</ele>
+ <name>TP3234</name>
+</trkpt>
+<trkpt lat="54.787041600" lon="-2.343931600">
+ <ele>449.000000</ele>
+ <name>TP3235</name>
+</trkpt>
+<trkpt lat="54.787031600" lon="-2.343949900">
+ <ele>449.000000</ele>
+ <name>TP3236</name>
+</trkpt>
+<trkpt lat="54.787029900" lon="-2.343951600">
+ <ele>449.000000</ele>
+ <name>TP3237</name>
+</trkpt>
+<trkpt lat="54.787023300" lon="-2.343938300">
+ <ele>449.000000</ele>
+ <name>TP3238</name>
+</trkpt>
+<trkpt lat="54.787018300" lon="-2.343934900">
+ <ele>449.000000</ele>
+ <name>TP3239</name>
+</trkpt>
+<trkpt lat="54.787016600" lon="-2.343928300">
+ <ele>449.000000</ele>
+ <name>TP3240</name>
+</trkpt>
+<trkpt lat="54.787013300" lon="-2.343925000">
+ <ele>449.000000</ele>
+ <name>TP3241</name>
+</trkpt>
+<trkpt lat="54.787005000" lon="-2.343923300">
+ <ele>449.000000</ele>
+ <name>TP3242</name>
+</trkpt>
+<trkpt lat="54.786996600" lon="-2.343930000">
+ <ele>449.000000</ele>
+ <name>TP3243</name>
+</trkpt>
+<trkpt lat="54.786976600" lon="-2.343930000">
+ <ele>449.000000</ele>
+ <name>TP3244</name>
+</trkpt>
+<trkpt lat="54.786969900" lon="-2.343951600">
+ <ele>449.000000</ele>
+ <name>TP3245</name>
+</trkpt>
+<trkpt lat="54.786966600" lon="-2.343963300">
+ <ele>449.000000</ele>
+ <name>TP3246</name>
+</trkpt>
+<trkpt lat="54.786954900" lon="-2.343980000">
+ <ele>449.000000</ele>
+ <name>TP3247</name>
+</trkpt>
+<trkpt lat="54.786946600" lon="-2.343996600">
+ <ele>449.000000</ele>
+ <name>TP3248</name>
+</trkpt>
+<trkpt lat="54.786939900" lon="-2.344013300">
+ <ele>449.000000</ele>
+ <name>TP3249</name>
+</trkpt>
+<trkpt lat="54.786925000" lon="-2.344051600">
+ <ele>449.000000</ele>
+ <name>TP3250</name>
+</trkpt>
+<trkpt lat="54.786901600" lon="-2.344106600">
+ <ele>449.000000</ele>
+ <name>TP3251</name>
+</trkpt>
+<trkpt lat="54.786878300" lon="-2.344146600">
+ <ele>449.000000</ele>
+ <name>TP3252</name>
+</trkpt>
+<trkpt lat="54.786791600" lon="-2.344348300">
+ <ele>449.000000</ele>
+ <name>TP3253</name>
+</trkpt>
+<trkpt lat="54.786813300" lon="-2.344330000">
+ <ele>449.000000</ele>
+ <name>TP3254</name>
+</trkpt>
+<trkpt lat="54.786819900" lon="-2.344338300">
+ <ele>449.000000</ele>
+ <name>TP3255</name>
+</trkpt>
+<trkpt lat="54.786813300" lon="-2.344338300">
+ <ele>449.000000</ele>
+ <name>TP3256</name>
+</trkpt>
+<trkpt lat="54.786829900" lon="-2.344318300">
+ <ele>449.000000</ele>
+ <name>TP3257</name>
+</trkpt>
+<trkpt lat="54.786826600" lon="-2.344314900">
+ <ele>449.000000</ele>
+ <name>TP3258</name>
+</trkpt>
+<trkpt lat="54.786819900" lon="-2.344313300">
+ <ele>449.000000</ele>
+ <name>TP3259</name>
+</trkpt>
+<trkpt lat="54.786814900" lon="-2.344304900">
+ <ele>449.000000</ele>
+ <name>TP3260</name>
+</trkpt>
+<trkpt lat="54.786813300" lon="-2.344301600">
+ <ele>449.000000</ele>
+ <name>TP3261</name>
+</trkpt>
+<trkpt lat="54.786819900" lon="-2.344301600">
+ <ele>449.000000</ele>
+ <name>TP3262</name>
+</trkpt>
+<trkpt lat="54.786888300" lon="-2.344254900">
+ <ele>449.000000</ele>
+ <name>TP3263</name>
+</trkpt>
+<trkpt lat="54.786884900" lon="-2.344254900">
+ <ele>449.000000</ele>
+ <name>TP3264</name>
+</trkpt>
+<trkpt lat="54.786881600" lon="-2.344253300">
+ <ele>449.000000</ele>
+ <name>TP3265</name>
+</trkpt>
+<trkpt lat="54.786874900" lon="-2.344248300">
+ <ele>449.000000</ele>
+ <name>TP3266</name>
+</trkpt>
+<trkpt lat="54.786873300" lon="-2.344248300">
+ <ele>449.000000</ele>
+ <name>TP3267</name>
+</trkpt>
+<trkpt lat="54.786869900" lon="-2.344251600">
+ <ele>449.000000</ele>
+ <name>TP3268</name>
+</trkpt>
+<trkpt lat="54.786863300" lon="-2.344253300">
+ <ele>449.000000</ele>
+ <name>TP3269</name>
+</trkpt>
+<trkpt lat="54.786856600" lon="-2.344256600">
+ <ele>449.000000</ele>
+ <name>TP3270</name>
+</trkpt>
+<trkpt lat="54.786851600" lon="-2.344261600">
+ <ele>449.000000</ele>
+ <name>TP3271</name>
+</trkpt>
+<trkpt lat="54.786831600" lon="-2.344254900">
+ <ele>449.000000</ele>
+ <name>TP3272</name>
+</trkpt>
+<trkpt lat="54.786836600" lon="-2.344254900">
+ <ele>449.000000</ele>
+ <name>TP3273</name>
+</trkpt>
+<trkpt lat="54.786826600" lon="-2.344276600">
+ <ele>449.000000</ele>
+ <name>TP3274</name>
+</trkpt>
+<trkpt lat="54.786829900" lon="-2.344273300">
+ <ele>449.000000</ele>
+ <name>TP3275</name>
+</trkpt>
+<trkpt lat="54.786831600" lon="-2.344279900">
+ <ele>449.000000</ele>
+ <name>TP3276</name>
+</trkpt>
+<trkpt lat="54.786826600" lon="-2.344288300">
+ <ele>449.000000</ele>
+ <name>TP3277</name>
+</trkpt>
+<trkpt lat="54.786826600" lon="-2.344266600">
+ <ele>449.000000</ele>
+ <name>TP3278</name>
+</trkpt>
+<trkpt lat="54.786819900" lon="-2.344273300">
+ <ele>449.000000</ele>
+ <name>TP3279</name>
+</trkpt>
+<trkpt lat="54.786793300" lon="-2.344281600">
+ <ele>449.000000</ele>
+ <name>TP3280</name>
+</trkpt>
+<trkpt lat="54.786793300" lon="-2.344291600">
+ <ele>449.000000</ele>
+ <name>TP3281</name>
+</trkpt>
+<trkpt lat="54.786881600" lon="-2.344286600">
+ <ele>449.000000</ele>
+ <name>TP3282</name>
+</trkpt>
+<trkpt lat="54.786884900" lon="-2.344289900">
+ <ele>449.000000</ele>
+ <name>TP3283</name>
+</trkpt>
+<trkpt lat="54.786886600" lon="-2.344293300">
+ <ele>449.000000</ele>
+ <name>TP3284</name>
+</trkpt>
+<trkpt lat="54.786889900" lon="-2.344295000">
+ <ele>449.000000</ele>
+ <name>TP3285</name>
+</trkpt>
+<trkpt lat="54.786895000" lon="-2.344296600">
+ <ele>449.000000</ele>
+ <name>TP3286</name>
+</trkpt>
+<trkpt lat="54.786898300" lon="-2.344293300">
+ <ele>449.000000</ele>
+ <name>TP3287</name>
+</trkpt>
+<trkpt lat="54.786901600" lon="-2.344291600">
+ <ele>449.000000</ele>
+ <name>TP3288</name>
+</trkpt>
+<trkpt lat="54.786904900" lon="-2.344293300">
+ <ele>449.000000</ele>
+ <name>TP3289</name>
+</trkpt>
+<trkpt lat="54.786886600" lon="-2.344333300">
+ <ele>449.000000</ele>
+ <name>TP3290</name>
+</trkpt>
+<trkpt lat="54.786880000" lon="-2.344345000">
+ <ele>449.000000</ele>
+ <name>TP3291</name>
+</trkpt>
+<trkpt lat="54.786878300" lon="-2.344336600">
+ <ele>449.000000</ele>
+ <name>TP3292</name>
+</trkpt>
+<trkpt lat="54.786884900" lon="-2.344324900">
+ <ele>449.000000</ele>
+ <name>TP3293</name>
+</trkpt>
+<trkpt lat="54.786889900" lon="-2.344313300">
+ <ele>449.000000</ele>
+ <name>TP3294</name>
+</trkpt>
+<trkpt lat="54.786889900" lon="-2.344304900">
+ <ele>449.000000</ele>
+ <name>TP3295</name>
+</trkpt>
+<trkpt lat="54.786888300" lon="-2.344304900">
+ <ele>449.000000</ele>
+ <name>TP3296</name>
+</trkpt>
+<trkpt lat="54.786893200" lon="-2.344301600">
+ <ele>449.000000</ele>
+ <name>TP3297</name>
+</trkpt>
+<trkpt lat="54.786901600" lon="-2.344304900">
+ <ele>449.000000</ele>
+ <name>TP3298</name>
+</trkpt>
+<trkpt lat="54.786898300" lon="-2.344304900">
+ <ele>449.000000</ele>
+ <name>TP3299</name>
+</trkpt>
+<trkpt lat="54.786888300" lon="-2.344304900">
+ <ele>449.000000</ele>
+ <name>TP3300</name>
+</trkpt>
+<trkpt lat="54.786876600" lon="-2.344313300">
+ <ele>449.000000</ele>
+ <name>TP3301</name>
+</trkpt>
+<trkpt lat="54.786891600" lon="-2.344328300">
+ <ele>449.000000</ele>
+ <name>TP3302</name>
+</trkpt>
+<trkpt lat="54.786898300" lon="-2.344338300">
+ <ele>449.000000</ele>
+ <name>TP3303</name>
+</trkpt>
+<trkpt lat="54.786906600" lon="-2.344338300">
+ <ele>449.000000</ele>
+ <name>TP3304</name>
+</trkpt>
+<trkpt lat="54.786903300" lon="-2.344330000">
+ <ele>449.000000</ele>
+ <name>TP3305</name>
+</trkpt>
+<trkpt lat="54.786908300" lon="-2.344306600">
+ <ele>449.000000</ele>
+ <name>TP3306</name>
+</trkpt>
+<trkpt lat="54.787003300" lon="-2.344278300">
+ <ele>449.000000</ele>
+ <name>TP3307</name>
+</trkpt>
+<trkpt lat="54.786969900" lon="-2.344286600">
+ <ele>449.000000</ele>
+ <name>TP3308</name>
+</trkpt>
+<trkpt lat="54.786968300" lon="-2.344308300">
+ <ele>449.000000</ele>
+ <name>TP3309</name>
+</trkpt>
+<trkpt lat="54.786958300" lon="-2.344316600">
+ <ele>449.000000</ele>
+ <name>TP3310</name>
+</trkpt>
+<trkpt lat="54.786946600" lon="-2.344318300">
+ <ele>449.000000</ele>
+ <name>TP3311</name>
+</trkpt>
+<trkpt lat="54.786939900" lon="-2.344301600">
+ <ele>449.000000</ele>
+ <name>TP3312</name>
+</trkpt>
+<trkpt lat="54.786944900" lon="-2.344304900">
+ <ele>449.000000</ele>
+ <name>TP3313</name>
+</trkpt>
+<trkpt lat="54.786936600" lon="-2.344279900">
+ <ele>449.000000</ele>
+ <name>TP3314</name>
+</trkpt>
+<trkpt lat="54.786941600" lon="-2.344248300">
+ <ele>449.000000</ele>
+ <name>TP3315</name>
+</trkpt>
+<trkpt lat="54.786936600" lon="-2.344190000">
+ <ele>450.000000</ele>
+ <name>TP3316</name>
+</trkpt>
+<trkpt lat="54.786943300" lon="-2.344168300">
+ <ele>450.000000</ele>
+ <name>TP3317</name>
+</trkpt>
+<trkpt lat="54.786931600" lon="-2.344136600">
+ <ele>450.000000</ele>
+ <name>TP3318</name>
+</trkpt>
+<trkpt lat="54.786925000" lon="-2.344129900">
+ <ele>450.000000</ele>
+ <name>TP3319</name>
+</trkpt>
+<trkpt lat="54.786914900" lon="-2.344086600">
+ <ele>450.000000</ele>
+ <name>TP3320</name>
+</trkpt>
+<trkpt lat="54.786901600" lon="-2.344269900">
+ <ele>450.000000</ele>
+ <name>TP3321</name>
+</trkpt>
+<trkpt lat="54.786826600" lon="-2.344148300">
+ <ele>450.000000</ele>
+ <name>TP3322</name>
+</trkpt>
+<trkpt lat="54.786818300" lon="-2.344149900">
+ <ele>450.000000</ele>
+ <name>TP3323</name>
+</trkpt>
+<trkpt lat="54.786838300" lon="-2.344170000">
+ <ele>450.000000</ele>
+ <name>TP3324</name>
+</trkpt>
+<trkpt lat="54.786848300" lon="-2.344190000">
+ <ele>450.000000</ele>
+ <name>TP3325</name>
+</trkpt>
+<trkpt lat="54.786859900" lon="-2.344196600">
+ <ele>450.000000</ele>
+ <name>TP3326</name>
+</trkpt>
+<trkpt lat="54.786871600" lon="-2.344194900">
+ <ele>450.000000</ele>
+ <name>TP3327</name>
+</trkpt>
+<trkpt lat="54.786874900" lon="-2.344196600">
+ <ele>450.000000</ele>
+ <name>TP3328</name>
+</trkpt>
+<trkpt lat="54.786878300" lon="-2.344201600">
+ <ele>450.000000</ele>
+ <name>TP3329</name>
+</trkpt>
+<trkpt lat="54.786874900" lon="-2.344229900">
+ <ele>450.000000</ele>
+ <name>TP3330</name>
+</trkpt>
+<trkpt lat="54.786868300" lon="-2.344256600">
+ <ele>450.000000</ele>
+ <name>TP3331</name>
+</trkpt>
+<trkpt lat="54.786865000" lon="-2.344276600">
+ <ele>450.000000</ele>
+ <name>TP3332</name>
+</trkpt>
+<trkpt lat="54.786813300" lon="-2.344339900">
+ <ele>450.000000</ele>
+ <name>TP3333</name>
+</trkpt>
+<trkpt lat="54.786803300" lon="-2.344366600">
+ <ele>450.000000</ele>
+ <name>TP3334</name>
+</trkpt>
+<trkpt lat="54.786818300" lon="-2.344313300">
+ <ele>450.000000</ele>
+ <name>TP3335</name>
+</trkpt>
+<trkpt lat="54.786838300" lon="-2.344286600">
+ <ele>450.000000</ele>
+ <name>TP3336</name>
+</trkpt>
+<trkpt lat="54.786831600" lon="-2.344283300">
+ <ele>450.000000</ele>
+ <name>TP3337</name>
+</trkpt>
+<trkpt lat="54.786828300" lon="-2.344413300">
+ <ele>450.000000</ele>
+ <name>TP3338</name>
+</trkpt>
+<trkpt lat="54.786844900" lon="-2.344371600">
+ <ele>450.000000</ele>
+ <name>TP3339</name>
+</trkpt>
+<trkpt lat="54.786813300" lon="-2.344423300">
+ <ele>450.000000</ele>
+ <name>TP3340</name>
+</trkpt>
+<trkpt lat="54.786814900" lon="-2.344421600">
+ <ele>450.000000</ele>
+ <name>TP3341</name>
+</trkpt>
+<trkpt lat="54.786768300" lon="-2.344454900">
+ <ele>450.000000</ele>
+ <name>TP3342</name>
+</trkpt>
+<trkpt lat="54.786766600" lon="-2.344470000">
+ <ele>450.000000</ele>
+ <name>TP3343</name>
+</trkpt>
+<trkpt lat="54.786738300" lon="-2.344499900">
+ <ele>450.000000</ele>
+ <name>TP3344</name>
+</trkpt>
+<trkpt lat="54.786880000" lon="-2.344496600">
+ <ele>450.000000</ele>
+ <name>TP3345</name>
+</trkpt>
+<trkpt lat="54.786899900" lon="-2.344474900">
+ <ele>450.000000</ele>
+ <name>TP3346</name>
+</trkpt>
+<trkpt lat="54.786903300" lon="-2.344474900">
+ <ele>450.000000</ele>
+ <name>TP3347</name>
+</trkpt>
+<trkpt lat="54.786904900" lon="-2.344464900">
+ <ele>450.000000</ele>
+ <name>TP3348</name>
+</trkpt>
+<trkpt lat="54.786898300" lon="-2.344476600">
+ <ele>450.000000</ele>
+ <name>TP3349</name>
+</trkpt>
+<trkpt lat="54.786981600" lon="-2.344436600">
+ <ele>450.000000</ele>
+ <name>TP3350</name>
+</trkpt>
+<trkpt lat="54.786999900" lon="-2.344416600">
+ <ele>450.000000</ele>
+ <name>TP3351</name>
+</trkpt>
+<trkpt lat="54.787196600" lon="-2.344051600">
+ <ele>450.000000</ele>
+ <name>TP3352</name>
+</trkpt>
+<trkpt lat="54.787298300" lon="-2.344039900">
+ <ele>450.000000</ele>
+ <name>TP3353</name>
+</trkpt>
+<trkpt lat="54.787316600" lon="-2.344028300">
+ <ele>450.000000</ele>
+ <name>TP3354</name>
+</trkpt>
+<trkpt lat="54.787309900" lon="-2.344038300">
+ <ele>450.000000</ele>
+ <name>TP3355</name>
+</trkpt>
+<trkpt lat="54.787303300" lon="-2.344043300">
+ <ele>450.000000</ele>
+ <name>TP3356</name>
+</trkpt>
+<trkpt lat="54.787276600" lon="-2.344073300">
+ <ele>450.000000</ele>
+ <name>TP3357</name>
+</trkpt>
+<trkpt lat="54.787266600" lon="-2.344078300">
+ <ele>450.000000</ele>
+ <name>TP3358</name>
+</trkpt>
+<trkpt lat="54.787013300" lon="-2.344248300">
+ <ele>443.000000</ele>
+ <name>TP3359</name>
+</trkpt>
+<trkpt lat="54.787016600" lon="-2.344226600">
+ <ele>443.000000</ele>
+ <name>TP3360</name>
+</trkpt>
+<trkpt lat="54.787009900" lon="-2.344219900">
+ <ele>443.000000</ele>
+ <name>TP3361</name>
+</trkpt>
+<trkpt lat="54.786973300" lon="-2.344269900">
+ <ele>443.000000</ele>
+ <name>TP3362</name>
+</trkpt>
+<trkpt lat="54.786965000" lon="-2.344278300">
+ <ele>443.000000</ele>
+ <name>TP3363</name>
+</trkpt>
+<trkpt lat="54.786991600" lon="-2.344264900">
+ <ele>443.000000</ele>
+ <name>TP3364</name>
+</trkpt>
+<trkpt lat="54.787035000" lon="-2.344244900">
+ <ele>443.000000</ele>
+ <name>TP3365</name>
+</trkpt>
+<trkpt lat="54.787043300" lon="-2.344248300">
+ <ele>443.000000</ele>
+ <name>TP3366</name>
+</trkpt>
+<trkpt lat="54.787043300" lon="-2.344254900">
+ <ele>443.000000</ele>
+ <name>TP3367</name>
+</trkpt>
+<trkpt lat="54.787039900" lon="-2.344253300">
+ <ele>443.000000</ele>
+ <name>TP3368</name>
+</trkpt>
+<trkpt lat="54.787039900" lon="-2.344233300">
+ <ele>443.000000</ele>
+ <name>TP3369</name>
+</trkpt>
+<trkpt lat="54.787036600" lon="-2.344233300">
+ <ele>443.000000</ele>
+ <name>TP3370</name>
+</trkpt>
+<trkpt lat="54.786935000" lon="-2.344365000">
+ <ele>456.000000</ele>
+ <name>TP3371</name>
+</trkpt>
+<trkpt lat="54.786936600" lon="-2.344354900">
+ <ele>456.000000</ele>
+ <name>TP3372</name>
+</trkpt>
+<trkpt lat="54.786941600" lon="-2.344345000">
+ <ele>456.000000</ele>
+ <name>TP3373</name>
+</trkpt>
+<trkpt lat="54.786951600" lon="-2.344639900">
+ <ele>456.000000</ele>
+ <name>TP3374</name>
+</trkpt>
+<trkpt lat="54.786958300" lon="-2.344591600">
+ <ele>456.000000</ele>
+ <name>TP3375</name>
+</trkpt>
+<trkpt lat="54.786961600" lon="-2.344494900">
+ <ele>456.000000</ele>
+ <name>TP3376</name>
+</trkpt>
+<trkpt lat="54.786963200" lon="-2.344386600">
+ <ele>456.000000</ele>
+ <name>TP3377</name>
+</trkpt>
+<trkpt lat="54.786954900" lon="-2.344359900">
+ <ele>456.000000</ele>
+ <name>TP3378</name>
+</trkpt>
+<trkpt lat="54.786966600" lon="-2.344313300">
+ <ele>456.000000</ele>
+ <name>TP3379</name>
+</trkpt>
+<trkpt lat="54.787036600" lon="-2.344059900">
+ <ele>456.000000</ele>
+ <name>TP3380</name>
+</trkpt>
+<trkpt lat="54.787009900" lon="-2.344146600">
+ <ele>456.000000</ele>
+ <name>TP3381</name>
+</trkpt>
+<trkpt lat="54.787018300" lon="-2.344129900">
+ <ele>456.000000</ele>
+ <name>TP3382</name>
+</trkpt>
+<trkpt lat="54.787013300" lon="-2.344121600">
+ <ele>456.000000</ele>
+ <name>TP3383</name>
+</trkpt>
+<trkpt lat="54.786995000" lon="-2.344143300">
+ <ele>456.000000</ele>
+ <name>TP3384</name>
+</trkpt>
+<trkpt lat="54.786986600" lon="-2.344159900">
+ <ele>456.000000</ele>
+ <name>TP3385</name>
+</trkpt>
+<trkpt lat="54.786971600" lon="-2.344183300">
+ <ele>456.000000</ele>
+ <name>TP3386</name>
+</trkpt>
+<trkpt lat="54.786968300" lon="-2.344190000">
+ <ele>456.000000</ele>
+ <name>TP3387</name>
+</trkpt>
+<trkpt lat="54.786965000" lon="-2.344201600">
+ <ele>456.000000</ele>
+ <name>TP3388</name>
+</trkpt>
+<trkpt lat="54.786963200" lon="-2.344213300">
+ <ele>456.000000</ele>
+ <name>TP3389</name>
+</trkpt>
+<trkpt lat="54.786968300" lon="-2.344216600">
+ <ele>456.000000</ele>
+ <name>TP3390</name>
+</trkpt>
+<trkpt lat="54.786969900" lon="-2.344223300">
+ <ele>456.000000</ele>
+ <name>TP3391</name>
+</trkpt>
+<trkpt lat="54.786974900" lon="-2.344228300">
+ <ele>456.000000</ele>
+ <name>TP3392</name>
+</trkpt>
+<trkpt lat="54.786974900" lon="-2.344238300">
+ <ele>456.000000</ele>
+ <name>TP3393</name>
+</trkpt>
+<trkpt lat="54.786976600" lon="-2.344241600">
+ <ele>456.000000</ele>
+ <name>TP3394</name>
+</trkpt>
+<trkpt lat="54.786984900" lon="-2.344246600">
+ <ele>456.000000</ele>
+ <name>TP3395</name>
+</trkpt>
+<trkpt lat="54.786988300" lon="-2.344251600">
+ <ele>456.000000</ele>
+ <name>TP3396</name>
+</trkpt>
+<trkpt lat="54.787005000" lon="-2.344243300">
+ <ele>456.000000</ele>
+ <name>TP3397</name>
+</trkpt>
+<trkpt lat="54.787009900" lon="-2.344243300">
+ <ele>456.000000</ele>
+ <name>TP3398</name>
+</trkpt>
+<trkpt lat="54.787014900" lon="-2.344238300">
+ <ele>456.000000</ele>
+ <name>TP3399</name>
+</trkpt>
+<trkpt lat="54.787016600" lon="-2.344243300">
+ <ele>456.000000</ele>
+ <name>TP3400</name>
+</trkpt>
+<trkpt lat="54.786996600" lon="-2.344279900">
+ <ele>456.000000</ele>
+ <name>TP3401</name>
+</trkpt>
+<trkpt lat="54.786978300" lon="-2.344296600">
+ <ele>456.000000</ele>
+ <name>TP3402</name>
+</trkpt>
+<trkpt lat="54.786126600" lon="-2.344638300">
+ <ele>455.000000</ele>
+ <name>TP3403</name>
+</trkpt>
+<trkpt lat="54.786188300" lon="-2.344604900">
+ <ele>455.000000</ele>
+ <name>TP3404</name>
+</trkpt>
+<trkpt lat="54.787021600" lon="-2.344298300">
+ <ele>455.000000</ele>
+ <name>TP3405</name>
+</trkpt>
+<trkpt lat="54.786998300" lon="-2.344311600">
+ <ele>455.000000</ele>
+ <name>TP3406</name>
+</trkpt>
+<trkpt lat="54.786999900" lon="-2.344304900">
+ <ele>455.000000</ele>
+ <name>TP3407</name>
+</trkpt>
+<trkpt lat="54.787003300" lon="-2.344299900">
+ <ele>455.000000</ele>
+ <name>TP3408</name>
+</trkpt>
+<trkpt lat="54.787003300" lon="-2.344298300">
+ <ele>455.000000</ele>
+ <name>TP3409</name>
+</trkpt>
+<trkpt lat="54.787005000" lon="-2.344295000">
+ <ele>455.000000</ele>
+ <name>TP3410</name>
+</trkpt>
+<trkpt lat="54.787003300" lon="-2.344298300">
+ <ele>455.000000</ele>
+ <name>TP3411</name>
+</trkpt>
+<trkpt lat="54.787008300" lon="-2.344293300">
+ <ele>455.000000</ele>
+ <name>TP3412</name>
+</trkpt>
+<trkpt lat="54.787009900" lon="-2.344293300">
+ <ele>455.000000</ele>
+ <name>TP3413</name>
+</trkpt>
+<trkpt lat="54.786819900" lon="-2.344724900">
+ <ele>455.000000</ele>
+ <name>TP3414</name>
+</trkpt>
+<trkpt lat="54.786806600" lon="-2.344715000">
+ <ele>455.000000</ele>
+ <name>TP3415</name>
+</trkpt>
+<trkpt lat="54.786823200" lon="-2.344713300">
+ <ele>455.000000</ele>
+ <name>TP3416</name>
+</trkpt>
+<trkpt lat="54.786833300" lon="-2.344701600">
+ <ele>455.000000</ele>
+ <name>TP3417</name>
+</trkpt>
+<trkpt lat="54.786843300" lon="-2.344731600">
+ <ele>455.000000</ele>
+ <name>TP3418</name>
+</trkpt>
+<trkpt lat="54.786853300" lon="-2.344731600">
+ <ele>455.000000</ele>
+ <name>TP3419</name>
+</trkpt>
+<trkpt lat="54.786895000" lon="-2.344711600">
+ <ele>455.000000</ele>
+ <name>TP3420</name>
+</trkpt>
+<trkpt lat="54.786928300" lon="-2.344684900">
+ <ele>455.000000</ele>
+ <name>TP3421</name>
+</trkpt>
+<trkpt lat="54.786944900" lon="-2.344664900">
+ <ele>455.000000</ele>
+ <name>TP3422</name>
+</trkpt>
+<trkpt lat="54.786959900" lon="-2.344648300">
+ <ele>455.000000</ele>
+ <name>TP3423</name>
+</trkpt>
+<trkpt lat="54.786973300" lon="-2.344636600">
+ <ele>455.000000</ele>
+ <name>TP3424</name>
+</trkpt>
+<trkpt lat="54.786976600" lon="-2.344628300">
+ <ele>455.000000</ele>
+ <name>TP3425</name>
+</trkpt>
+<trkpt lat="54.786983300" lon="-2.344610000">
+ <ele>455.000000</ele>
+ <name>TP3426</name>
+</trkpt>
+<trkpt lat="54.786989900" lon="-2.344590000">
+ <ele>455.000000</ele>
+ <name>TP3427</name>
+</trkpt>
+<trkpt lat="54.787009900" lon="-2.344516600">
+ <ele>455.000000</ele>
+ <name>TP3428</name>
+</trkpt>
+<trkpt lat="54.787020000" lon="-2.344471600">
+ <ele>455.000000</ele>
+ <name>TP3429</name>
+</trkpt>
+<trkpt lat="54.787033200" lon="-2.344428300">
+ <ele>455.000000</ele>
+ <name>TP3430</name>
+</trkpt>
+<trkpt lat="54.787050000" lon="-2.344380000">
+ <ele>455.000000</ele>
+ <name>TP3431</name>
+</trkpt>
+<trkpt lat="54.787086600" lon="-2.344288300">
+ <ele>455.000000</ele>
+ <name>TP3432</name>
+</trkpt>
+<trkpt lat="54.787088300" lon="-2.344279900">
+ <ele>455.000000</ele>
+ <name>TP3433</name>
+</trkpt>
+<trkpt lat="54.787066600" lon="-2.344338300">
+ <ele>456.000000</ele>
+ <name>TP3434</name>
+</trkpt>
+<trkpt lat="54.787058300" lon="-2.344339900">
+ <ele>456.000000</ele>
+ <name>TP3435</name>
+</trkpt>
+<trkpt lat="54.787033200" lon="-2.344321600">
+ <ele>456.000000</ele>
+ <name>TP3436</name>
+</trkpt>
+<trkpt lat="54.787009900" lon="-2.344295000">
+ <ele>456.000000</ele>
+ <name>TP3437</name>
+</trkpt>
+<trkpt lat="54.786991600" lon="-2.344275000">
+ <ele>456.000000</ele>
+ <name>TP3438</name>
+</trkpt>
+<trkpt lat="54.786980000" lon="-2.344313300">
+ <ele>456.000000</ele>
+ <name>TP3439</name>
+</trkpt>
+<trkpt lat="54.787048300" lon="-2.344380000">
+ <ele>456.000000</ele>
+ <name>TP3440</name>
+</trkpt>
+<trkpt lat="54.786969900" lon="-2.344431600">
+ <ele>456.000000</ele>
+ <name>TP3441</name>
+</trkpt>
+<trkpt lat="54.786950000" lon="-2.344433300">
+ <ele>456.000000</ele>
+ <name>TP3442</name>
+</trkpt>
+<trkpt lat="54.786925000" lon="-2.344436600">
+ <ele>456.000000</ele>
+ <name>TP3443</name>
+</trkpt>
+<trkpt lat="54.786904900" lon="-2.344443300">
+ <ele>456.000000</ele>
+ <name>TP3444</name>
+</trkpt>
+<trkpt lat="54.786889900" lon="-2.344453300">
+ <ele>456.000000</ele>
+ <name>TP3445</name>
+</trkpt>
+<trkpt lat="54.786878300" lon="-2.344443300">
+ <ele>456.000000</ele>
+ <name>TP3446</name>
+</trkpt>
+<trkpt lat="54.786865000" lon="-2.344438300">
+ <ele>456.000000</ele>
+ <name>TP3447</name>
+</trkpt>
+<trkpt lat="54.786871600" lon="-2.344120000">
+ <ele>456.000000</ele>
+ <name>TP3448</name>
+</trkpt>
+<trkpt lat="54.786874900" lon="-2.344109900">
+ <ele>456.000000</ele>
+ <name>TP3449</name>
+</trkpt>
+<trkpt lat="54.786880000" lon="-2.344114900">
+ <ele>456.000000</ele>
+ <name>TP3450</name>
+</trkpt>
+<trkpt lat="54.786861600" lon="-2.344105000">
+ <ele>456.000000</ele>
+ <name>TP3451</name>
+</trkpt>
+<trkpt lat="54.786828300" lon="-2.344100000">
+ <ele>456.000000</ele>
+ <name>TP3452</name>
+</trkpt>
+<trkpt lat="54.786801600" lon="-2.344109900">
+ <ele>456.000000</ele>
+ <name>TP3453</name>
+</trkpt>
+<trkpt lat="54.786774900" lon="-2.344135000">
+ <ele>456.000000</ele>
+ <name>TP3454</name>
+</trkpt>
+<trkpt lat="54.786783300" lon="-2.344143300">
+ <ele>456.000000</ele>
+ <name>TP3455</name>
+</trkpt>
+<trkpt lat="54.786788300" lon="-2.344156600">
+ <ele>456.000000</ele>
+ <name>TP3456</name>
+</trkpt>
+<trkpt lat="54.786786600" lon="-2.344176600">
+ <ele>456.000000</ele>
+ <name>TP3457</name>
+</trkpt>
+<trkpt lat="54.786831600" lon="-2.344208300">
+ <ele>456.000000</ele>
+ <name>TP3458</name>
+</trkpt>
+<trkpt lat="54.786859900" lon="-2.344211600">
+ <ele>456.000000</ele>
+ <name>TP3459</name>
+</trkpt>
+<trkpt lat="54.786874900" lon="-2.344221600">
+ <ele>456.000000</ele>
+ <name>TP3460</name>
+</trkpt>
+<trkpt lat="54.786899900" lon="-2.344225000">
+ <ele>456.000000</ele>
+ <name>TP3461</name>
+</trkpt>
+<trkpt lat="54.786928300" lon="-2.344226600">
+ <ele>456.000000</ele>
+ <name>TP3462</name>
+</trkpt>
+<trkpt lat="54.786948300" lon="-2.344228300">
+ <ele>456.000000</ele>
+ <name>TP3463</name>
+</trkpt>
+<trkpt lat="54.786965000" lon="-2.344228300">
+ <ele>456.000000</ele>
+ <name>TP3464</name>
+</trkpt>
+<trkpt lat="54.786989900" lon="-2.344226600">
+ <ele>456.000000</ele>
+ <name>TP3465</name>
+</trkpt>
+<trkpt lat="54.787028300" lon="-2.344221600">
+ <ele>456.000000</ele>
+ <name>TP3466</name>
+</trkpt>
+<trkpt lat="54.787086600" lon="-2.344208300">
+ <ele>456.000000</ele>
+ <name>TP3467</name>
+</trkpt>
+<trkpt lat="54.787279900" lon="-2.344156600">
+ <ele>456.000000</ele>
+ <name>TP3468</name>
+</trkpt>
+<trkpt lat="54.787203300" lon="-2.344050000">
+ <ele>456.000000</ele>
+ <name>TP3469</name>
+</trkpt>
+<trkpt lat="54.787208300" lon="-2.344050000">
+ <ele>456.000000</ele>
+ <name>TP3470</name>
+</trkpt>
+<trkpt lat="54.787208300" lon="-2.344088300">
+ <ele>456.000000</ele>
+ <name>TP3471</name>
+</trkpt>
+<trkpt lat="54.787176600" lon="-2.344218300">
+ <ele>456.000000</ele>
+ <name>TP3472</name>
+</trkpt>
+<trkpt lat="54.787160000" lon="-2.344225000">
+ <ele>456.000000</ele>
+ <name>TP3473</name>
+</trkpt>
+<trkpt lat="54.787154900" lon="-2.344229900">
+ <ele>456.000000</ele>
+ <name>TP3474</name>
+</trkpt>
+<trkpt lat="54.787154900" lon="-2.344233300">
+ <ele>456.000000</ele>
+ <name>TP3475</name>
+</trkpt>
+<trkpt lat="54.787151600" lon="-2.344143300">
+ <ele>456.000000</ele>
+ <name>TP3476</name>
+</trkpt>
+<trkpt lat="54.787146600" lon="-2.344143300">
+ <ele>456.000000</ele>
+ <name>TP3477</name>
+</trkpt>
+<trkpt lat="54.787141600" lon="-2.344143300">
+ <ele>456.000000</ele>
+ <name>TP3478</name>
+</trkpt>
+<trkpt lat="54.787136600" lon="-2.344141600">
+ <ele>456.000000</ele>
+ <name>TP3479</name>
+</trkpt>
+<trkpt lat="54.787131600" lon="-2.344139900">
+ <ele>456.000000</ele>
+ <name>TP3480</name>
+</trkpt>
+<trkpt lat="54.787128300" lon="-2.344136600">
+ <ele>456.000000</ele>
+ <name>TP3481</name>
+</trkpt>
+<trkpt lat="54.787128300" lon="-2.344138300">
+ <ele>456.000000</ele>
+ <name>TP3482</name>
+</trkpt>
+<trkpt lat="54.787063300" lon="-2.344096600">
+ <ele>456.000000</ele>
+ <name>TP3483</name>
+</trkpt>
+<trkpt lat="54.787073300" lon="-2.344101600">
+ <ele>456.000000</ele>
+ <name>TP3484</name>
+</trkpt>
+<trkpt lat="54.787063300" lon="-2.344114900">
+ <ele>456.000000</ele>
+ <name>TP3485</name>
+</trkpt>
+<trkpt lat="54.787068300" lon="-2.344111600">
+ <ele>456.000000</ele>
+ <name>TP3486</name>
+</trkpt>
+<trkpt lat="54.787071600" lon="-2.344109900">
+ <ele>456.000000</ele>
+ <name>TP3487</name>
+</trkpt>
+<trkpt lat="54.787079900" lon="-2.344103300">
+ <ele>456.000000</ele>
+ <name>TP3488</name>
+</trkpt>
+<trkpt lat="54.787090000" lon="-2.344105000">
+ <ele>456.000000</ele>
+ <name>TP3489</name>
+</trkpt>
+<trkpt lat="54.787098300" lon="-2.344106600">
+ <ele>456.000000</ele>
+ <name>TP3490</name>
+</trkpt>
+<trkpt lat="54.787123300" lon="-2.344108300">
+ <ele>456.000000</ele>
+ <name>TP3491</name>
+</trkpt>
+<trkpt lat="54.787143300" lon="-2.344109900">
+ <ele>456.000000</ele>
+ <name>TP3492</name>
+</trkpt>
+<trkpt lat="54.787086600" lon="-2.344128300">
+ <ele>456.000000</ele>
+ <name>TP3493</name>
+</trkpt>
+<trkpt lat="54.787084900" lon="-2.344118300">
+ <ele>456.000000</ele>
+ <name>TP3494</name>
+</trkpt>
+<trkpt lat="54.787078300" lon="-2.344120000">
+ <ele>456.000000</ele>
+ <name>TP3495</name>
+</trkpt>
+<trkpt lat="54.787075000" lon="-2.344124900">
+ <ele>456.000000</ele>
+ <name>TP3496</name>
+</trkpt>
+<trkpt lat="54.787066600" lon="-2.344135000">
+ <ele>456.000000</ele>
+ <name>TP3497</name>
+</trkpt>
+<trkpt lat="54.787065000" lon="-2.344135000">
+ <ele>456.000000</ele>
+ <name>TP3498</name>
+</trkpt>
+<trkpt lat="54.787058300" lon="-2.344148300">
+ <ele>456.000000</ele>
+ <name>TP3499</name>
+</trkpt>
+<trkpt lat="54.787054900" lon="-2.344144900">
+ <ele>456.000000</ele>
+ <name>TP3500</name>
+</trkpt>
+<trkpt lat="54.787050000" lon="-2.344151600">
+ <ele>456.000000</ele>
+ <name>TP3501</name>
+</trkpt>
+<trkpt lat="54.787043300" lon="-2.344151600">
+ <ele>456.000000</ele>
+ <name>TP3502</name>
+</trkpt>
+<trkpt lat="54.787008300" lon="-2.344194900">
+ <ele>456.000000</ele>
+ <name>TP3503</name>
+</trkpt>
+<trkpt lat="54.787005000" lon="-2.344208300">
+ <ele>456.000000</ele>
+ <name>TP3504</name>
+</trkpt>
+<trkpt lat="54.787003300" lon="-2.344213300">
+ <ele>456.000000</ele>
+ <name>TP3505</name>
+</trkpt>
+<trkpt lat="54.787054900" lon="-2.343601600">
+ <ele>456.000000</ele>
+ <name>TP3506</name>
+</trkpt>
+<trkpt lat="54.787051600" lon="-2.343583300">
+ <ele>456.000000</ele>
+ <name>TP3507</name>
+</trkpt>
+<trkpt lat="54.787014900" lon="-2.343826600">
+ <ele>456.000000</ele>
+ <name>TP3508</name>
+</trkpt>
+<trkpt lat="54.787009900" lon="-2.343834900">
+ <ele>456.000000</ele>
+ <name>TP3509</name>
+</trkpt>
+<trkpt lat="54.787003300" lon="-2.343836600">
+ <ele>456.000000</ele>
+ <name>TP3510</name>
+</trkpt>
+<trkpt lat="54.786998300" lon="-2.343841600">
+ <ele>456.000000</ele>
+ <name>TP3511</name>
+</trkpt>
+<trkpt lat="54.786995000" lon="-2.343851600">
+ <ele>456.000000</ele>
+ <name>TP3512</name>
+</trkpt>
+<trkpt lat="54.786989900" lon="-2.343868300">
+ <ele>456.000000</ele>
+ <name>TP3513</name>
+</trkpt>
+<trkpt lat="54.786986600" lon="-2.343903300">
+ <ele>456.000000</ele>
+ <name>TP3514</name>
+</trkpt>
+<trkpt lat="54.786978300" lon="-2.343925000">
+ <ele>456.000000</ele>
+ <name>TP3515</name>
+</trkpt>
+<trkpt lat="54.786981600" lon="-2.343919900">
+ <ele>456.000000</ele>
+ <name>TP3516</name>
+</trkpt>
+<trkpt lat="54.786980000" lon="-2.343926600">
+ <ele>456.000000</ele>
+ <name>TP3517</name>
+</trkpt>
+<trkpt lat="54.786961600" lon="-2.343916600">
+ <ele>456.000000</ele>
+ <name>TP3518</name>
+</trkpt>
+<trkpt lat="54.786954900" lon="-2.343869900">
+ <ele>456.000000</ele>
+ <name>TP3519</name>
+</trkpt>
+<trkpt lat="54.786966600" lon="-2.343696600">
+ <ele>456.000000</ele>
+ <name>TP3520</name>
+</trkpt>
+<trkpt lat="54.786810000" lon="-2.344353300">
+ <ele>456.000000</ele>
+ <name>TP3521</name>
+</trkpt>
+<trkpt lat="54.786766600" lon="-2.344471600">
+ <ele>456.000000</ele>
+ <name>TP3522</name>
+</trkpt>
+<trkpt lat="54.786664900" lon="-2.344648300">
+ <ele>456.000000</ele>
+ <name>TP3523</name>
+</trkpt>
+<trkpt lat="54.786673300" lon="-2.344603300">
+ <ele>456.000000</ele>
+ <name>TP3524</name>
+</trkpt>
+<trkpt lat="54.786686600" lon="-2.344575000">
+ <ele>456.000000</ele>
+ <name>TP3525</name>
+</trkpt>
+<trkpt lat="54.786694900" lon="-2.344558300">
+ <ele>456.000000</ele>
+ <name>TP3526</name>
+</trkpt>
+<trkpt lat="54.786963200" lon="-2.344219900">
+ <ele>456.000000</ele>
+ <name>TP3527</name>
+</trkpt>
+<trkpt lat="54.786981600" lon="-2.344196600">
+ <ele>456.000000</ele>
+ <name>TP3528</name>
+</trkpt>
+<trkpt lat="54.786996600" lon="-2.344174900">
+ <ele>456.000000</ele>
+ <name>TP3529</name>
+</trkpt>
+<trkpt lat="54.787031600" lon="-2.344076600">
+ <ele>456.000000</ele>
+ <name>TP3530</name>
+</trkpt>
+<trkpt lat="54.787023300" lon="-2.344079900">
+ <ele>456.000000</ele>
+ <name>TP3531</name>
+</trkpt>
+<trkpt lat="54.787014900" lon="-2.344088300">
+ <ele>456.000000</ele>
+ <name>TP3532</name>
+</trkpt>
+<trkpt lat="54.787048300" lon="-2.344088300">
+ <ele>456.000000</ele>
+ <name>TP3533</name>
+</trkpt>
+<trkpt lat="54.787101600" lon="-2.344065000">
+ <ele>456.000000</ele>
+ <name>TP3534</name>
+</trkpt>
+<trkpt lat="54.787188300" lon="-2.343995000">
+ <ele>456.000000</ele>
+ <name>TP3535</name>
+</trkpt>
+<trkpt lat="54.787254900" lon="-2.343914900">
+ <ele>456.000000</ele>
+ <name>TP3536</name>
+</trkpt>
+<trkpt lat="54.787278300" lon="-2.343876600">
+ <ele>456.000000</ele>
+ <name>TP3537</name>
+</trkpt>
+<trkpt lat="54.787268300" lon="-2.343875000">
+ <ele>456.000000</ele>
+ <name>TP3538</name>
+</trkpt>
+<trkpt lat="54.787254900" lon="-2.343896600">
+ <ele>456.000000</ele>
+ <name>TP3539</name>
+</trkpt>
+<trkpt lat="54.787249900" lon="-2.343838300">
+ <ele>456.000000</ele>
+ <name>TP3540</name>
+</trkpt>
+<trkpt lat="54.787260000" lon="-2.343818300">
+ <ele>456.000000</ele>
+ <name>TP3541</name>
+</trkpt>
+<trkpt lat="54.786896600" lon="-2.343774900">
+ <ele>456.000000</ele>
+ <name>TP3542</name>
+</trkpt>
+<trkpt lat="54.786906600" lon="-2.343748300">
+ <ele>456.000000</ele>
+ <name>TP3543</name>
+</trkpt>
+<trkpt lat="54.786929900" lon="-2.343796600">
+ <ele>456.000000</ele>
+ <name>TP3544</name>
+</trkpt>
+<trkpt lat="54.786929900" lon="-2.343828300">
+ <ele>456.000000</ele>
+ <name>TP3545</name>
+</trkpt>
+<trkpt lat="54.786995000" lon="-2.344149900">
+ <ele>456.000000</ele>
+ <name>TP3546</name>
+</trkpt>
+<trkpt lat="54.786984900" lon="-2.344133300">
+ <ele>456.000000</ele>
+ <name>TP3547</name>
+</trkpt>
+<trkpt lat="54.786963200" lon="-2.344135000">
+ <ele>456.000000</ele>
+ <name>TP3548</name>
+</trkpt>
+<trkpt lat="54.786953300" lon="-2.344133300">
+ <ele>456.000000</ele>
+ <name>TP3549</name>
+</trkpt>
+<trkpt lat="54.786959900" lon="-2.344139900">
+ <ele>456.000000</ele>
+ <name>TP3550</name>
+</trkpt>
+<trkpt lat="54.786966600" lon="-2.344131600">
+ <ele>456.000000</ele>
+ <name>TP3551</name>
+</trkpt>
+<trkpt lat="54.786954900" lon="-2.344120000">
+ <ele>456.000000</ele>
+ <name>TP3552</name>
+</trkpt>
+<trkpt lat="54.786951600" lon="-2.344114900">
+ <ele>456.000000</ele>
+ <name>TP3553</name>
+</trkpt>
+<trkpt lat="54.786950000" lon="-2.344126600">
+ <ele>456.000000</ele>
+ <name>TP3554</name>
+</trkpt>
+<trkpt lat="54.786944900" lon="-2.344120000">
+ <ele>456.000000</ele>
+ <name>TP3555</name>
+</trkpt>
+<trkpt lat="54.786944900" lon="-2.344111600">
+ <ele>456.000000</ele>
+ <name>TP3556</name>
+</trkpt>
+<trkpt lat="54.786946600" lon="-2.344114900">
+ <ele>456.000000</ele>
+ <name>TP3557</name>
+</trkpt>
+<trkpt lat="54.786950000" lon="-2.344123300">
+ <ele>456.000000</ele>
+ <name>TP3558</name>
+</trkpt>
+<trkpt lat="54.786943300" lon="-2.344129900">
+ <ele>456.000000</ele>
+ <name>TP3559</name>
+</trkpt>
+<trkpt lat="54.786919900" lon="-2.344136600">
+ <ele>456.000000</ele>
+ <name>TP3560</name>
+</trkpt>
+<trkpt lat="54.786901600" lon="-2.344139900">
+ <ele>456.000000</ele>
+ <name>TP3561</name>
+</trkpt>
+<trkpt lat="54.786893200" lon="-2.344139900">
+ <ele>456.000000</ele>
+ <name>TP3562</name>
+</trkpt>
+<trkpt lat="54.786888300" lon="-2.344133300">
+ <ele>456.000000</ele>
+ <name>TP3563</name>
+</trkpt>
+<trkpt lat="54.786876600" lon="-2.344118300">
+ <ele>456.000000</ele>
+ <name>TP3564</name>
+</trkpt>
+<trkpt lat="54.786866600" lon="-2.344100000">
+ <ele>456.000000</ele>
+ <name>TP3565</name>
+</trkpt>
+<trkpt lat="54.786876600" lon="-2.344094900">
+ <ele>456.000000</ele>
+ <name>TP3566</name>
+</trkpt>
+<trkpt lat="54.786883300" lon="-2.344105000">
+ <ele>456.000000</ele>
+ <name>TP3567</name>
+</trkpt>
+<trkpt lat="54.786895000" lon="-2.344121600">
+ <ele>456.000000</ele>
+ <name>TP3568</name>
+</trkpt>
+<trkpt lat="54.786903300" lon="-2.344138300">
+ <ele>456.000000</ele>
+ <name>TP3569</name>
+</trkpt>
+<trkpt lat="54.786914900" lon="-2.344155000">
+ <ele>456.000000</ele>
+ <name>TP3570</name>
+</trkpt>
+<trkpt lat="54.786926600" lon="-2.344179900">
+ <ele>456.000000</ele>
+ <name>TP3571</name>
+</trkpt>
+<trkpt lat="54.786938300" lon="-2.344206600">
+ <ele>456.000000</ele>
+ <name>TP3572</name>
+</trkpt>
+<trkpt lat="54.786951600" lon="-2.344226600">
+ <ele>456.000000</ele>
+ <name>TP3573</name>
+</trkpt>
+<trkpt lat="54.786958300" lon="-2.344244900">
+ <ele>456.000000</ele>
+ <name>TP3574</name>
+</trkpt>
+<trkpt lat="54.786968300" lon="-2.344258300">
+ <ele>456.000000</ele>
+ <name>TP3575</name>
+</trkpt>
+<trkpt lat="54.786966600" lon="-2.344284900">
+ <ele>456.000000</ele>
+ <name>TP3576</name>
+</trkpt>
+<trkpt lat="54.786969900" lon="-2.344304900">
+ <ele>456.000000</ele>
+ <name>TP3577</name>
+</trkpt>
+<trkpt lat="54.786973300" lon="-2.344324900">
+ <ele>456.000000</ele>
+ <name>TP3578</name>
+</trkpt>
+<trkpt lat="54.786976600" lon="-2.344341600">
+ <ele>456.000000</ele>
+ <name>TP3579</name>
+</trkpt>
+<trkpt lat="54.786981600" lon="-2.344359900">
+ <ele>456.000000</ele>
+ <name>TP3580</name>
+</trkpt>
+<trkpt lat="54.786996600" lon="-2.344381600">
+ <ele>456.000000</ele>
+ <name>TP3581</name>
+</trkpt>
+<trkpt lat="54.787006600" lon="-2.344403300">
+ <ele>456.000000</ele>
+ <name>TP3582</name>
+</trkpt>
+<trkpt lat="54.787003300" lon="-2.344426600">
+ <ele>456.000000</ele>
+ <name>TP3583</name>
+</trkpt>
+<trkpt lat="54.786998300" lon="-2.344433300">
+ <ele>456.000000</ele>
+ <name>TP3584</name>
+</trkpt>
+<trkpt lat="54.786996600" lon="-2.344441600">
+ <ele>456.000000</ele>
+ <name>TP3585</name>
+</trkpt>
+<trkpt lat="54.786995000" lon="-2.344448300">
+ <ele>456.000000</ele>
+ <name>TP3586</name>
+</trkpt>
+<trkpt lat="54.786881600" lon="-2.344291600">
+ <ele>456.000000</ele>
+ <name>TP3587</name>
+</trkpt>
+<trkpt lat="54.786848300" lon="-2.344284900">
+ <ele>456.000000</ele>
+ <name>TP3588</name>
+</trkpt>
+<trkpt lat="54.786843300" lon="-2.344286600">
+ <ele>456.000000</ele>
+ <name>TP3589</name>
+</trkpt>
+<trkpt lat="54.786843300" lon="-2.344286600">
+ <ele>456.000000</ele>
+ <name>TP3590</name>
+</trkpt>
+<trkpt lat="54.786836600" lon="-2.344286600">
+ <ele>456.000000</ele>
+ <name>TP3591</name>
+</trkpt>
+<trkpt lat="54.786838300" lon="-2.344291600">
+ <ele>456.000000</ele>
+ <name>TP3592</name>
+</trkpt>
+<trkpt lat="54.786846600" lon="-2.344289900">
+ <ele>456.000000</ele>
+ <name>TP3593</name>
+</trkpt>
+<trkpt lat="54.786833300" lon="-2.344288300">
+ <ele>456.000000</ele>
+ <name>TP3594</name>
+</trkpt>
+<trkpt lat="54.786836600" lon="-2.344299900">
+ <ele>456.000000</ele>
+ <name>TP3595</name>
+</trkpt>
+<trkpt lat="54.786840000" lon="-2.344296600">
+ <ele>456.000000</ele>
+ <name>TP3596</name>
+</trkpt>
+<trkpt lat="54.786843300" lon="-2.344298300">
+ <ele>456.000000</ele>
+ <name>TP3597</name>
+</trkpt>
+<trkpt lat="54.786858300" lon="-2.344298300">
+ <ele>456.000000</ele>
+ <name>TP3598</name>
+</trkpt>
+<trkpt lat="54.786865000" lon="-2.344251600">
+ <ele>456.000000</ele>
+ <name>TP3599</name>
+</trkpt>
+<trkpt lat="54.786869900" lon="-2.344240000">
+ <ele>456.000000</ele>
+ <name>TP3600</name>
+</trkpt>
+<trkpt lat="54.786866600" lon="-2.344234900">
+ <ele>456.000000</ele>
+ <name>TP3601</name>
+</trkpt>
+<trkpt lat="54.786833300" lon="-2.344253300">
+ <ele>456.000000</ele>
+ <name>TP3602</name>
+</trkpt>
+<trkpt lat="54.786871600" lon="-2.344291600">
+ <ele>456.000000</ele>
+ <name>TP3603</name>
+</trkpt>
+<trkpt lat="54.786840000" lon="-2.344301600">
+ <ele>456.000000</ele>
+ <name>TP3604</name>
+</trkpt>
+<trkpt lat="54.786956600" lon="-2.344258300">
+ <ele>456.000000</ele>
+ <name>TP3605</name>
+</trkpt>
+<trkpt lat="54.786944900" lon="-2.344246600">
+ <ele>456.000000</ele>
+ <name>TP3606</name>
+</trkpt>
+<trkpt lat="54.786938300" lon="-2.344244900">
+ <ele>456.000000</ele>
+ <name>TP3607</name>
+</trkpt>
+<trkpt lat="54.786951600" lon="-2.344254900">
+ <ele>456.000000</ele>
+ <name>TP3608</name>
+</trkpt>
+<trkpt lat="54.786953300" lon="-2.344258300">
+ <ele>456.000000</ele>
+ <name>TP3609</name>
+</trkpt>
+<trkpt lat="54.786954900" lon="-2.344263300">
+ <ele>456.000000</ele>
+ <name>TP3610</name>
+</trkpt>
+<trkpt lat="54.786961600" lon="-2.344281600">
+ <ele>456.000000</ele>
+ <name>TP3611</name>
+</trkpt>
+<trkpt lat="54.786963200" lon="-2.344283300">
+ <ele>456.000000</ele>
+ <name>TP3612</name>
+</trkpt>
+<trkpt lat="54.786961600" lon="-2.344281600">
+ <ele>456.000000</ele>
+ <name>TP3613</name>
+</trkpt>
+<trkpt lat="54.786958300" lon="-2.344278300">
+ <ele>456.000000</ele>
+ <name>TP3614</name>
+</trkpt>
+<trkpt lat="54.786959900" lon="-2.344281600">
+ <ele>456.000000</ele>
+ <name>TP3615</name>
+</trkpt>
+<trkpt lat="54.786961600" lon="-2.344284900">
+ <ele>456.000000</ele>
+ <name>TP3616</name>
+</trkpt>
+<trkpt lat="54.786959900" lon="-2.344284900">
+ <ele>456.000000</ele>
+ <name>TP3617</name>
+</trkpt>
+<trkpt lat="54.786959900" lon="-2.344283300">
+ <ele>456.000000</ele>
+ <name>TP3618</name>
+</trkpt>
+<trkpt lat="54.786956600" lon="-2.344279900">
+ <ele>456.000000</ele>
+ <name>TP3619</name>
+</trkpt>
+<trkpt lat="54.786956600" lon="-2.344281600">
+ <ele>456.000000</ele>
+ <name>TP3620</name>
+</trkpt>
+<trkpt lat="54.786956600" lon="-2.344276600">
+ <ele>456.000000</ele>
+ <name>TP3621</name>
+</trkpt>
+<trkpt lat="54.786941600" lon="-2.344276600">
+ <ele>456.000000</ele>
+ <name>TP3622</name>
+</trkpt>
+<trkpt lat="54.786939900" lon="-2.344283300">
+ <ele>456.000000</ele>
+ <name>TP3623</name>
+</trkpt>
+<trkpt lat="54.786901600" lon="-2.344276600">
+ <ele>456.000000</ele>
+ <name>TP3624</name>
+</trkpt>
+<trkpt lat="54.786878300" lon="-2.344299900">
+ <ele>456.000000</ele>
+ <name>TP3625</name>
+</trkpt>
+<trkpt lat="54.786863300" lon="-2.344311600">
+ <ele>456.000000</ele>
+ <name>TP3626</name>
+</trkpt>
+<trkpt lat="54.786848300" lon="-2.344339900">
+ <ele>456.000000</ele>
+ <name>TP3627</name>
+</trkpt>
+<trkpt lat="54.786858300" lon="-2.344365000">
+ <ele>456.000000</ele>
+ <name>TP3628</name>
+</trkpt>
+<trkpt lat="54.786859900" lon="-2.344366600">
+ <ele>456.000000</ele>
+ <name>TP3629</name>
+</trkpt>
+<trkpt lat="54.786853300" lon="-2.344359900">
+ <ele>456.000000</ele>
+ <name>TP3630</name>
+</trkpt>
+<trkpt lat="54.786855000" lon="-2.344358300">
+ <ele>456.000000</ele>
+ <name>TP3631</name>
+</trkpt>
+<trkpt lat="54.786855000" lon="-2.344338300">
+ <ele>456.000000</ele>
+ <name>TP3632</name>
+</trkpt>
+<trkpt lat="54.786858300" lon="-2.344324900">
+ <ele>456.000000</ele>
+ <name>TP3633</name>
+</trkpt>
+<trkpt lat="54.786861600" lon="-2.344306600">
+ <ele>456.000000</ele>
+ <name>TP3634</name>
+</trkpt>
+<trkpt lat="54.786859900" lon="-2.344288300">
+ <ele>456.000000</ele>
+ <name>TP3635</name>
+</trkpt>
+<trkpt lat="54.786858300" lon="-2.344266600">
+ <ele>456.000000</ele>
+ <name>TP3636</name>
+</trkpt>
+<trkpt lat="54.786856600" lon="-2.344261600">
+ <ele>456.000000</ele>
+ <name>TP3637</name>
+</trkpt>
+<trkpt lat="54.786856600" lon="-2.344256600">
+ <ele>456.000000</ele>
+ <name>TP3638</name>
+</trkpt>
+<trkpt lat="54.786859900" lon="-2.344268300">
+ <ele>456.000000</ele>
+ <name>TP3639</name>
+</trkpt>
+<trkpt lat="54.786873300" lon="-2.344268300">
+ <ele>456.000000</ele>
+ <name>TP3640</name>
+</trkpt>
+<trkpt lat="54.786876600" lon="-2.344273300">
+ <ele>456.000000</ele>
+ <name>TP3641</name>
+</trkpt>
+<trkpt lat="54.786878300" lon="-2.344264900">
+ <ele>456.000000</ele>
+ <name>TP3642</name>
+</trkpt>
+<trkpt lat="54.786884900" lon="-2.344258300">
+ <ele>456.000000</ele>
+ <name>TP3643</name>
+</trkpt>
+<trkpt lat="54.786899900" lon="-2.344243300">
+ <ele>456.000000</ele>
+ <name>TP3644</name>
+</trkpt>
+<trkpt lat="54.786906600" lon="-2.344234900">
+ <ele>456.000000</ele>
+ <name>TP3645</name>
+</trkpt>
+<trkpt lat="54.786919900" lon="-2.344229900">
+ <ele>456.000000</ele>
+ <name>TP3646</name>
+</trkpt>
+<trkpt lat="54.786935000" lon="-2.344219900">
+ <ele>456.000000</ele>
+ <name>TP3647</name>
+</trkpt>
+<trkpt lat="54.786944900" lon="-2.344219900">
+ <ele>456.000000</ele>
+ <name>TP3648</name>
+</trkpt>
+<trkpt lat="54.786953300" lon="-2.344216600">
+ <ele>456.000000</ele>
+ <name>TP3649</name>
+</trkpt>
+<trkpt lat="54.786966600" lon="-2.344209900">
+ <ele>456.000000</ele>
+ <name>TP3650</name>
+</trkpt>
+<trkpt lat="54.786971600" lon="-2.344206600">
+ <ele>456.000000</ele>
+ <name>TP3651</name>
+</trkpt>
+<trkpt lat="54.786976600" lon="-2.344223300">
+ <ele>456.000000</ele>
+ <name>TP3652</name>
+</trkpt>
+<trkpt lat="54.786983300" lon="-2.344233300">
+ <ele>456.000000</ele>
+ <name>TP3653</name>
+</trkpt>
+<trkpt lat="54.786969900" lon="-2.344248300">
+ <ele>456.000000</ele>
+ <name>TP3654</name>
+</trkpt>
+<trkpt lat="54.786946600" lon="-2.344260000">
+ <ele>456.000000</ele>
+ <name>TP3655</name>
+</trkpt>
+<trkpt lat="54.786935000" lon="-2.344268300">
+ <ele>456.000000</ele>
+ <name>TP3656</name>
+</trkpt>
+<trkpt lat="54.786938300" lon="-2.344269900">
+ <ele>456.000000</ele>
+ <name>TP3657</name>
+</trkpt>
+<trkpt lat="54.786943300" lon="-2.344275000">
+ <ele>456.000000</ele>
+ <name>TP3658</name>
+</trkpt>
+<trkpt lat="54.786948300" lon="-2.344283300">
+ <ele>456.000000</ele>
+ <name>TP3659</name>
+</trkpt>
+<trkpt lat="54.786951600" lon="-2.344288300">
+ <ele>456.000000</ele>
+ <name>TP3660</name>
+</trkpt>
+<trkpt lat="54.786950000" lon="-2.344293300">
+ <ele>456.000000</ele>
+ <name>TP3661</name>
+</trkpt>
+<trkpt lat="54.786954900" lon="-2.344299900">
+ <ele>456.000000</ele>
+ <name>TP3662</name>
+</trkpt>
+<trkpt lat="54.786959900" lon="-2.344298300">
+ <ele>456.000000</ele>
+ <name>TP3663</name>
+</trkpt>
+<trkpt lat="54.786956600" lon="-2.344298300">
+ <ele>456.000000</ele>
+ <name>TP3664</name>
+</trkpt>
+<trkpt lat="54.786953300" lon="-2.344296600">
+ <ele>456.000000</ele>
+ <name>TP3665</name>
+</trkpt>
+<trkpt lat="54.786969900" lon="-2.344281600">
+ <ele>456.000000</ele>
+ <name>TP3666</name>
+</trkpt>
+<trkpt lat="54.786963200" lon="-2.344279900">
+ <ele>456.000000</ele>
+ <name>TP3667</name>
+</trkpt>
+<trkpt lat="54.786959900" lon="-2.344281600">
+ <ele>456.000000</ele>
+ <name>TP3668</name>
+</trkpt>
+<trkpt lat="54.786951600" lon="-2.344286600">
+ <ele>456.000000</ele>
+ <name>TP3669</name>
+</trkpt>
+<trkpt lat="54.786950000" lon="-2.344284900">
+ <ele>456.000000</ele>
+ <name>TP3670</name>
+</trkpt>
+<trkpt lat="54.786938300" lon="-2.344284900">
+ <ele>456.000000</ele>
+ <name>TP3671</name>
+</trkpt>
+<trkpt lat="54.786933300" lon="-2.344284900">
+ <ele>456.000000</ele>
+ <name>TP3672</name>
+</trkpt>
+<trkpt lat="54.786953300" lon="-2.344263300">
+ <ele>456.000000</ele>
+ <name>TP3673</name>
+</trkpt>
+<trkpt lat="54.786943300" lon="-2.344269900">
+ <ele>456.000000</ele>
+ <name>TP3674</name>
+</trkpt>
+<trkpt lat="54.786938300" lon="-2.344269900">
+ <ele>456.000000</ele>
+ <name>TP3675</name>
+</trkpt>
+<trkpt lat="54.786933300" lon="-2.344266600">
+ <ele>456.000000</ele>
+ <name>TP3676</name>
+</trkpt>
+<trkpt lat="54.786929900" lon="-2.344261600">
+ <ele>456.000000</ele>
+ <name>TP3677</name>
+</trkpt>
+<trkpt lat="54.786933300" lon="-2.344249900">
+ <ele>456.000000</ele>
+ <name>TP3678</name>
+</trkpt>
+<trkpt lat="54.786925000" lon="-2.344246600">
+ <ele>456.000000</ele>
+ <name>TP3679</name>
+</trkpt>
+<trkpt lat="54.786923300" lon="-2.344241600">
+ <ele>456.000000</ele>
+ <name>TP3680</name>
+</trkpt>
+<trkpt lat="54.786903300" lon="-2.344249900">
+ <ele>456.000000</ele>
+ <name>TP3681</name>
+</trkpt>
+<trkpt lat="54.786896600" lon="-2.344244900">
+ <ele>456.000000</ele>
+ <name>TP3682</name>
+</trkpt>
+<trkpt lat="54.786893200" lon="-2.344243300">
+ <ele>456.000000</ele>
+ <name>TP3683</name>
+</trkpt>
+<trkpt lat="54.786881600" lon="-2.344251600">
+ <ele>456.000000</ele>
+ <name>TP3684</name>
+</trkpt>
+<trkpt lat="54.786891600" lon="-2.344275000">
+ <ele>456.000000</ele>
+ <name>TP3685</name>
+</trkpt>
+<trkpt lat="54.786891600" lon="-2.344286600">
+ <ele>456.000000</ele>
+ <name>TP3686</name>
+</trkpt>
+<trkpt lat="54.786889900" lon="-2.344279900">
+ <ele>456.000000</ele>
+ <name>TP3687</name>
+</trkpt>
+<trkpt lat="54.786888300" lon="-2.344279900">
+ <ele>456.000000</ele>
+ <name>TP3688</name>
+</trkpt>
+<trkpt lat="54.786901600" lon="-2.344293300">
+ <ele>456.000000</ele>
+ <name>TP3689</name>
+</trkpt>
+<trkpt lat="54.786908300" lon="-2.344289900">
+ <ele>456.000000</ele>
+ <name>TP3690</name>
+</trkpt>
+<trkpt lat="54.786913300" lon="-2.344281600">
+ <ele>456.000000</ele>
+ <name>TP3691</name>
+</trkpt>
+<trkpt lat="54.786919900" lon="-2.344276600">
+ <ele>456.000000</ele>
+ <name>TP3692</name>
+</trkpt>
+<trkpt lat="54.786933300" lon="-2.344268300">
+ <ele>456.000000</ele>
+ <name>TP3693</name>
+</trkpt>
+<trkpt lat="54.786929900" lon="-2.344268300">
+ <ele>456.000000</ele>
+ <name>TP3694</name>
+</trkpt>
+<trkpt lat="54.786928300" lon="-2.344275000">
+ <ele>456.000000</ele>
+ <name>TP3695</name>
+</trkpt>
+<trkpt lat="54.786931600" lon="-2.344276600">
+ <ele>456.000000</ele>
+ <name>TP3696</name>
+</trkpt>
+<trkpt lat="54.786935000" lon="-2.344264900">
+ <ele>456.000000</ele>
+ <name>TP3697</name>
+</trkpt>
+<trkpt lat="54.786933300" lon="-2.344260000">
+ <ele>456.000000</ele>
+ <name>TP3698</name>
+</trkpt>
+<trkpt lat="54.786931600" lon="-2.344248300">
+ <ele>456.000000</ele>
+ <name>TP3699</name>
+</trkpt>
+<trkpt lat="54.786926600" lon="-2.344243300">
+ <ele>456.000000</ele>
+ <name>TP3700</name>
+</trkpt>
+<trkpt lat="54.786893200" lon="-2.344229900">
+ <ele>456.000000</ele>
+ <name>TP3701</name>
+</trkpt>
+<trkpt lat="54.786869900" lon="-2.344226600">
+ <ele>456.000000</ele>
+ <name>TP3702</name>
+</trkpt>
+<trkpt lat="54.786863300" lon="-2.344218300">
+ <ele>456.000000</ele>
+ <name>TP3703</name>
+</trkpt>
+<trkpt lat="54.786861600" lon="-2.344209900">
+ <ele>456.000000</ele>
+ <name>TP3704</name>
+</trkpt>
+<trkpt lat="54.786853300" lon="-2.344213300">
+ <ele>456.000000</ele>
+ <name>TP3705</name>
+</trkpt>
+<trkpt lat="54.786853300" lon="-2.344208300">
+ <ele>456.000000</ele>
+ <name>TP3706</name>
+</trkpt>
+<trkpt lat="54.786853300" lon="-2.344194900">
+ <ele>456.000000</ele>
+ <name>TP3707</name>
+</trkpt>
+<trkpt lat="54.786846600" lon="-2.344183300">
+ <ele>456.000000</ele>
+ <name>TP3708</name>
+</trkpt>
+<trkpt lat="54.786850000" lon="-2.344171600">
+ <ele>456.000000</ele>
+ <name>TP3709</name>
+</trkpt>
+<trkpt lat="54.786859900" lon="-2.344174900">
+ <ele>456.000000</ele>
+ <name>TP3710</name>
+</trkpt>
+<trkpt lat="54.786866600" lon="-2.344178300">
+ <ele>456.000000</ele>
+ <name>TP3711</name>
+</trkpt>
+<trkpt lat="54.786873300" lon="-2.344178300">
+ <ele>456.000000</ele>
+ <name>TP3712</name>
+</trkpt>
+<trkpt lat="54.786881600" lon="-2.344186600">
+ <ele>456.000000</ele>
+ <name>TP3713</name>
+</trkpt>
+<trkpt lat="54.786888300" lon="-2.344216600">
+ <ele>456.000000</ele>
+ <name>TP3714</name>
+</trkpt>
+<trkpt lat="54.786895000" lon="-2.344236600">
+ <ele>456.000000</ele>
+ <name>TP3715</name>
+</trkpt>
+<trkpt lat="54.786898300" lon="-2.344249900">
+ <ele>456.000000</ele>
+ <name>TP3716</name>
+</trkpt>
+<trkpt lat="54.786899900" lon="-2.344238300">
+ <ele>456.000000</ele>
+ <name>TP3717</name>
+</trkpt>
+<trkpt lat="54.786914900" lon="-2.344244900">
+ <ele>456.000000</ele>
+ <name>TP3718</name>
+</trkpt>
+<trkpt lat="54.786914900" lon="-2.344249900">
+ <ele>456.000000</ele>
+ <name>TP3719</name>
+</trkpt>
+<trkpt lat="54.786913300" lon="-2.344243300">
+ <ele>456.000000</ele>
+ <name>TP3720</name>
+</trkpt>
+<trkpt lat="54.786921600" lon="-2.344253300">
+ <ele>456.000000</ele>
+ <name>TP3721</name>
+</trkpt>
+<trkpt lat="54.786928300" lon="-2.344254900">
+ <ele>456.000000</ele>
+ <name>TP3722</name>
+</trkpt>
+<trkpt lat="54.786935000" lon="-2.344251600">
+ <ele>456.000000</ele>
+ <name>TP3723</name>
+</trkpt>
+<trkpt lat="54.786944900" lon="-2.344244900">
+ <ele>456.000000</ele>
+ <name>TP3724</name>
+</trkpt>
+<trkpt lat="54.786950000" lon="-2.344244900">
+ <ele>456.000000</ele>
+ <name>TP3725</name>
+</trkpt>
+<trkpt lat="54.786951600" lon="-2.344243300">
+ <ele>456.000000</ele>
+ <name>TP3726</name>
+</trkpt>
+<trkpt lat="54.786954900" lon="-2.344249900">
+ <ele>456.000000</ele>
+ <name>TP3727</name>
+</trkpt>
+<trkpt lat="54.786953300" lon="-2.344243300">
+ <ele>456.000000</ele>
+ <name>TP3728</name>
+</trkpt>
+<trkpt lat="54.786948300" lon="-2.344240000">
+ <ele>456.000000</ele>
+ <name>TP3729</name>
+</trkpt>
+<trkpt lat="54.786954900" lon="-2.344234900">
+ <ele>456.000000</ele>
+ <name>TP3730</name>
+</trkpt>
+<trkpt lat="54.786956600" lon="-2.344228300">
+ <ele>456.000000</ele>
+ <name>TP3731</name>
+</trkpt>
+<trkpt lat="54.786956600" lon="-2.344216600">
+ <ele>456.000000</ele>
+ <name>TP3732</name>
+</trkpt>
+<trkpt lat="54.786958300" lon="-2.344225000">
+ <ele>456.000000</ele>
+ <name>TP3733</name>
+</trkpt>
+<trkpt lat="54.786958300" lon="-2.344216600">
+ <ele>456.000000</ele>
+ <name>TP3734</name>
+</trkpt>
+<trkpt lat="54.786956600" lon="-2.344209900">
+ <ele>456.000000</ele>
+ <name>TP3735</name>
+</trkpt>
+<trkpt lat="54.786958300" lon="-2.344209900">
+ <ele>456.000000</ele>
+ <name>TP3736</name>
+</trkpt>
+<trkpt lat="54.786953300" lon="-2.344213300">
+ <ele>456.000000</ele>
+ <name>TP3737</name>
+</trkpt>
+<trkpt lat="54.786950000" lon="-2.344246600">
+ <ele>456.000000</ele>
+ <name>TP3738</name>
+</trkpt>
+<trkpt lat="54.786948300" lon="-2.344256600">
+ <ele>456.000000</ele>
+ <name>TP3739</name>
+</trkpt>
+<trkpt lat="54.786939900" lon="-2.344286600">
+ <ele>456.000000</ele>
+ <name>TP3740</name>
+</trkpt>
+<trkpt lat="54.786938300" lon="-2.344278300">
+ <ele>456.000000</ele>
+ <name>TP3741</name>
+</trkpt>
+<trkpt lat="54.786938300" lon="-2.344279900">
+ <ele>456.000000</ele>
+ <name>TP3742</name>
+</trkpt>
+<trkpt lat="54.786941600" lon="-2.344276600">
+ <ele>456.000000</ele>
+ <name>TP3743</name>
+</trkpt>
+<trkpt lat="54.786936600" lon="-2.344275000">
+ <ele>456.000000</ele>
+ <name>TP3744</name>
+</trkpt>
+<trkpt lat="54.786936600" lon="-2.344266600">
+ <ele>456.000000</ele>
+ <name>TP3745</name>
+</trkpt>
+<trkpt lat="54.786933300" lon="-2.344271600">
+ <ele>456.000000</ele>
+ <name>TP3746</name>
+</trkpt>
+<trkpt lat="54.786929900" lon="-2.344264900">
+ <ele>456.000000</ele>
+ <name>TP3747</name>
+</trkpt>
+<trkpt lat="54.786931600" lon="-2.344251600">
+ <ele>456.000000</ele>
+ <name>TP3748</name>
+</trkpt>
+<trkpt lat="54.786936600" lon="-2.344248300">
+ <ele>456.000000</ele>
+ <name>TP3749</name>
+</trkpt>
+<trkpt lat="54.786936600" lon="-2.344248300">
+ <ele>456.000000</ele>
+ <name>TP3750</name>
+</trkpt>
+<trkpt lat="54.786926600" lon="-2.344264900">
+ <ele>456.000000</ele>
+ <name>TP3751</name>
+</trkpt>
+<trkpt lat="54.786904900" lon="-2.344296600">
+ <ele>456.000000</ele>
+ <name>TP3752</name>
+</trkpt>
+<trkpt lat="54.786904900" lon="-2.344286600">
+ <ele>456.000000</ele>
+ <name>TP3753</name>
+</trkpt>
+<trkpt lat="54.786910000" lon="-2.344291600">
+ <ele>456.000000</ele>
+ <name>TP3754</name>
+</trkpt>
+<trkpt lat="54.786913300" lon="-2.344289900">
+ <ele>456.000000</ele>
+ <name>TP3755</name>
+</trkpt>
+<trkpt lat="54.786916600" lon="-2.344281600">
+ <ele>456.000000</ele>
+ <name>TP3756</name>
+</trkpt>
+<trkpt lat="54.786921600" lon="-2.344278300">
+ <ele>456.000000</ele>
+ <name>TP3757</name>
+</trkpt>
+<trkpt lat="54.786921600" lon="-2.344273300">
+ <ele>456.000000</ele>
+ <name>TP3758</name>
+</trkpt>
+<trkpt lat="54.786925000" lon="-2.344269900">
+ <ele>456.000000</ele>
+ <name>TP3759</name>
+</trkpt>
+<trkpt lat="54.786908300" lon="-2.344271600">
+ <ele>456.000000</ele>
+ <name>TP3760</name>
+</trkpt>
+<trkpt lat="54.786904900" lon="-2.344264900">
+ <ele>456.000000</ele>
+ <name>TP3761</name>
+</trkpt>
+<trkpt lat="54.786889900" lon="-2.344293300">
+ <ele>456.000000</ele>
+ <name>TP3762</name>
+</trkpt>
+<trkpt lat="54.786891600" lon="-2.344286600">
+ <ele>456.000000</ele>
+ <name>TP3763</name>
+</trkpt>
+<trkpt lat="54.786891600" lon="-2.344271600">
+ <ele>456.000000</ele>
+ <name>TP3764</name>
+</trkpt>
+<trkpt lat="54.786903300" lon="-2.344268300">
+ <ele>456.000000</ele>
+ <name>TP3765</name>
+</trkpt>
+<trkpt lat="54.786908300" lon="-2.344258300">
+ <ele>456.000000</ele>
+ <name>TP3766</name>
+</trkpt>
+<trkpt lat="54.786910000" lon="-2.344248300">
+ <ele>456.000000</ele>
+ <name>TP3767</name>
+</trkpt>
+<trkpt lat="54.786916600" lon="-2.344229900">
+ <ele>456.000000</ele>
+ <name>TP3768</name>
+</trkpt>
+<trkpt lat="54.786919900" lon="-2.344213300">
+ <ele>456.000000</ele>
+ <name>TP3769</name>
+</trkpt>
+<trkpt lat="54.786919900" lon="-2.344209900">
+ <ele>456.000000</ele>
+ <name>TP3770</name>
+</trkpt>
+<trkpt lat="54.786921600" lon="-2.344213300">
+ <ele>456.000000</ele>
+ <name>TP3771</name>
+</trkpt>
+<trkpt lat="54.786918300" lon="-2.344219900">
+ <ele>456.000000</ele>
+ <name>TP3772</name>
+</trkpt>
+<trkpt lat="54.786908300" lon="-2.344240000">
+ <ele>456.000000</ele>
+ <name>TP3773</name>
+</trkpt>
+<trkpt lat="54.786910000" lon="-2.344258300">
+ <ele>456.000000</ele>
+ <name>TP3774</name>
+</trkpt>
+<trkpt lat="54.786906600" lon="-2.344263300">
+ <ele>456.000000</ele>
+ <name>TP3775</name>
+</trkpt>
+<trkpt lat="54.786904900" lon="-2.344269900">
+ <ele>456.000000</ele>
+ <name>TP3776</name>
+</trkpt>
+<trkpt lat="54.786904900" lon="-2.344276600">
+ <ele>456.000000</ele>
+ <name>TP3777</name>
+</trkpt>
+<trkpt lat="54.786895000" lon="-2.344298300">
+ <ele>456.000000</ele>
+ <name>TP3778</name>
+</trkpt>
+<trkpt lat="54.786895000" lon="-2.344313300">
+ <ele>456.000000</ele>
+ <name>TP3779</name>
+</trkpt>
+<trkpt lat="54.786895000" lon="-2.344318300">
+ <ele>456.000000</ele>
+ <name>TP3780</name>
+</trkpt>
+<trkpt lat="54.786903300" lon="-2.344314900">
+ <ele>456.000000</ele>
+ <name>TP3781</name>
+</trkpt>
+<trkpt lat="54.786908300" lon="-2.344318300">
+ <ele>456.000000</ele>
+ <name>TP3782</name>
+</trkpt>
+<trkpt lat="54.786911600" lon="-2.344318300">
+ <ele>456.000000</ele>
+ <name>TP3783</name>
+</trkpt>
+<trkpt lat="54.786919900" lon="-2.344314900">
+ <ele>456.000000</ele>
+ <name>TP3784</name>
+</trkpt>
+<trkpt lat="54.786926600" lon="-2.344291600">
+ <ele>456.000000</ele>
+ <name>TP3785</name>
+</trkpt>
+<trkpt lat="54.786935000" lon="-2.344276600">
+ <ele>456.000000</ele>
+ <name>TP3786</name>
+</trkpt>
+<trkpt lat="54.786941600" lon="-2.344248300">
+ <ele>456.000000</ele>
+ <name>TP3787</name>
+</trkpt>
+<trkpt lat="54.786963200" lon="-2.344214900">
+ <ele>456.000000</ele>
+ <name>TP3788</name>
+</trkpt>
+<trkpt lat="54.786971600" lon="-2.344206600">
+ <ele>456.000000</ele>
+ <name>TP3789</name>
+</trkpt>
+<trkpt lat="54.786978300" lon="-2.344103300">
+ <ele>456.000000</ele>
+ <name>TP3790</name>
+</trkpt>
+<trkpt lat="54.786950000" lon="-2.344121600">
+ <ele>456.000000</ele>
+ <name>TP3791</name>
+</trkpt>
+<trkpt lat="54.786939900" lon="-2.344136600">
+ <ele>456.000000</ele>
+ <name>TP3792</name>
+</trkpt>
+<trkpt lat="54.786931600" lon="-2.344133300">
+ <ele>456.000000</ele>
+ <name>TP3793</name>
+</trkpt>
+<trkpt lat="54.786946600" lon="-2.344133300">
+ <ele>456.000000</ele>
+ <name>TP3794</name>
+</trkpt>
+<trkpt lat="54.786935000" lon="-2.344149900">
+ <ele>456.000000</ele>
+ <name>TP3795</name>
+</trkpt>
+<trkpt lat="54.786935000" lon="-2.344155000">
+ <ele>456.000000</ele>
+ <name>TP3796</name>
+</trkpt>
+<trkpt lat="54.786933300" lon="-2.344163300">
+ <ele>456.000000</ele>
+ <name>TP3797</name>
+</trkpt>
+<trkpt lat="54.786929900" lon="-2.344161600">
+ <ele>456.000000</ele>
+ <name>TP3798</name>
+</trkpt>
+<trkpt lat="54.786926600" lon="-2.344138300">
+ <ele>456.000000</ele>
+ <name>TP3799</name>
+</trkpt>
+<trkpt lat="54.786923300" lon="-2.344136600">
+ <ele>456.000000</ele>
+ <name>TP3800</name>
+</trkpt>
+<trkpt lat="54.786914900" lon="-2.344151600">
+ <ele>456.000000</ele>
+ <name>TP3801</name>
+</trkpt>
+<trkpt lat="54.786916600" lon="-2.344158300">
+ <ele>456.000000</ele>
+ <name>TP3802</name>
+</trkpt>
+<trkpt lat="54.786916600" lon="-2.344168300">
+ <ele>456.000000</ele>
+ <name>TP3803</name>
+</trkpt>
+<trkpt lat="54.786910000" lon="-2.344179900">
+ <ele>456.000000</ele>
+ <name>TP3804</name>
+</trkpt>
+<trkpt lat="54.786910000" lon="-2.344198300">
+ <ele>456.000000</ele>
+ <name>TP3805</name>
+</trkpt>
+<trkpt lat="54.786903300" lon="-2.344211600">
+ <ele>456.000000</ele>
+ <name>TP3806</name>
+</trkpt>
+<trkpt lat="54.786898300" lon="-2.344216600">
+ <ele>456.000000</ele>
+ <name>TP3807</name>
+</trkpt>
+<trkpt lat="54.786889900" lon="-2.344225000">
+ <ele>456.000000</ele>
+ <name>TP3808</name>
+</trkpt>
+<trkpt lat="54.786881600" lon="-2.344229900">
+ <ele>456.000000</ele>
+ <name>TP3809</name>
+</trkpt>
+<trkpt lat="54.786889900" lon="-2.344240000">
+ <ele>456.000000</ele>
+ <name>TP3810</name>
+</trkpt>
+<trkpt lat="54.786888300" lon="-2.344228300">
+ <ele>456.000000</ele>
+ <name>TP3811</name>
+</trkpt>
+<trkpt lat="54.786886600" lon="-2.344218300">
+ <ele>456.000000</ele>
+ <name>TP3812</name>
+</trkpt>
+<trkpt lat="54.786891600" lon="-2.344219900">
+ <ele>456.000000</ele>
+ <name>TP3813</name>
+</trkpt>
+<trkpt lat="54.786884900" lon="-2.344218300">
+ <ele>456.000000</ele>
+ <name>TP3814</name>
+</trkpt>
+<trkpt lat="54.786880000" lon="-2.344216600">
+ <ele>456.000000</ele>
+ <name>TP3815</name>
+</trkpt>
+<trkpt lat="54.786880000" lon="-2.344211600">
+ <ele>456.000000</ele>
+ <name>TP3816</name>
+</trkpt>
+<trkpt lat="54.786880000" lon="-2.344214900">
+ <ele>456.000000</ele>
+ <name>TP3817</name>
+</trkpt>
+<trkpt lat="54.786883300" lon="-2.344209900">
+ <ele>456.000000</ele>
+ <name>TP3818</name>
+</trkpt>
+<trkpt lat="54.786886600" lon="-2.344194900">
+ <ele>456.000000</ele>
+ <name>TP3819</name>
+</trkpt>
+<trkpt lat="54.786891600" lon="-2.344190000">
+ <ele>456.000000</ele>
+ <name>TP3820</name>
+</trkpt>
+<trkpt lat="54.786908300" lon="-2.344201600">
+ <ele>456.000000</ele>
+ <name>TP3821</name>
+</trkpt>
+<trkpt lat="54.786923300" lon="-2.344253300">
+ <ele>456.000000</ele>
+ <name>TP3822</name>
+</trkpt>
+<trkpt lat="54.786914900" lon="-2.344261600">
+ <ele>456.000000</ele>
+ <name>TP3823</name>
+</trkpt>
+<trkpt lat="54.786913300" lon="-2.344289900">
+ <ele>456.000000</ele>
+ <name>TP3824</name>
+</trkpt>
+<trkpt lat="54.786913300" lon="-2.344298300">
+ <ele>456.000000</ele>
+ <name>TP3825</name>
+</trkpt>
+<trkpt lat="54.786916600" lon="-2.344293300">
+ <ele>456.000000</ele>
+ <name>TP3826</name>
+</trkpt>
+<trkpt lat="54.786919900" lon="-2.344286600">
+ <ele>456.000000</ele>
+ <name>TP3827</name>
+</trkpt>
+<trkpt lat="54.786916600" lon="-2.344286600">
+ <ele>456.000000</ele>
+ <name>TP3828</name>
+</trkpt>
+<trkpt lat="54.786914900" lon="-2.344288300">
+ <ele>456.000000</ele>
+ <name>TP3829</name>
+</trkpt>
+<trkpt lat="54.786923300" lon="-2.344295000">
+ <ele>456.000000</ele>
+ <name>TP3830</name>
+</trkpt>
+<trkpt lat="54.786916600" lon="-2.344293300">
+ <ele>456.000000</ele>
+ <name>TP3831</name>
+</trkpt>
+<trkpt lat="54.786908300" lon="-2.344299900">
+ <ele>456.000000</ele>
+ <name>TP3832</name>
+</trkpt>
+<trkpt lat="54.786898300" lon="-2.344310000">
+ <ele>456.000000</ele>
+ <name>TP3833</name>
+</trkpt>
+<trkpt lat="54.786886600" lon="-2.344314900">
+ <ele>456.000000</ele>
+ <name>TP3834</name>
+</trkpt>
+<trkpt lat="54.786896600" lon="-2.344331600">
+ <ele>456.000000</ele>
+ <name>TP3835</name>
+</trkpt>
+<trkpt lat="54.786901600" lon="-2.344339900">
+ <ele>456.000000</ele>
+ <name>TP3836</name>
+</trkpt>
+<trkpt lat="54.786910000" lon="-2.344336600">
+ <ele>456.000000</ele>
+ <name>TP3837</name>
+</trkpt>
+<trkpt lat="54.786911600" lon="-2.344323300">
+ <ele>456.000000</ele>
+ <name>TP3838</name>
+</trkpt>
+<trkpt lat="54.786910000" lon="-2.344331600">
+ <ele>456.000000</ele>
+ <name>TP3839</name>
+</trkpt>
+<trkpt lat="54.786908300" lon="-2.344346600">
+ <ele>456.000000</ele>
+ <name>TP3840</name>
+</trkpt>
+<trkpt lat="54.786899900" lon="-2.344351600">
+ <ele>456.000000</ele>
+ <name>TP3841</name>
+</trkpt>
+<trkpt lat="54.786895000" lon="-2.344349900">
+ <ele>456.000000</ele>
+ <name>TP3842</name>
+</trkpt>
+<trkpt lat="54.786884900" lon="-2.344361600">
+ <ele>456.000000</ele>
+ <name>TP3843</name>
+</trkpt>
+<trkpt lat="54.786893200" lon="-2.344361600">
+ <ele>456.000000</ele>
+ <name>TP3844</name>
+</trkpt>
+<trkpt lat="54.786898300" lon="-2.344376600">
+ <ele>456.000000</ele>
+ <name>TP3845</name>
+</trkpt>
+<trkpt lat="54.786891600" lon="-2.344368300">
+ <ele>456.000000</ele>
+ <name>TP3846</name>
+</trkpt>
+<trkpt lat="54.786891600" lon="-2.344354900">
+ <ele>456.000000</ele>
+ <name>TP3847</name>
+</trkpt>
+<trkpt lat="54.786899900" lon="-2.344346600">
+ <ele>456.000000</ele>
+ <name>TP3848</name>
+</trkpt>
+<trkpt lat="54.786901600" lon="-2.344341600">
+ <ele>456.000000</ele>
+ <name>TP3849</name>
+</trkpt>
+<trkpt lat="54.786914900" lon="-2.344328300">
+ <ele>456.000000</ele>
+ <name>TP3850</name>
+</trkpt>
+<trkpt lat="54.786923300" lon="-2.344316600">
+ <ele>456.000000</ele>
+ <name>TP3851</name>
+</trkpt>
+<trkpt lat="54.786925000" lon="-2.344163300">
+ <ele>456.000000</ele>
+ <name>TP3852</name>
+</trkpt>
+<trkpt lat="54.786906600" lon="-2.344205000">
+ <ele>456.000000</ele>
+ <name>TP3853</name>
+</trkpt>
+<trkpt lat="54.786928300" lon="-2.344214900">
+ <ele>456.000000</ele>
+ <name>TP3854</name>
+</trkpt>
+<trkpt lat="54.786818300" lon="-2.344346600">
+ <ele>456.000000</ele>
+ <name>TP3855</name>
+</trkpt>
+<trkpt lat="54.786825000" lon="-2.344339900">
+ <ele>456.000000</ele>
+ <name>TP3856</name>
+</trkpt>
+<trkpt lat="54.786811600" lon="-2.344358300">
+ <ele>456.000000</ele>
+ <name>TP3857</name>
+</trkpt>
+<trkpt lat="54.786791600" lon="-2.344383300">
+ <ele>456.000000</ele>
+ <name>TP3858</name>
+</trkpt>
+<trkpt lat="54.786749900" lon="-2.344401600">
+ <ele>456.000000</ele>
+ <name>TP3859</name>
+</trkpt>
+<trkpt lat="54.786743300" lon="-2.344413300">
+ <ele>456.000000</ele>
+ <name>TP3860</name>
+</trkpt>
+<trkpt lat="54.786729900" lon="-2.344428300">
+ <ele>456.000000</ele>
+ <name>TP3861</name>
+</trkpt>
+<trkpt lat="54.786743300" lon="-2.344408300">
+ <ele>456.000000</ele>
+ <name>TP3862</name>
+</trkpt>
+<trkpt lat="54.787071600" lon="-2.344059900">
+ <ele>456.000000</ele>
+ <name>TP3863</name>
+</trkpt>
+<trkpt lat="54.787075000" lon="-2.344065000">
+ <ele>456.000000</ele>
+ <name>TP3864</name>
+</trkpt>
+<trkpt lat="54.787024900" lon="-2.344143300">
+ <ele>456.000000</ele>
+ <name>TP3865</name>
+</trkpt>
+<trkpt lat="54.787039900" lon="-2.344148300">
+ <ele>456.000000</ele>
+ <name>TP3866</name>
+</trkpt>
+<trkpt lat="54.787038300" lon="-2.344158300">
+ <ele>456.000000</ele>
+ <name>TP3867</name>
+</trkpt>
+<trkpt lat="54.786938300" lon="-2.344264900">
+ <ele>456.000000</ele>
+ <name>TP3868</name>
+</trkpt>
+<trkpt lat="54.786935000" lon="-2.344295000">
+ <ele>456.000000</ele>
+ <name>TP3869</name>
+</trkpt>
+<trkpt lat="54.786923300" lon="-2.344313300">
+ <ele>456.000000</ele>
+ <name>TP3870</name>
+</trkpt>
+<trkpt lat="54.786923300" lon="-2.344313300">
+ <ele>456.000000</ele>
+ <name>TP3871</name>
+</trkpt>
+<trkpt lat="54.786954900" lon="-2.344261600">
+ <ele>456.000000</ele>
+ <name>TP3872</name>
+</trkpt>
+<trkpt lat="54.786989900" lon="-2.344213300">
+ <ele>456.000000</ele>
+ <name>TP3873</name>
+</trkpt>
+<trkpt lat="54.787003300" lon="-2.344190000">
+ <ele>456.000000</ele>
+ <name>TP3874</name>
+</trkpt>
+<trkpt lat="54.787029900" lon="-2.344133300">
+ <ele>456.000000</ele>
+ <name>TP3875</name>
+</trkpt>
+<trkpt lat="54.786941600" lon="-2.344196600">
+ <ele>456.000000</ele>
+ <name>TP3876</name>
+</trkpt>
+<trkpt lat="54.786968300" lon="-2.344194900">
+ <ele>456.000000</ele>
+ <name>TP3877</name>
+</trkpt>
+<trkpt lat="54.787023300" lon="-2.344358300">
+ <ele>456.000000</ele>
+ <name>TP3878</name>
+</trkpt>
+<trkpt lat="54.787023300" lon="-2.344331600">
+ <ele>456.000000</ele>
+ <name>TP3879</name>
+</trkpt>
+<trkpt lat="54.786988300" lon="-2.344331600">
+ <ele>456.000000</ele>
+ <name>TP3880</name>
+</trkpt>
+<trkpt lat="54.786961600" lon="-2.344333300">
+ <ele>456.000000</ele>
+ <name>TP3881</name>
+</trkpt>
+<trkpt lat="54.786939900" lon="-2.344328300">
+ <ele>456.000000</ele>
+ <name>TP3882</name>
+</trkpt>
+<trkpt lat="54.786935000" lon="-2.344323300">
+ <ele>456.000000</ele>
+ <name>TP3883</name>
+</trkpt>
+<trkpt lat="54.786918300" lon="-2.344316600">
+ <ele>456.000000</ele>
+ <name>TP3884</name>
+</trkpt>
+<trkpt lat="54.786913300" lon="-2.344308300">
+ <ele>456.000000</ele>
+ <name>TP3885</name>
+</trkpt>
+<trkpt lat="54.786976600" lon="-2.344321600">
+ <ele>456.000000</ele>
+ <name>TP3886</name>
+</trkpt>
+<trkpt lat="54.786966600" lon="-2.344301600">
+ <ele>456.000000</ele>
+ <name>TP3887</name>
+</trkpt>
+<trkpt lat="54.786948300" lon="-2.344281600">
+ <ele>456.000000</ele>
+ <name>TP3888</name>
+</trkpt>
+<trkpt lat="54.786921600" lon="-2.344264900">
+ <ele>456.000000</ele>
+ <name>TP3889</name>
+</trkpt>
+<trkpt lat="54.786844900" lon="-2.344201600">
+ <ele>456.000000</ele>
+ <name>TP3890</name>
+</trkpt>
+<trkpt lat="54.786825000" lon="-2.344223300">
+ <ele>456.000000</ele>
+ <name>TP3891</name>
+</trkpt>
+<trkpt lat="54.786851600" lon="-2.344279900">
+ <ele>456.000000</ele>
+ <name>TP3892</name>
+</trkpt>
+<trkpt lat="54.786869900" lon="-2.344301600">
+ <ele>456.000000</ele>
+ <name>TP3893</name>
+</trkpt>
+<trkpt lat="54.786844900" lon="-2.344301600">
+ <ele>456.000000</ele>
+ <name>TP3894</name>
+</trkpt>
+<trkpt lat="54.786831600" lon="-2.344289900">
+ <ele>456.000000</ele>
+ <name>TP3895</name>
+</trkpt>
+<trkpt lat="54.786755000" lon="-2.344248300">
+ <ele>456.000000</ele>
+ <name>TP3896</name>
+</trkpt>
+<trkpt lat="54.786743300" lon="-2.344251600">
+ <ele>456.000000</ele>
+ <name>TP3897</name>
+</trkpt>
+<trkpt lat="54.786696600" lon="-2.344223300">
+ <ele>456.000000</ele>
+ <name>TP3898</name>
+</trkpt>
+<trkpt lat="54.786655000" lon="-2.344211600">
+ <ele>456.000000</ele>
+ <name>TP3899</name>
+</trkpt>
+<trkpt lat="54.786645000" lon="-2.344201600">
+ <ele>456.000000</ele>
+ <name>TP3900</name>
+</trkpt>
+<trkpt lat="54.786668300" lon="-2.344196600">
+ <ele>456.000000</ele>
+ <name>TP3901</name>
+</trkpt>
+<trkpt lat="54.786658300" lon="-2.344181600">
+ <ele>456.000000</ele>
+ <name>TP3902</name>
+</trkpt>
+<trkpt lat="54.786651600" lon="-2.344176600">
+ <ele>456.000000</ele>
+ <name>TP3903</name>
+</trkpt>
+<trkpt lat="54.786679900" lon="-2.344203300">
+ <ele>456.000000</ele>
+ <name>TP3904</name>
+</trkpt>
+<trkpt lat="54.786701600" lon="-2.344208300">
+ <ele>456.000000</ele>
+ <name>TP3905</name>
+</trkpt>
+<trkpt lat="54.786938300" lon="-2.344531600">
+ <ele>456.000000</ele>
+ <name>TP3906</name>
+</trkpt>
+<trkpt lat="54.786965000" lon="-2.344523300">
+ <ele>456.000000</ele>
+ <name>TP3907</name>
+</trkpt>
+<trkpt lat="54.786995000" lon="-2.344531600">
+ <ele>456.000000</ele>
+ <name>TP3908</name>
+</trkpt>
+<trkpt lat="54.786966600" lon="-2.344536600">
+ <ele>456.000000</ele>
+ <name>TP3909</name>
+</trkpt>
+<trkpt lat="54.786965000" lon="-2.344531600">
+ <ele>456.000000</ele>
+ <name>TP3910</name>
+</trkpt>
+<trkpt lat="54.786963200" lon="-2.344518300">
+ <ele>456.000000</ele>
+ <name>TP3911</name>
+</trkpt>
+<trkpt lat="54.786958300" lon="-2.344468300">
+ <ele>456.000000</ele>
+ <name>TP3912</name>
+</trkpt>
+<trkpt lat="54.786910000" lon="-2.344483300">
+ <ele>456.000000</ele>
+ <name>TP3913</name>
+</trkpt>
+<trkpt lat="54.786898300" lon="-2.344483300">
+ <ele>456.000000</ele>
+ <name>TP3914</name>
+</trkpt>
+<trkpt lat="54.786876600" lon="-2.344493300">
+ <ele>456.000000</ele>
+ <name>TP3915</name>
+</trkpt>
+<trkpt lat="54.786881600" lon="-2.344491600">
+ <ele>456.000000</ele>
+ <name>TP3916</name>
+</trkpt>
+<trkpt lat="54.786884900" lon="-2.344494900">
+ <ele>456.000000</ele>
+ <name>TP3917</name>
+</trkpt>
+<trkpt lat="54.786884900" lon="-2.344491600">
+ <ele>456.000000</ele>
+ <name>TP3918</name>
+</trkpt>
+<trkpt lat="54.786878300" lon="-2.344478300">
+ <ele>456.000000</ele>
+ <name>TP3919</name>
+</trkpt>
+<trkpt lat="54.786876600" lon="-2.344491600">
+ <ele>456.000000</ele>
+ <name>TP3920</name>
+</trkpt>
+<trkpt lat="54.786874900" lon="-2.344501600">
+ <ele>456.000000</ele>
+ <name>TP3921</name>
+</trkpt>
+<trkpt lat="54.786874900" lon="-2.344508300">
+ <ele>456.000000</ele>
+ <name>TP3922</name>
+</trkpt>
+<trkpt lat="54.786873300" lon="-2.344511600">
+ <ele>456.000000</ele>
+ <name>TP3923</name>
+</trkpt>
+<trkpt lat="54.786869900" lon="-2.344511600">
+ <ele>456.000000</ele>
+ <name>TP3924</name>
+</trkpt>
+<trkpt lat="54.786868300" lon="-2.344498300">
+ <ele>456.000000</ele>
+ <name>TP3925</name>
+</trkpt>
+<trkpt lat="54.786851600" lon="-2.344520000">
+ <ele>456.000000</ele>
+ <name>TP3926</name>
+</trkpt>
+<trkpt lat="54.786873300" lon="-2.344505000">
+ <ele>456.000000</ele>
+ <name>TP3927</name>
+</trkpt>
+<trkpt lat="54.786874900" lon="-2.344491600">
+ <ele>456.000000</ele>
+ <name>TP3928</name>
+</trkpt>
+<trkpt lat="54.786878300" lon="-2.344486600">
+ <ele>456.000000</ele>
+ <name>TP3929</name>
+</trkpt>
+<trkpt lat="54.786868300" lon="-2.344485000">
+ <ele>456.000000</ele>
+ <name>TP3930</name>
+</trkpt>
+<trkpt lat="54.786856600" lon="-2.344486600">
+ <ele>456.000000</ele>
+ <name>TP3931</name>
+</trkpt>
+<trkpt lat="54.786863300" lon="-2.344466600">
+ <ele>456.000000</ele>
+ <name>TP3932</name>
+</trkpt>
+<trkpt lat="54.786873300" lon="-2.344458300">
+ <ele>456.000000</ele>
+ <name>TP3933</name>
+</trkpt>
+<trkpt lat="54.786884900" lon="-2.344450000">
+ <ele>456.000000</ele>
+ <name>TP3934</name>
+</trkpt>
+<trkpt lat="54.786898300" lon="-2.344438300">
+ <ele>456.000000</ele>
+ <name>TP3935</name>
+</trkpt>
+<trkpt lat="54.786948300" lon="-2.344386600">
+ <ele>456.000000</ele>
+ <name>TP3936</name>
+</trkpt>
+<trkpt lat="54.786951600" lon="-2.344391600">
+ <ele>456.000000</ele>
+ <name>TP3937</name>
+</trkpt>
+<trkpt lat="54.786946600" lon="-2.344394900">
+ <ele>456.000000</ele>
+ <name>TP3938</name>
+</trkpt>
+<trkpt lat="54.786948300" lon="-2.344376600">
+ <ele>457.000000</ele>
+ <name>TP3939</name>
+</trkpt>
+<trkpt lat="54.786951600" lon="-2.344373300">
+ <ele>457.000000</ele>
+ <name>TP3940</name>
+</trkpt>
+<trkpt lat="54.786921600" lon="-2.344401600">
+ <ele>456.000000</ele>
+ <name>TP3941</name>
+</trkpt>
+<trkpt lat="54.786918300" lon="-2.344423300">
+ <ele>456.000000</ele>
+ <name>TP3942</name>
+</trkpt>
+<trkpt lat="54.786923300" lon="-2.344423300">
+ <ele>457.000000</ele>
+ <name>TP3943</name>
+</trkpt>
+<trkpt lat="54.786925000" lon="-2.344421600">
+ <ele>457.000000</ele>
+ <name>TP3944</name>
+</trkpt>
+<trkpt lat="54.786928300" lon="-2.344418300">
+ <ele>457.000000</ele>
+ <name>TP3945</name>
+</trkpt>
+<trkpt lat="54.786935000" lon="-2.344408300">
+ <ele>457.000000</ele>
+ <name>TP3946</name>
+</trkpt>
+<trkpt lat="54.786941600" lon="-2.344394900">
+ <ele>457.000000</ele>
+ <name>TP3947</name>
+</trkpt>
+<trkpt lat="54.786946600" lon="-2.344391600">
+ <ele>457.000000</ele>
+ <name>TP3948</name>
+</trkpt>
+<trkpt lat="54.786936600" lon="-2.344388300">
+ <ele>457.000000</ele>
+ <name>TP3949</name>
+</trkpt>
+<trkpt lat="54.786929900" lon="-2.344388300">
+ <ele>457.000000</ele>
+ <name>TP3950</name>
+</trkpt>
+<trkpt lat="54.786931600" lon="-2.344388300">
+ <ele>457.000000</ele>
+ <name>TP3951</name>
+</trkpt>
+<trkpt lat="54.786935000" lon="-2.344386600">
+ <ele>457.000000</ele>
+ <name>TP3952</name>
+</trkpt>
+<trkpt lat="54.786929900" lon="-2.344393300">
+ <ele>457.000000</ele>
+ <name>TP3953</name>
+</trkpt>
+<trkpt lat="54.786926600" lon="-2.344394900">
+ <ele>457.000000</ele>
+ <name>TP3954</name>
+</trkpt>
+<trkpt lat="54.786921600" lon="-2.344393300">
+ <ele>457.000000</ele>
+ <name>TP3955</name>
+</trkpt>
+<trkpt lat="54.786921600" lon="-2.344394900">
+ <ele>456.000000</ele>
+ <name>TP3956</name>
+</trkpt>
+<trkpt lat="54.786913300" lon="-2.344396600">
+ <ele>457.000000</ele>
+ <name>TP3957</name>
+</trkpt>
+<trkpt lat="54.786903300" lon="-2.344404900">
+ <ele>458.000000</ele>
+ <name>TP3958</name>
+</trkpt>
+<trkpt lat="54.786901600" lon="-2.344413300">
+ <ele>458.000000</ele>
+ <name>TP3959</name>
+</trkpt>
+<trkpt lat="54.786899900" lon="-2.344423300">
+ <ele>458.000000</ele>
+ <name>TP3960</name>
+</trkpt>
+<trkpt lat="54.786913300" lon="-2.344419900">
+ <ele>457.000000</ele>
+ <name>TP3961</name>
+</trkpt>
+<trkpt lat="54.786898300" lon="-2.344426600">
+ <ele>456.000000</ele>
+ <name>TP3962</name>
+</trkpt>
+<trkpt lat="54.786899900" lon="-2.344419900">
+ <ele>456.000000</ele>
+ <name>TP3963</name>
+</trkpt>
+<trkpt lat="54.786904900" lon="-2.344415000">
+ <ele>456.000000</ele>
+ <name>TP3964</name>
+</trkpt>
+<trkpt lat="54.786913300" lon="-2.344413300">
+ <ele>456.000000</ele>
+ <name>TP3965</name>
+</trkpt>
+<trkpt lat="54.786913300" lon="-2.344409900">
+ <ele>456.000000</ele>
+ <name>TP3966</name>
+</trkpt>
+<trkpt lat="54.786914900" lon="-2.344406600">
+ <ele>456.000000</ele>
+ <name>TP3967</name>
+</trkpt>
+<trkpt lat="54.786919900" lon="-2.344408300">
+ <ele>456.000000</ele>
+ <name>TP3968</name>
+</trkpt>
+<trkpt lat="54.786919900" lon="-2.344411600">
+ <ele>456.000000</ele>
+ <name>TP3969</name>
+</trkpt>
+<trkpt lat="54.786906600" lon="-2.344418300">
+ <ele>456.000000</ele>
+ <name>TP3970</name>
+</trkpt>
+<trkpt lat="54.786906600" lon="-2.344438300">
+ <ele>456.000000</ele>
+ <name>TP3971</name>
+</trkpt>
+<trkpt lat="54.786898300" lon="-2.344443300">
+ <ele>456.000000</ele>
+ <name>TP3972</name>
+</trkpt>
+<trkpt lat="54.786888300" lon="-2.344459900">
+ <ele>456.000000</ele>
+ <name>TP3973</name>
+</trkpt>
+<trkpt lat="54.786874900" lon="-2.344470000">
+ <ele>456.000000</ele>
+ <name>TP3974</name>
+</trkpt>
+<trkpt lat="54.786869900" lon="-2.344476600">
+ <ele>456.000000</ele>
+ <name>TP3975</name>
+</trkpt>
+<trkpt lat="54.786863300" lon="-2.344485000">
+ <ele>456.000000</ele>
+ <name>TP3976</name>
+</trkpt>
+<trkpt lat="54.786859900" lon="-2.344486600">
+ <ele>456.000000</ele>
+ <name>TP3977</name>
+</trkpt>
+<trkpt lat="54.786853300" lon="-2.344493300">
+ <ele>456.000000</ele>
+ <name>TP3978</name>
+</trkpt>
+<trkpt lat="54.786840000" lon="-2.344499900">
+ <ele>456.000000</ele>
+ <name>TP3979</name>
+</trkpt>
+<trkpt lat="54.786850000" lon="-2.344513300">
+ <ele>456.000000</ele>
+ <name>TP3980</name>
+</trkpt>
+<trkpt lat="54.786798300" lon="-2.344506600">
+ <ele>456.000000</ele>
+ <name>TP3981</name>
+</trkpt>
+<trkpt lat="54.786811600" lon="-2.344514900">
+ <ele>456.000000</ele>
+ <name>TP3982</name>
+</trkpt>
+<trkpt lat="54.786816600" lon="-2.344508300">
+ <ele>456.000000</ele>
+ <name>TP3983</name>
+</trkpt>
+<trkpt lat="54.786821600" lon="-2.344498300">
+ <ele>456.000000</ele>
+ <name>TP3984</name>
+</trkpt>
+<trkpt lat="54.786825000" lon="-2.344478300">
+ <ele>456.000000</ele>
+ <name>TP3985</name>
+</trkpt>
+<trkpt lat="54.786829900" lon="-2.344479900">
+ <ele>456.000000</ele>
+ <name>TP3986</name>
+</trkpt>
+<trkpt lat="54.786831600" lon="-2.344474900">
+ <ele>456.000000</ele>
+ <name>TP3987</name>
+</trkpt>
+<trkpt lat="54.786836600" lon="-2.344461600">
+ <ele>456.000000</ele>
+ <name>TP3988</name>
+</trkpt>
+<trkpt lat="54.786840000" lon="-2.344446600">
+ <ele>456.000000</ele>
+ <name>TP3989</name>
+</trkpt>
+<trkpt lat="54.786846600" lon="-2.344450000">
+ <ele>456.000000</ele>
+ <name>TP3990</name>
+</trkpt>
+<trkpt lat="54.786850000" lon="-2.344453300">
+ <ele>456.000000</ele>
+ <name>TP3991</name>
+</trkpt>
+<trkpt lat="54.786851600" lon="-2.344453300">
+ <ele>456.000000</ele>
+ <name>TP3992</name>
+</trkpt>
+<trkpt lat="54.786856600" lon="-2.344456600">
+ <ele>456.000000</ele>
+ <name>TP3993</name>
+</trkpt>
+<trkpt lat="54.786859900" lon="-2.344456600">
+ <ele>456.000000</ele>
+ <name>TP3994</name>
+</trkpt>
+<trkpt lat="54.786868300" lon="-2.344446600">
+ <ele>456.000000</ele>
+ <name>TP3995</name>
+</trkpt>
+<trkpt lat="54.786869900" lon="-2.344451600">
+ <ele>456.000000</ele>
+ <name>TP3996</name>
+</trkpt>
+<trkpt lat="54.786874900" lon="-2.344454900">
+ <ele>456.000000</ele>
+ <name>TP3997</name>
+</trkpt>
+<trkpt lat="54.786884900" lon="-2.344448300">
+ <ele>456.000000</ele>
+ <name>TP3998</name>
+</trkpt>
+<trkpt lat="54.786891600" lon="-2.344441600">
+ <ele>456.000000</ele>
+ <name>TP3999</name>
+</trkpt>
+<trkpt lat="54.786891600" lon="-2.344416600">
+ <ele>456.000000</ele>
+ <name>TP4000</name>
+</trkpt>
+<trkpt lat="54.786899900" lon="-2.344419900">
+ <ele>456.000000</ele>
+ <name>TP4001</name>
+</trkpt>
+<trkpt lat="54.786903300" lon="-2.344421600">
+ <ele>456.000000</ele>
+ <name>TP4002</name>
+</trkpt>
+<trkpt lat="54.786898300" lon="-2.344421600">
+ <ele>456.000000</ele>
+ <name>TP4003</name>
+</trkpt>
+<trkpt lat="54.786898300" lon="-2.344416600">
+ <ele>456.000000</ele>
+ <name>TP4004</name>
+</trkpt>
+<trkpt lat="54.786904900" lon="-2.344415000">
+ <ele>456.000000</ele>
+ <name>TP4005</name>
+</trkpt>
+<trkpt lat="54.786899900" lon="-2.344413300">
+ <ele>456.000000</ele>
+ <name>TP4006</name>
+</trkpt>
+<trkpt lat="54.786906600" lon="-2.344408300">
+ <ele>456.000000</ele>
+ <name>TP4007</name>
+</trkpt>
+<trkpt lat="54.786913300" lon="-2.344406600">
+ <ele>456.000000</ele>
+ <name>TP4008</name>
+</trkpt>
+<trkpt lat="54.786918300" lon="-2.344411600">
+ <ele>456.000000</ele>
+ <name>TP4009</name>
+</trkpt>
+<trkpt lat="54.786928300" lon="-2.344419900">
+ <ele>456.000000</ele>
+ <name>TP4010</name>
+</trkpt>
+<trkpt lat="54.786936600" lon="-2.344419900">
+ <ele>456.000000</ele>
+ <name>TP4011</name>
+</trkpt>
+<trkpt lat="54.786946600" lon="-2.344424900">
+ <ele>456.000000</ele>
+ <name>TP4012</name>
+</trkpt>
+<trkpt lat="54.786953300" lon="-2.344426600">
+ <ele>456.000000</ele>
+ <name>TP4013</name>
+</trkpt>
+<trkpt lat="54.786961600" lon="-2.344423300">
+ <ele>456.000000</ele>
+ <name>TP4014</name>
+</trkpt>
+<trkpt lat="54.786966600" lon="-2.344421600">
+ <ele>456.000000</ele>
+ <name>TP4015</name>
+</trkpt>
+<trkpt lat="54.786969900" lon="-2.344419900">
+ <ele>456.000000</ele>
+ <name>TP4016</name>
+</trkpt>
+<trkpt lat="54.786966600" lon="-2.344421600">
+ <ele>456.000000</ele>
+ <name>TP4017</name>
+</trkpt>
+<trkpt lat="54.786958300" lon="-2.344419900">
+ <ele>456.000000</ele>
+ <name>TP4018</name>
+</trkpt>
+<trkpt lat="54.786950000" lon="-2.344416600">
+ <ele>456.000000</ele>
+ <name>TP4019</name>
+</trkpt>
+<trkpt lat="54.786936600" lon="-2.344409900">
+ <ele>456.000000</ele>
+ <name>TP4020</name>
+</trkpt>
+<trkpt lat="54.786931600" lon="-2.344408300">
+ <ele>456.000000</ele>
+ <name>TP4021</name>
+</trkpt>
+<trkpt lat="54.786929900" lon="-2.344408300">
+ <ele>456.000000</ele>
+ <name>TP4022</name>
+</trkpt>
+<trkpt lat="54.786926600" lon="-2.344409900">
+ <ele>456.000000</ele>
+ <name>TP4023</name>
+</trkpt>
+</trkseg>
+</trk>
+</gpx>
tlon = RAD(this->longitude);
plat = RAD(prev->latitude);
plon = RAD(prev->longitude);
- this->course = heading_true_degrees(plat, plon,
- tlat, tlon);
+ WAYPT_SET(this, course, heading_true_degrees(plat, plon,
+ tlat, tlon));
dist = radtometers(gcdist(plat, plon, tlat, tlon));
/*
* If we've moved as much as a meter, recompute speed.
*/
if (timed && (dist > 1)) {
- this->speed = dist / labs(timed);
+ WAYPT_SET(this, speed, dist / labs(timed));
if (this->speed > tdata->max_spd) {
tdata->max_spd = this->speed;
}
static char *erroropt = NULL;
static char *xteopt = NULL;
static char *lenopt = NULL;
+void (*waypt_del_fnp) (route_head *rte, waypoint *wpt);
static
arglist_t routesimple_args[] = {
/* short-circuit if we already have fewer than the max points */
if ( countopt && count >= rte->rte_waypt_ct) return;
+ /* short-circuit if the route is impossible to simplify, too. */
+ if ( 2 >= rte->rte_waypt_ct ) return;
+
xte_recs = (struct xte *) xcalloc( rte->rte_waypt_ct, sizeof (struct xte));
cur_rte = rte;
totalerror += xte_recs[i].distance;
}
}
- route_del_wpt( (route_head *)(void *)rte,
+ (*waypt_del_fnp)( (route_head *)(void *)rte,
(waypoint *)(void *)(xte_recs[i].intermed->wpt));
waypt_free((waypoint *)(void *)(xte_recs[i].intermed->wpt));
void
routesimple_process( void )
{
+ waypt_del_fnp = route_del_wpt;
route_disp_all( routesimple_head, routesimple_tail, routesimple_waypt_pr );
+
+ waypt_del_fnp = track_del_wpt;
track_disp_all( routesimple_head, routesimple_tail, routesimple_waypt_pr );
}
Support for Suunto Trackmanager SDF format.
- Copyright (C) 2005,2006 Olaf Klein, o.b.klein@gpsbabel.org
+ Copyright (C) 2005,2007 Olaf Klein, o.b.klein@gpsbabel.org
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
ToDo: Ascending/Descending
*/
+#include "defs.h"
+
+#if CSVFMTS_ENABLED
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include "defs.h"
#include "csv_util.h"
#include "strptime.h"
#include "jeeps/gpsmath.h"
static gbfile *fin, *fout;
-// Empty structs aren't C89. But this wasn't being used anyway.
-//typedef struct stmsdf_s {
-//} stmsdf_t;
-
static int lineno;
static int datum;
-static int datum86;
static int filetype;
static route_head *route;
static queue trackpts;
static int saved_points;
static time_t start_time;
static unsigned char this_valid;
+static short_handle short_h;
#define route_index this_index
#define track_index this_index
case 7:
switch(what) {
case 0:
- wpt->speed = atof(str) * 3.6; break;
+ WAYPT_SET(wpt, speed, atof(str) * 3.6); break;
case 3:
- wpt->proximity = atof(str);
+ WAYPT_SET(wpt, proximity, atof(str));
xasprintf(&wpt->notes, "Alarm point: radius=%s", str);
break;
}
break;
case 8:
- if (what == 0) wpt->course = atof(str);
+ if (what == 0) WAYPT_SET(wpt, course, atof(str));
break;
case 9:
case 10:
wpt->creation_time = mklocaltime(&tm);
}
- if (datum != datum86) {
+ if (datum != DATUM_WGS84) {
double ht;
GPS_Math_WGS84_To_Known_Datum_M(wpt->latitude, wpt->longitude, 0,
&wpt->latitude, &wpt->longitude, &ht, datum);
lineno = 0;
route = NULL;
- datum = datum86 = GPS_Lookup_Datum_Index("WGS84");
+ datum = DATUM_WGS84;
filetype = 28;
rte_name = rte_desc = NULL;
else
*desc -= dh;
}
-
}
else {
*speed = 0;
if (asc) *asc = 0;
if (desc) *desc = 0;
}
- if (wpt->speed != unknown_speed) *speed = wpt->speed / 3.6; /* -> meters per second */
- if (wpt->course != unknown_course) *course = wpt->course;
+ if WAYPT_HAS(wpt, speed) *speed = wpt->speed / 3.6; /* -> meters per second */
+ if WAYPT_HAS(wpt, course) *course = wpt->course;
+
}
/* pre-calculation callbacks */
route_disp_wpt_cb(const waypoint *wpt)
{
if (this_route_valid) {
+ char *sn;
+
+ if (global_opts.synthesize_shortnames)
+ sn = mkshort_from_wpt(short_h, wpt);
+ else
+ sn = mkshort(short_h, wpt->shortname);
gbfprintf(fout, "\"WP\",\"%s\",%.8lf,%.8lf,%.f\n",
- wpt->shortname, wpt->latitude, wpt->longitude, ALT(wpt));
+ sn, wpt->latitude, wpt->longitude, ALT(wpt));
+ xfree(sn);
}
}
wr_init(const char *fname)
{
fout = gbfopen(fname, "w", MYNAME);
+ short_h = mkshort_new_handle();
}
static void
wr_deinit(void)
{
+ mkshort_del_handle(&short_h);
gbfclose(fout);
}
all_points = 0;
start_time = 0;
+ setshort_length(short_h, 100);
+ setshort_badchars(short_h, "\r\n");
+ setshort_mustupper(short_h, 0);
+ setshort_mustuniq(short_h, 0);
+ setshort_whitespace_ok(short_h, 1);
+ setshort_repeating_whitespace_ok(short_h, 1);
switch(global_opts.objective)
{
};
/* ================================================================== */
+
+#endif /* CSVFMTS_ENABLED */
+
Support for "Suunto Trek Manager" (STM) WaypointPlus files,
see homepage "http://www.suunto.fi" for more details,
- Copyright (C) 2005 Olaf Klein, o.b.klein@gpsbabel.org
+ Copyright (C) 2005,2007 Olaf Klein, o.b.klein@gpsbabel.org
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
*/
+
#include "defs.h"
+
+#if CSVFMTS_ENABLED
+
#include "csv_util.h"
#include <ctype.h>
#include <stdio.h>
static gbfile *fin, *fout;
static route_head *track, *route;
static waypoint *wpt;
+static short_handle short_h;
#define MYNAME "STMwpp"
buff = gbfgetstr(fin);
buff = (buff == NULL) ? "" : buff;
- if (strncmp(buff, "Datum,WGS 84,WGS 84,", 20) != 0)
+ if (case_ignore_strncmp(buff, "Datum,WGS 84,WGS 84,", 20) != 0)
fatal(MYNAME ": Invalid GPS datum or not \"WaypointPlus\"\" file!\n");
while ((buff = gbfgetstr(fin)))
int column = -1;
struct tm time;
+ buff = lrtrim(buff);
+ if (*buff == '\0') continue;
+
wpt = NULL;
memset(&time, 0, sizeof(time));
- c = csv_lineparse(buff, ",", "", column++);
- while (c != NULL)
+ while ((c = csv_lineparse(buff, ",", "", column++)))
{
int new_what;
int fracsec;
+ buff = NULL;
+
switch(column)
{
case 0:
default:
break;
}
- c = csv_lineparse(NULL, ",", "", column++);
}
if (wpt != NULL)
{
switch(what)
{
- case STM_RTEPT:
- if (route == NULL) {
- route = route_head_alloc();
- route_add_head(route);
- }
- route_add_wpt(route, wpt);
- break;
-
case STM_WAYPT:
waypt_add(wpt);
+ if (global_opts.objective == rtedata) {
+ if (route == NULL) {
+ route = route_head_alloc();
+ route_add_head(route);
+ }
+ route_add_wpt(route, waypt_dupe(wpt));
+ }
break;
case STM_TRKPT:
stmwpp_rw_init(const char *fname)
{
fout = gbfopen(fname, "wb", MYNAME);
+ short_h = mkshort_new_handle();
}
static void
stmwpp_rw_deinit(void)
{
+ mkshort_del_handle(&short_h);
gbfclose(fout);
}
track_num++;
}
-static void
-stmwpp_track_tlr(const route_head *track)
-{
-}
-
static void
stmwpp_write_double(const double val)
{
c = buff + snprintf(buff, sizeof(buff), "%3.7f", val);
while (*--c == '0') *c = '\0';
- if (*c == '.') *c = '0';
+ if (*c == '.') *++c = '0';
gbfprintf(fout, "%s,", buff);
}
switch(what)
{
+ char *sn;
+
case STM_WAYPT:
case STM_RTEPT:
- gbfprintf(fout, "WP,D,%s,", wpt->shortname);
+ if (global_opts.synthesize_shortnames)
+ sn = mkshort_from_wpt(short_h, wpt);
+ else
+ sn = mkshort(short_h, wpt->shortname);
+ gbfprintf(fout, "WP,D,%s,", sn);
+ xfree(sn);
break;
case STM_TRKPT:
static void
stmwpp_data_write(void)
{
+ setshort_length(short_h, 100);
+ setshort_badchars(short_h, ",\r\n");
+ setshort_mustupper(short_h, 0);
+ setshort_mustuniq(short_h, 0);
+ setshort_whitespace_ok(short_h, 1);
+ setshort_repeating_whitespace_ok(short_h, 1);
+
track_num = 0;
if (index_opt != NULL)
track_index = atoi(index_opt);
case wptdata:
what = STM_WAYPT;
track_index = track_num; /* disable filter */
+ setshort_defname(short_h, "WPT");
waypt_disp_all(stmwpp_waypt_cb);
break;
case rtedata:
what = STM_RTEPT;
- route_disp_all(stmwpp_track_hdr, stmwpp_track_tlr, stmwpp_waypt_cb);
+ setshort_defname(short_h, "RPT");
+ route_disp_all(stmwpp_track_hdr, NULL, stmwpp_waypt_cb);
break;
case trkdata:
what = STM_TRKPT;
- track_disp_all(stmwpp_track_hdr, stmwpp_track_tlr, stmwpp_waypt_cb);
+ track_disp_all(stmwpp_track_hdr, NULL, stmwpp_waypt_cb);
break;
case posndata:
fatal(MYNAME ": Realtime positioning not supported.\n");
stmwpp_args,
CET_CHARSET_MS_ANSI, 0
};
+
+#endif /* CSVFMTS_ENABLED */
+
--- /dev/null
+# gpsbabel XCSV style file
+#
+# Format: TomTom Navigator Places of Interest
+# Author: Olaf Klein
+# Date: 04/17/2007
+#
+DESCRIPTION TomTom POI file (.asc)
+EXTENSION asc
+DATATYPE WAYPOINT
+#
+# FILE LAYOUT DEFINITIIONS:
+#
+FIELD_DELIMITER COMMA
+RECORD_DELIMITER CRNEWLINE
+BADCHARS ,"
+ENCODING MS-ANSI
+#
+PROLOGUE TomTom Navigator Places of Interest
+PROLOGUE GPSBabel-__VERSION__ ASCII Export
+PROLOGUE Points
+PROLOGUE Created at: __DATE_AND_TIME__
+# #
+# INDIVIDUAL DATA FIELDS, IN ORDER OF APPEARANCE:
+#
+IFIELD LON_DECIMAL, "", "%.6f"
+IFIELD LAT_DECIMAL, "", "%.6f"
+IFIELD SHORTNAME, "", ""%s""
--- /dev/null
+# gpsbabel XCSV style file
+#
+# Format: TomTom Navigator Itineraries (Routes)
+# Author: Olaf Klein
+# Date: 04/17/2007
+#
+DESCRIPTION TomTom Itineraries (.itn)
+EXTENSION itn
+DATATYPE ROUTE
+#
+# FILE LAYOUT DEFINITIIONS:
+#
+FIELD_DELIMITER PIPE
+RECORD_DELIMITER CRNEWLINE
+BADCHARS ,|
+ENCODING MS-ANSI
+#
+# INDIVIDUAL DATA FIELDS, IN ORDER OF APPEARANCE:
+#
+IFIELD LAT_10E5, "", "%.f"
+IFIELD LON_10E5, "", "%.f"
+IFIELD SHORTNAME, "", "%s"
+IFIELD CONSTANT, "0", "%s"
#include "defs.h"
#include "xmlgeneric.h"
-static waypoint *wpt_tmp = NULL;
-static int item_count = -1;
-static int waypoints = 0;
-
+static waypoint *wpt_tmp;
+static int item_count;
+static int waypoints;
+static double version;
static route_head *route = NULL;
static char *routevia = NULL;
static arglist_t tef_xml_args[] =
{
- {"routevia", &routevia, "Include only via stations in route", NULL, ARGTYPE_BOOL, ARG_NOMINMAX},
+ {"routevia", &routevia, "Include only via stations in route",
+ NULL, ARGTYPE_BOOL, ARG_NOMINMAX},
ARG_TERMINATOR
};
#else
+static char *
+trimmed_strdup(const char *str)
+{
+ char *c1, *c2, *res;
+
+ c1 = xstrdup(str);
+ c2 = lrtrim(c1);
+ if (*c2) res = xstrdup(c2);
+ else res = NULL;
+ xfree(c1);
+ return res;
+}
+
static xg_callback tef_start, tef_header, tef_list_start, tef_list_end;
static xg_callback tef_item_start, tef_point, tef_item_end;
static
xg_tag_mapping tef_xml_map[] = {
{ tef_start, cb_start, "/TEF" },
- { tef_header, cb_start, "/TEF/Header" },
- { tef_list_start, cb_start, "/TEF/WaypointList" },
- { tef_item_start, cb_start, "/TEF/WaypointList/Item" },
- { tef_point, cb_start, "/TEF/WaypointList/Item/Point" },
- { tef_item_end, cb_end, "/TEF/WaypointList/Item" },
- { tef_list_end, cb_end, "/TEF/WaypointList" },
- { NULL, 0, NULL }
+ { tef_header, cb_start, "/TEF/Header" },
+ { tef_list_start, cb_start, "/TEF/WaypointList" },
+ { tef_item_start, cb_start, "/TEF/WaypointList/Item" },
+ { tef_point, cb_start, "/TEF/WaypointList/Item/Point" },
+ { tef_item_end, cb_end, "/TEF/WaypointList/Item" },
+ { tef_list_end, cb_end, "/TEF/WaypointList" },
+ { NULL, 0, NULL }
};
{
int valid = 0;
const char **avp = &attrv[0];
- while (*avp)
- {
- if (strcmp(avp[0], "Comment") == 0)
- {
- if (0 == strcmp(avp[1], "TourExchangeFormat")) valid = 1;
- }
- avp+=2;
- }
- if (!valid)
- {
- fatal(MYNAME ": error in source file.\n");
+
+ while (*avp) {
+ if (0 == case_ignore_strcmp(avp[0], "Comment")) {
+ if (0 == case_ignore_strcmp(avp[1], "TourExchangeFormat"))
+ valid = 1;
+ }
+ else if (0 == case_ignore_strcmp(avp[0], "Version"))
+ version = atof(avp[1]);
+ avp+=2;
}
+ if (!valid)
+ fatal(MYNAME ": Error in source file.\n");
}
/*
* tef_header: "Name" > Route name, "Software" > Route descr.
*/
-void
+static void
tef_header(const char *args, const char **attrv)
{
const char **avp = &attrv[0];
route = route_head_alloc();
- while (*avp)
- {
- if (strcmp(avp[0], "Name") == 0)
- {
- route->rte_name = xstrdup(avp[1]);
- }
- else if (strcmp(avp[0], "Software") == 0)
- {
- route->rte_desc = xstrdup(avp[1]);
- }
- avp+=2;
+ while (*avp) {
+ if (case_ignore_strcmp(avp[0], "Name") == 0)
+ route->rte_name = trimmed_strdup(avp[1]);
+ else if (case_ignore_strcmp(avp[0], "Software") == 0)
+ route->rte_desc = trimmed_strdup(avp[1]);
+ avp+=2;
}
route_add_head(route);
}
-/*
- *
- */
-
-void
+static void
tef_list_start(const char *args, const char **attrv)
{
const char **avp = &attrv[0];
- while (*avp)
- {
- if (strcmp(avp[0], "ItemCount") == 0)
- {
- sscanf(avp[1], "%d", &item_count);
- }
- avp+=2;
- }
+ while (*avp) {
+ if (strcmp(avp[0], "ItemCount") == 0)
+ sscanf(avp[1], "%d", &item_count);
+ avp+=2;
+ }
}
-/*
- * local procedure for waypoint handling
+/* in "TourExchangeFormat" the following can happen:
+ *
+ * SegDescription="L34\Wittlicher Strasse"
+ * PointDescription="Wittlicher Strasse ( "
+ *
+ * fix_notes tries to create a new PointDescription, which
+ * should be "Wittlicher Strasse (L34)" for the example above
*/
-
-void waypoint_final()
+
+static char *
+fix_notes(const char *name, char *notes)
+{
+ char *cleft, *cright, *cback, *ctmp;
+
+ if ((! name) || (! notes)) return notes;
+
+ /* do we have a BACKSLASH in shortname ? */
+ cback = strchr(name, '\\');
+ if ((! cback) || (cback == name)) return notes;
+
+ /* do we have left, but no right parenthesis in notes ? */
+ if (! (cleft = strchr(notes, '('))) return notes;
+ cright = strchr(notes, ')');
+ if (cright && (cright > cleft)) return notes;
+
+ /* now contruct the new name */
+ ctmp = lrtrim(xstrndup(notes, cleft - notes));
+ xfree(notes);
+ xasprintf(¬es, "%s (%*.*s)", ctmp, cback - name, cback - name, name);
+ xfree(ctmp);
+
+ return notes;
+}
+
+static void
+waypoint_final()
{
int via;
if (wpt_tmp == NULL) return;
via = wpt_tmp->microseconds;
wpt_tmp->microseconds = 0;
-
+
+ if (version < 2) { /* keep the old behaviour */
+ wpt_tmp->notes = wpt_tmp->description;
+ wpt_tmp->description = NULL;
+ }
+
+ wpt_tmp->notes = fix_notes(wpt_tmp->shortname, wpt_tmp->notes);
+
if (via != 0)
- waypt_add(wpt_tmp);
-
- if (route != NULL)
- {
- if ((via != 0) || (routevia == NULL))
- {
- waypoint *wpt = waypt_dupe(wpt_tmp);
- route_add_wpt(route, wpt);
- }
+ waypt_add(wpt_tmp);
+
+ if (route != NULL) {
+ if ((via != 0) || (routevia == NULL)) {
+ waypoint *wpt = waypt_dupe(wpt_tmp);
+ route_add_wpt(route, wpt);
+ }
}
-
+
if (via == 0)
- waypt_free(wpt_tmp);
-
+ waypt_free(wpt_tmp);
+
wpt_tmp = NULL;
}
-void
+static void
tef_item_end(const char *args, const char **unused)
{
waypoint_final();
}
-/*
- *
- */
-
-void
+static void
tef_list_end(const char *args, const char **unused)
{
waypoint_final();
if (waypoints != item_count)
- {
- fatal(MYNAME ": waypoint count differs to internal \"ItemCount\"! (%d to %d)\n", waypoints, item_count);
- }
+ fatal(MYNAME ": waypoint count differs to internal \"ItemCount\"! (%d to %d)\n",
+ waypoints, item_count);
}
-/*
- *
- */
-
-void
+static void
tef_item_start(const char *args, const char **attrv)
{
const char **avp = &attrv[0];
- wpt_tmp = waypt_new();
-
- if ((waypoints == 1) || (waypoints == item_count))
- wpt_tmp->microseconds++;
-
waypoints++;
-
+
+ wpt_tmp = waypt_new();
+ if ((waypoints == 1) || (waypoints == item_count))
+ wpt_tmp->microseconds++;
+
while (*avp)
{
- if (0 == strcmp(avp[0], "PointDescription"))
- {
- wpt_tmp->shortname = xstrdup(avp[1]);
- }
- if (0 == strcmp(avp[0], "SegDescription"))
- {
- wpt_tmp->description = xstrdup(avp[1]);
- }
- if ((0 == strcmp(avp[0], "ViaStation")) && (0 == strcmp(avp[1], "true")))
- {
- wpt_tmp->microseconds = 1;
- }
- avp+=2;
+ if (0 == case_ignore_strcmp(avp[0], "SegDescription"))
+ wpt_tmp->shortname = trimmed_strdup(avp[1]);
+ else if (0 == case_ignore_strcmp(avp[0], "PointDescription"))
+ wpt_tmp->description = trimmed_strdup(avp[1]);
+ else if ((0 == case_ignore_strcmp(avp[0], "ViaStation")) &&
+ (0 == case_ignore_strcmp(avp[1], "true")))
+ wpt_tmp->microseconds = 1; /* only a flag */
+
+ /* new in TEF V2 */
+ else if (0 == case_ignore_strcmp(avp[0], "Instruction"))
+ wpt_tmp->description = trimmed_strdup(avp[1]);
+ else if (0 == case_ignore_strcmp(avp[0], "Altitude"))
+ wpt_tmp->altitude = atof(avp[1]);
+ else if (0 == case_ignore_strcmp(avp[0], "TimeStamp"))
+ /* nothing for the moment */;
+
+ avp+=2;
}
}
-/*
- *
- */
-
-void
+static void
tef_point(const char *args, const char **attrv)
{
- const char **avp = &attrv[0];
+ const char **avp = &attrv[0];
char *comma;
if (!wpt_tmp) return;
- while (*avp)
- {
- if (strcmp(avp[0], "y") == 0)
- {
- comma = strstr(avp[1], ",");
- if (comma) *comma='.';
- sscanf(avp[1], "%lf", &wpt_tmp->latitude);
- }
- else if (strcmp(avp[0], "x") == 0)
- {
- comma = strstr(avp[1], ",");
- if (comma) *comma='.';
- sscanf(avp[1], "%lf", &wpt_tmp->longitude);
- }
- avp+=2;
- }
+ while (*avp) {
+ if (strcmp(avp[0], "y") == 0) {
+ comma = strstr(avp[1], ",");
+ if (comma) *comma='.';
+ sscanf(avp[1], "%lf", &wpt_tmp->latitude);
+ }
+ else if (strcmp(avp[0], "x") == 0) {
+ comma = strstr(avp[1], ",");
+ if (comma) *comma='.';
+ sscanf(avp[1], "%lf", &wpt_tmp->longitude);
+ }
+ avp+=2;
+ }
}
-/*
- *
- */
-
static void
tef_xml_rd_init(const char *fname)
{
+ wpt_tmp = NULL;
+ waypoints = 0;
+ item_count = -1;
+ version = 1.5;
+
xml_init(fname, tef_xml_map, NULL);
}
-/*
- *
- */
-
static void
tef_xml_read(void)
{
#endif
-/*
- *
- */
-
-void
+static void
tef_xml_rd_deinit(void)
{
xml_deinit();
REFGPX="reference/expertgps.gpx" # reference file for all tests
EXCL="ozi vitosmt" # exclude formats from test
CAPS=""
-TEMPDIR=/tmp/gb-test-all
+TEMPDIR=${GBTEMP:-/tmp}/gb-test-all
CATALOG=/tmp/gb-test-all.done
LOGFILE=/tmp/gb-test-all.log
esac
case ${caps:2:2} in
rw)
- CMD="${PNAME} -t -i gpx -f $REFGPX -x nuketypes,waypoints,routes -o $format -F $TEMPDIR/t-$format"
+ CMD="${PNAME} -t -i gpx -f $REFGPX -x nuketypes,waypoints,routes -x track,fix=2D -o $format -F $TEMPDIR/t-$format"
try_run "${CMD}" || continue
STAGE_1 "t" $format || exit 1
;;
-w)
- CMD="${PNAME} -t -i gpx -f $REFGPX -x nuketypes,waypoints,routes -o $format -F $TEMPDIR/t-$format"
+ CMD="${PNAME} -t -i gpx -f $REFGPX -x nuketypes,waypoints,routes -x track,fix=2D -o $format -F $TEMPDIR/t-$format"
try_run "${CMD}" || continue
;;
esac
OD=${OD:-od -Ax -txC -v}
fi
-TMPDIR=/tmp/gpsbabel.$$
+TMPDIR=${GBTEMP:-/tmp}/gpsbabel.$$
mkdir -p $TMPDIR
trap "rm -fr $TMPDIR" 0 1 2 3 15
cat ${REFERENCE}/mxf.mxf >> ${TMPDIR}/unicsv.txt
${PNAME} -i unicsv -f ${TMPDIR}/unicsv.txt -o gpx -F ${TMPDIR}/unicsv.gpx
compare ${TMPDIR}/unicsv.gpx ${REFERENCE}/unicsv.gpx
+${PNAME} -i garmin_txt -f ${REFERENCE}/garmin_txt.txt -x nuketypes,routes,tracks -o unicsv -F ${TMPDIR}/garmin_txt-uni.csv
+compare ${TMPDIR}/garmin_txt-uni.csv ${REFERENCE}/garmin_txt-uni.csv
#
# Basic NMEA tests
grep -v time <${TMPDIR}/wbt-200.gpx >${TMPDIR}/wbt-200.gpx2
compare ${TMPDIR}/wbt-200.gpx2 ${REFERENCE}/wbt-200.gpx
+#
+# WBT-201 tests
+#
+rm -f ${TMPDIR}/wbt-200.*
+${PNAME} -t -w -i wbt-bin -f ${REFERENCE}/wbt-201.tk1 -o gpx -F ${TMPDIR}/wbt-201.gpx
+# Remove the timestamp
+grep -v time <${TMPDIR}/wbt-201.gpx >${TMPDIR}/wbt-201.gpx2
+compare ${TMPDIR}/wbt-201.gpx2 ${REFERENCE}/wbt-201.gpx
+
#
# Sportsim style-sheet
#
# Transformation filter (transform) tests
#
rm -f ${TMPDIR}/transform*
-${PNAME} -i gpx -f ${REFERENCE}/expertgps.gpx -x nuketypes,routes,tracks -x transform,rte=wpt,del=y -o gpx -F ${TMPDIR}/transform-rte.gpx
+${PNAME} -i gpx -f ${REFERENCE}/expertgps.gpx -x nuketypes,routes,tracks -x transform,rte=wpt,del=y -o gpx,gpxver=1.1 -F ${TMPDIR}/transform-rte.gpx
compare ${TMPDIR}/transform-rte.gpx ${REFERENCE}/transform-rte.gpx
-${PNAME} -i gpx -f ${REFERENCE}/expertgps.gpx -x nuketypes,waypoints,tracks -x transform,wpt=rte,del=y -o gpx -F ${TMPDIR}/transform-wpt.gpx
+${PNAME} -i gpx -f ${REFERENCE}/expertgps.gpx -x nuketypes,waypoints,tracks -x transform,wpt=rte,del=y -o gpx,gpxver=1.1 -F ${TMPDIR}/transform-wpt.gpx
compare ${TMPDIR}/transform-wpt.gpx ${REFERENCE}/transform-wpt.gpx
#
${PNAME} -i alantrl -f ${TMPDIR}/alantrl-new.trl -o gpx -F ${TMPDIR}/alantrl-new.gpx
compare ${TMPDIR}/alantrl-new.gpx ${REFERENCE}/alantrl.gpx
+#
+# VITO SmartMap .vtt track file 'vitovtt' test
+#
+rm -f ${TMPDIR}/vitovtt-*
+${PNAME} -i vitovtt -f ${REFERENCE}/track/vitovtt-sample.vtt -o gpx -F ${TMPDIR}/vitovtt-sample.gpx
+compare ${REFERENCE}/track/vitovtt-sample.gpx ${TMPDIR}/vitovtt-sample.gpx
+
+#
+# Test > 1 URL in selected files.
+#
+rm -f ${TMPDIR}/mlink*
+${PNAME} -i gpx -f reference/multiple-links.gpx -o gpx,gpxver=1.1 -F ${TMPDIR}/mlink-1.gpx
+compare ${TMPDIR}/mlink-1.gpx reference/multiple-links.gpx
+
+#
+# Geogrid Viewer tracklogs
+#
+rm -f ${TMPDIR}/ggv_log*
+${PNAME} -i gdb -f ${REFERENCE}/gdb-sample.gdb -x track,pack -o ggv_log -F ${TMPDIR}/ggv_log-sample.log
+bincompare ${REFERENCE}/track/ggv_log-sample.log ${TMPDIR}/ggv_log-sample.log
+${PNAME} -i ggv_log -f ${REFERENCE}/track/ggv_log-sample.log -o ggv_log -F ${TMPDIR}/ggv_log-sample2.log
+bincompare ${REFERENCE}/track/ggv_log-sample.log ${TMPDIR}/ggv_log-sample2.log
+
+#
+# G7ToWin (read only) test
+#
+${PNAME} -i g7towin -f ${REFERENCE}/expertgps.g7t -o garmin_txt,utc=0 -F ${TMPDIR}/expertgps-g7t.txt
+compare ${REFERENCE}/expertgps-g7t.txt ${TMPDIR}/expertgps-g7t.txt
+
+#
+# TomTom Navigator Places of Interest (.asc)
+#
+${PNAME} -i tomtom_asc -f ${REFERENCE}/tomtom_poi.asc -o tomtom_asc -F ${TMPDIR}/tomtom_poi.asc
+compare ${REFERENCE}/tomtom_poi.asc ${TMPDIR}/tomtom_poi.asc
+
+#
+# TomTom Navigator Itinerary files (.asc)
+#
+${PNAME} -i tomtom_itn -f ${REFERENCE}/route/tomtom_itn.itn -o tomtom_itn -F ${TMPDIR}/tomtom_itn.itn
+compare ${REFERENCE}/route/tomtom_itn.itn ${TMPDIR}/tomtom_itn.itn
+
+#
+# Garmin Points of Interest "garmin_gpi" (.gpi)
+#
+${PNAME} -i garmin_gpi -f ${REFERENCE}/garmin_gpi.gpi -o gpx -F ${TMPDIR}/garmin_gpi.gpx
+compare ${REFERENCE}/garmin_gpi.gpx ${TMPDIR}/garmin_gpi.gpx
+${PNAME} -i gpx -f ${REFERENCE}/garmin_gpi.gpx -o garmin_gpi -F ${TMPDIR}/garmin_gpi.gpi
+${PNAME} -i garmin_gpi -f ${TMPDIR}/garmin_gpi.gpi -o gpx -F ${TMPDIR}/garmin_gpi2.gpx
+compare ${REFERENCE}/garmin_gpi2.gpx ${TMPDIR}/garmin_gpi2.gpx
+${PNAME} -i gpx -f ${REFERENCE}/track/vitovtt-sample.gpx -x transform,wpt=trk -o garmin_gpi -F ${TMPDIR}/garmin_gpi3a.gpi
+${PNAME} -i garmin_gpi -f ${TMPDIR}/garmin_gpi3a.gpi -o garmin_gpi -F ${TMPDIR}/garmin_gpi3b.gpi
+bincompare ${TMPDIR}/garmin_gpi3a.gpi ${TMPDIR}/garmin_gpi3b.gpi
+${PNAME} -i garmin_gpi -f ${REFERENCE}/gpi_ext-sample.gpi -o unicsv -F ${TMPDIR}/gpi_ext-sample.csv
+compare ${REFERENCE}/gpi_ext-sample.csv ${TMPDIR}/gpi_ext-sample.csv
+
+
exit 0
static char *includelogs = NULL;
static char *degformat = NULL;
static char *altunits = NULL;
+static char *split_output = NULL;
+static int waypoint_count;
+static char *output_name;
#define MYNAME "TEXT"
"Degrees output as 'ddd', 'dmm'(default) or 'dms'", "dmm", ARGTYPE_STRING, ARG_NOMINMAX },
{ "altunits", &altunits,
"Units for altitude (f)eet or (m)etres", "m", ARGTYPE_STRING, ARG_NOMINMAX },
+ { "splitoutput", &split_output,
+ "Write each waypoint in a separate file", NULL, ARGTYPE_BOOL, ARG_NOMINMAX },
ARG_TERMINATOR
};
static void
wr_init(const char *fname)
{
- file_out = gbfopen(fname, "w", MYNAME);
+ waypoint_count = 0;
+ output_name = xstrdup(fname);
+ if (!split_output) {
+ file_out = gbfopen(fname, "w", MYNAME);
+ }
mkshort_handle = mkshort_new_handle();
}
static void
wr_deinit(void)
{
- gbfclose(file_out);
+ if (!split_output) {
+ gbfclose(file_out);
+ }
mkshort_del_handle(&mkshort_handle);
+ xfree(output_name);
}
static void
char *tmpout1, *tmpout2;
char *altout;
fs_xml *fs_gpx;
+
+ waypoint_count++;
+
+ if (split_output) {
+ char *thisfname;
+ xasprintf(&thisfname, "%s%d", output_name, waypoint_count);
+ file_out = gbfopen(thisfname, "w", MYNAME);
+ }
lonint = abs((int) wpt->longitude);
latint = abs((int) wpt->latitude);
tm = time(NULL);
strftime(tbuf, sizeof(tbuf), "%d-%b-%Y", localtime(&tm));
- tmpout1 = pretty_deg_format(wpt->latitude, wpt->longitude, degformat[2], 0);
+ tmpout1 = pretty_deg_format(wpt->latitude, wpt->longitude, degformat[2], " ", 0);
if (wpt->altitude != unknown_alt) {
xasprintf(&altout, " alt:%d", (int) ( (altunits[0]=='f')?METERS_TO_FEET(wpt->altitude):wpt->altitude) );
}
if ( coordstr ) {
lon = atof( coordstr );
}
- coordstr = pretty_deg_format(lat, lon, degformat[2], 0);
+ coordstr = pretty_deg_format(lat, lon, degformat[2], " ", 0);
gbfprintf( file_out, "%s\n", coordstr);
xfree(coordstr);
}
gbfprintf(file_out, "\n-----------------------------------------------------------------------------\n");
else
gbfprintf(file_out, "\n");
-
-
+
+ if (split_output) {
+ gbfclose(file_out);
+ file_out = NULL;
+ }
}
static void
data_write(void)
{
- if (! suppresssep)
+ if (! suppresssep && !split_output)
gbfprintf(file_out, "-----------------------------------------------------------------------------\n");
setshort_length(mkshort_handle, 6);
waypt_disp_all(text_disp);
test -s "$dirname/.cvsignore" || continue
while read filemask; do
test -z "$filemask" && continue
- cmd="rm -fv $dirname/$filemask"
+ cmd="rm -Rfv $dirname/$filemask"
${cmd}
done < "$dirname/.cvsignore"
done
2006-06-01: Add name option
2007-01-08: if not really needed disable check for valid timestamps
(based on patch from Vladimir Kondratiev)
+ 2007-07-26: Allow 'range' together with trackpoints without timestamp
*/
#include <ctype.h>
}
if ( first ) {
if ( opt_course ) {
- wpt->course = 0;
+ WAYPT_SET(wpt, course, 0);
}
if ( opt_speed ) {
- wpt->speed = 0;
+ WAYPT_SET(wpt, speed, 0);
}
first = 0;
}
else {
if ( opt_course ) {
- wpt->course = heading_true_degrees( RAD(oldlat),
+ WAYPT_SET(wpt, course, heading_true_degrees( RAD(oldlat),
RAD(oldlon),RAD(wpt->latitude),
- RAD(wpt->longitude) );
+ RAD(wpt->longitude)) );
}
if ( opt_speed ) {
if ( oldtime != wpt->creation_time ) {
- wpt->speed = radtometers(gcdist(
+ WAYPT_SET(wpt, speed, radtometers(gcdist(
RAD(oldlat), RAD(oldlon),
RAD(wpt->latitude),
RAD(wpt->longitude))) /
- labs(wpt->creation_time-oldtime);
+ labs(wpt->creation_time-oldtime));
}
else {
- wpt->speed = unknown_speed;
+ WAYPT_UNSET(wpt, speed);
}
}
}
{
time_t start, stop;
queue *elem, *tmp;
- int i, dropped;
+ int i, dropped, inside = 0;
if (opt_start != 0)
start = trackfilter_range_check(opt_start);
else
stop = 0x7FFFFFFF;
- dropped = 0;
+ dropped = inside = 0;
for (i = 0; i < track_ct; i++)
{
{
waypoint *wpt = (waypoint *)elem;
- if ((wpt->creation_time < start) || (wpt->creation_time > stop))
- {
+ if (wpt->creation_time > 0) {
+ inside = ((wpt->creation_time >= start) && (wpt->creation_time <= stop));
+ }
+
+ if (! inside) {
track_del_wpt(track, wpt);
waypt_free(wpt);
dropped++;
*/
need_time = (
opt_merge || opt_pack || opt_split || opt_sdistance ||
- opt_move || opt_start || opt_stop || opt_fix || opt_speed ||
+ opt_move || opt_fix || opt_speed ||
(trackfilter_opt_count() == 0) /* do pack by default */
);
/* in case of a formated title we also need valid timestamps */
/*
Universal CSV - support for csv files, divining field order from the header.
- Copyright (C) 2006 Robert Lipe, robertlipe@usa.net
+ Copyright (C) 2006 Robert Lipe, robertlipe@usa.net,
+ copyright (C) 2007 Olaf Klein, o.b.klein@gpsbabel.org
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
*/
#include "defs.h"
+#include "cet.h"
+#include "cet_util.h"
#include "csv_util.h"
+#include "garmin_fs.h"
+#include "garmin_tables.h"
#include "jeeps/gpsmath.h"
+#include "strptime.h"
+#include <string.h>
+#include <time.h>
#define MYNAME "unicsv"
-static gbfile *file_in;
+/* "UNICSV_FIELD_SEP" and "UNICSV_LINE_SEP" are only used by the writer */
-/* This structure must contain only ints. Firstval must be first.
- * This is block initialized.
+#define UNICSV_FIELD_SEP ","
+#define UNICSV_LINE_SEP "\r\n"
+#define UNICSV_QUOT_CHAR '"'
+
+/* GPSBabel internal and calculated fields */
+
+typedef enum {
+ fld_shortname = 0,
+ fld_latitude,
+ fld_longitude,
+ fld_description,
+ fld_notes,
+ fld_url,
+ fld_altitude,
+ fld_utm_zone,
+ fld_utm_zone_char,
+ fld_utm_northing,
+ fld_utm_easting,
+ fld_utm,
+ fld_bng,
+ fld_bng_zone,
+ fld_bng_northing,
+ fld_bng_easting,
+ fld_hdop,
+ fld_pdop,
+ fld_vdop,
+ fld_sat,
+ fld_fix,
+ fld_utc_date,
+ fld_utc_time,
+ fld_course,
+ fld_speed,
+ fld_temperature,
+ fld_temperature_f,
+ fld_heartrate,
+ fld_cadence,
+ fld_proximity,
+ fld_depth,
+ fld_symbol,
+ fld_date,
+ fld_time,
+ fld_datetime,
+ fld_iso_time,
+ fld_garmin_city,
+ fld_garmin_postal_code,
+ fld_garmin_state,
+ fld_garmin_country,
+ fld_garmin_addr,
+ fld_garmin_phone_nr,
+ fld_garmin_facility,
+ fld_terminator
+} field_e;
+
+#define STR_LEFT 1
+#define STR_RIGHT 2
+#define STR_ANY 4
+#define STR_EQUAL 8
+#define STR_CASE 16
+
+typedef struct {
+ char *name;
+ field_e type;
+ gbuint32 options;
+} field_t;
+
+/*
+ * ! Please use always underscores in field names !
+ * we check a second time after replacing underscores with spaces
*/
-struct {
- int firstval;
- int latcol;
- int loncol;
- int namecol;
- int desccol;
- int notescol;
- int altcol;
- int urlcol;
- int utmzcol; /* Zone */
- int utmncol; /* Northing */
- int utmecol; /* Easting */
- int utmccol; /* Zone character */
-} unicsv_fieldpos;
+static field_t fields_def[] = {
+ { "name", fld_shortname, STR_ANY },
+ { "desc", fld_description, STR_ANY },
+ { "notes", fld_notes, STR_ANY },
+ { "omment", fld_notes, STR_ANY },
+ { "text", fld_notes, STR_ANY },
+ { "url", fld_url, STR_ANY },
+ { "icon", fld_symbol, STR_ANY },
+ { "symb", fld_symbol, STR_ANY },
+ { "lat", fld_latitude, STR_ANY },
+ { "lon", fld_longitude, STR_ANY },
+ { "x", fld_longitude, STR_EQUAL },
+ { "y", fld_latitude, STR_EQUAL },
+ { "z", fld_altitude, STR_EQUAL },
+ { "x_pos", fld_longitude, STR_ANY },
+ { "y_pos", fld_latitude, STR_ANY },
+ { "alt", fld_altitude, STR_ANY },
+ { "ele", fld_altitude, STR_ANY },
+ { "utm_z", fld_utm_zone, STR_ANY },
+ { "utm_c", fld_utm_zone_char, STR_ANY },
+ { "utm_zc", fld_utm_zone_char, STR_ANY },
+ { "utm_n", fld_utm_northing, STR_ANY },
+ { "utm_e", fld_utm_easting, STR_ANY },
+ { "utm", fld_utm, STR_EQUAL },
+ { "utm_coo", fld_utm, STR_ANY },
+ { "utm_pos", fld_utm, STR_ANY },
+ { "bng_z", fld_bng_zone, STR_ANY },
+ { "bng_n", fld_bng_northing, STR_ANY },
+ { "bng_e", fld_bng_easting, STR_ANY },
+ { "bng", fld_bng, STR_EQUAL },
+ { "bng_coo", fld_bng, STR_ANY },
+ { "bng_pos", fld_bng, STR_ANY },
+ { "hdop", fld_hdop, STR_ANY },
+ { "pdop", fld_pdop, STR_ANY },
+ { "vdop", fld_vdop, STR_ANY },
+ { "sat", fld_sat, STR_ANY },
+ { "fix", fld_fix, STR_ANY },
+ { "utc_d", fld_utc_date, STR_ANY },
+ { "utc_t", fld_utc_time, STR_ANY },
+ { "head", fld_course, STR_ANY },
+ { "cour", fld_course, STR_ANY },
+ { "speed", fld_speed, STR_ANY },
+ { "geschw", fld_speed, STR_ANY }, /* speed in german */
+ { "tempf", fld_temperature_f, STR_EQUAL }, /* degrees fahrenheit */
+ { "temp", fld_temperature, STR_ANY }, /* degrees celsius by default */
+ { "heart", fld_heartrate, STR_ANY },
+ { "caden", fld_cadence, STR_ANY },
+ { "prox", fld_proximity, STR_ANY },
+ { "depth", fld_depth, STR_ANY },
+ { "date", fld_date, STR_ANY },
+ { "time", fld_time, STR_ANY },
+ /* garmin specials */
+ { "addr", fld_garmin_addr, STR_ANY },
+ { "street", fld_garmin_addr, STR_ANY },
+ { "city", fld_garmin_city, STR_ANY },
+ { "country", fld_garmin_country, STR_ANY },
+ { "post", fld_garmin_postal_code, STR_ANY },
+ { "zip", fld_garmin_postal_code, STR_ANY },
+ { "phone", fld_garmin_phone_nr, STR_ANY },
+ { "state", fld_garmin_state, STR_ANY },
+ { "faci", fld_garmin_facility, STR_ANY },
+ /* unhandled columns */
+ { "index", fld_terminator, STR_ANY },
+ { "no", fld_terminator, STR_EQUAL },
+ { NULL, fld_terminator, 0 }
+};
+static field_e *unicsv_fields_tab;
+static int unicsv_fields_tab_ct;
static double unicsv_altscale;
static char *unicsv_fieldsep;
+static gbfile *fin, *fout;
+static gpsdata_type unicsv_data_type;
+static route_head *unicsv_track, *unicsv_route;
+static unsigned long long unicsv_outp_flags;
+static grid_type unicsv_grid_idx;
+static int unicsv_datum_idx;
+static char *opt_datum, *opt_grid;
+static int unicsv_waypt_ct;
+static char unicsv_detect;
+
+static arglist_t unicsv_args[] = {
+ {"datum", &opt_datum, "GPS datum (def. WGS 84)",
+ "WGS 84", ARGTYPE_STRING, ARG_NOMINMAX},
+ {"grid", &opt_grid, "Write position using this grid.",
+ NULL, ARGTYPE_STRING, ARG_NOMINMAX},
+ ARG_TERMINATOR };
-static
-arglist_t unicsv_args[] = {
- ARG_TERMINATOR
-};
/* helpers */
// #define UNICSV_IS(f) (0 == strcmp(s, f))
#define UNICSV_CONTAINS(f) (0 != strstr(s, f))
+/* here we only need a simple yes(0) or no(1) */
+static int
+unicsv_strrcmp(const char *s1, const char *s2)
+{
+ int l1, l2;
+
+ l1 = strlen(s1);
+ l2 = strlen(s2);
+ if ((l1 - l2) >= 0)
+ return strcmp(s1 + (l1 - l2), s2);
+ else
+ return 1; /* false */
+}
+
+static int
+unicsv_parse_date(const char *str)
+{
+ int p1, p2, p3, ct;
+ char sep[2];
+ struct tm tm;
+
+ memset(&tm, 0, sizeof(tm));
+ ct = sscanf(str, "%d%1[-.//]%d%1[-.//]%d", &p1, sep, &p2, sep, &p3);
+ is_fatal(ct != 5, MYNAME ": Could not parse date string (%s).", str);
+
+ if ((p1 > 99) || (sep[0] == '-')) { /* Y-M-D (iso like) */
+ tm.tm_year = p1;
+ tm.tm_mon = p2;
+ tm.tm_mday = p3;
+ }
+ else if (sep[0] == '.') { /* Germany any other countries */
+ tm.tm_mday = p1; /* have fixed D.M.Y format */
+ tm.tm_mon = p2;
+ tm.tm_year = p3;
+ }
+ else {
+ tm.tm_mday = p2;
+ tm.tm_mon = p1;
+ tm.tm_year = p3;
+ }
+ if ((p1 < 100) && (p2 < 100) && (p3 < 100)) {
+ if (tm.tm_year < 70) tm.tm_year += 2000;
+ else tm.tm_year += 1900;
+ }
+ /* some low-level checks */
+ if ((tm.tm_mon > 12) || (tm.tm_mon < 1) || (tm.tm_mday > 31) || (tm.tm_mday < 1))
+ fatal(MYNAME ": Could not parse date string (%s).\n", str);
+
+ tm.tm_year -= 1900;
+ tm.tm_mon -= 1;
+
+ return mkgmtime(&tm);
+}
+
+static int
+unicsv_parse_time(const char *str, int *msec)
+{
+ int hour, min, ct, sec;
+ char sep[2];
+ char *dot;
+
+ ct = sscanf(str, "%d%1[.://]%d%1[.://]%d", &hour, sep, &min, sep, &sec);
+ is_fatal(ct != 5, MYNAME ": Could not parse time string (%s).\n", str);
+ if ((dot = strchr(str, '.'))) {
+ *msec = (atof(dot) + 0.0000005) * 1000000;
+ if (*msec >= 1000000) {
+ *msec = 0;
+ sec++;
+ }
+ }
+ else *msec = 0;
+
+ return ((hour * SECONDS_PER_HOUR) + (min * 60) + (int)sec);
+}
+
+static char
+unicsv_compare_fields(char *s, const field_t *f)
+{
+ char *name = (char *)f->name;
+ char *test = s;
+ char result;
+
+ if (! (f->options & STR_CASE)) {
+ test = strupper(xstrdup(s));
+ name = strupper(xstrdup(f->name));
+ }
+
+ if (f->options & STR_EQUAL) {
+ result = (strcmp(test, name) == 0);
+ }
+ else if (f->options & STR_ANY) {
+ result = (strstr(test, name) != NULL);
+ }
+ else {
+ if (f->options & STR_LEFT) {
+ result = (strncmp(test, name, strlen(name)) == 0);
+ }
+ else if (f->options & STR_RIGHT) {
+ result = (unicsv_strrcmp(test, name) == 0);
+ }
+ else {
+ result = 0; /* fallback to "FALSE" */
+ }
+ }
+
+ if ((! result) && (strchr(test, ' ') != NULL)) {
+ /* replace ' ' with '_' and try again */
+ char *tmp = gstrsub(test, " ", "_");
+ result = unicsv_compare_fields(tmp, f);
+ xfree(tmp);
+ }
+ if ((! result) && (strchr(test, '-') != NULL)) {
+ /* replace '-' with '_' and try again */
+ char *tmp = gstrsub(test, "-", "_");
+ result = unicsv_compare_fields(tmp, f);
+ xfree(tmp);
+ }
+
+ if (name != f->name) {
+ xfree(name);
+ xfree(test);
+ }
+
+ return result;
+}
+
+
static void
unicsv_fondle_header(char *ibuf)
{
char *s;
- unsigned int i;
- int *ip = &unicsv_fieldpos.firstval;
-
- for (i = 0; i < sizeof(unicsv_fieldpos) / sizeof(int); i++, ip++) {
- *ip = -1;
- }
+ char *buf = NULL;
+ int i, column;
+ const cet_cs_vec_t *ascii = &cet_cs_vec_ansi_x3_4_1968; /* us-ascii */
/* Convert the entire header to lower case for convenience.
* If we see a tab in that header, we decree it to be tabsep.
else if (*s == ';') {
unicsv_fieldsep = ";";
}
+ else if (*s == '|') {
+ unicsv_fieldsep = "|";
+ }
else {
- *s = tolower(*s);
+ continue;
}
+ break;
+ }
+ for (s = ibuf; *s; s++) {
+ *s = tolower(*s);
+ }
+
+ /* convert the header line into native ascii */
+ if (global_opts.charset != ascii) {
+ buf = cet_str_any_to_any(ibuf, global_opts.charset, ascii);
+ ibuf = buf;
}
- s = csv_lineparse(ibuf, unicsv_fieldsep, "", 0);
- for (i=0; s; i++,s = csv_lineparse(NULL, unicsv_fieldsep, "", 0)) {
- if (UNICSV_CONTAINS("lat")) {
- unicsv_fieldpos.latcol = i;
- }
- else if (UNICSV_CONTAINS("lon")) {
- unicsv_fieldpos.loncol = i;
- }
- else if (UNICSV_CONTAINS("desc")) {
- unicsv_fieldpos.desccol = i;
- }
- else if (UNICSV_CONTAINS("name")) {
- unicsv_fieldpos.namecol = i;
+ column = -1;
+ while ((s = csv_lineparse(ibuf, unicsv_fieldsep, "\"", 0))) {
+
+ field_t *f = &fields_def[0];
+
+ ibuf = NULL;
+ column++;
+ unicsv_fields_tab_ct++;
+ s = lrtrim(s);
+
+ if (column % 4 == 0) {
+ int sz = (column + 4) * sizeof(*unicsv_fields_tab);
+ if (column == 0) unicsv_fields_tab = xmalloc(sz);
+ else unicsv_fields_tab = xrealloc(unicsv_fields_tab, sz);
+ for (i = 0; i < 4; i++) unicsv_fields_tab[column + i] = fld_terminator;
}
- else if (UNICSV_CONTAINS("notes")) {
- unicsv_fieldpos.notescol = i;
+
+ while (f->name) {
+ if (unicsv_compare_fields(s, f)) {
+ unicsv_fields_tab[column] = f->type;
+ break;
+ }
+ f++;
}
- else if (UNICSV_CONTAINS("alt")) {
- unicsv_fieldpos.altcol = i;
+ if ((! f->name) && global_opts.debug_level)
+ warning(MYNAME ": Unhandled column \"%s\".\n", s);
+
+ /* handle some special items */
+ if (f->type == fld_altitude) {
if (UNICSV_CONTAINS("ft") || UNICSV_CONTAINS("feet")) {
unicsv_altscale = FEET_TO_METERS(1);
}
}
- else if (UNICSV_CONTAINS("url")) {
- unicsv_fieldpos.urlcol = i;
- }
- else if (UNICSV_CONTAINS("utm z")) {
- unicsv_fieldpos.utmzcol = i;
+ if ((f->type == fld_time) || (f->type == fld_date)) {
+ if (UNICSV_CONTAINS("iso"))
+ f->type = fld_iso_time;
}
- else if (UNICSV_CONTAINS("utm n")) {
- unicsv_fieldpos.utmncol = i;
- }
- else if (UNICSV_CONTAINS("utm e")) {
- unicsv_fieldpos.utmecol = i;
- }
- else if (UNICSV_CONTAINS("utm c")) {
- unicsv_fieldpos.utmccol = i;
- }
-/* todo: speed, course, hdop, sat, date, time, maybe a few others */
}
+ if (buf) xfree(buf);
}
static void
{
char *c;
unicsv_altscale = 1.0;
+
+ unicsv_fields_tab = NULL;
+ unicsv_fields_tab_ct = 0;
+ unicsv_data_type = global_opts.objective;
+ unicsv_detect = (! (global_opts.masked_objective & (WPTDATAMASK | TRKDATAMASK | RTEDATAMASK | POSNDATAMASK)));
- file_in = gbfopen(fname, "rb", MYNAME);
+ unicsv_track = unicsv_route = NULL;
+ unicsv_datum_idx = gt_lookup_datum_index(opt_datum, MYNAME);
- if ((c = gbfgetstr(file_in)))
+ fin = gbfopen(fname, "rb", MYNAME);
+
+ if ((c = gbfgetstr(fin)))
unicsv_fondle_header(c);
else
unicsv_fieldsep = NULL;
static void
unicsv_rd_deinit(void)
{
- gbfclose(file_in);
+ gbfclose(fin);
+ if (unicsv_fields_tab) xfree(unicsv_fields_tab);
}
static void
unicsv_parse_one_line(char *ibuf)
{
char *s;
- waypoint *wpt;
- int i;
- int utmz = -9999;
- double utme = 0;
- double utmn = 0;
- char utmc = 'N';
+ waypoint *wpt = NULL;
+ int column;
+ int utm_zone = -9999;
+ double utm_easting = 0;
+ double utm_northing = 0;
+ char utm_zc = 'N';
+ char bng_zone[3] = "";
+ double bng_easting = 0;
+ double bng_northing = 0;
+ int checked = 0;
+ int date = -1, time = -1, msec = -1;
+ char is_localtime = 0;
+ garmin_fs_t *gmsd;
- s = csv_lineparse(ibuf, unicsv_fieldsep, "\"", 0);
- if (s == NULL) return;
-
wpt = waypt_new();
+ wpt->latitude = -9999;
+ wpt->longitude = -9999;
+
+ column = -1;
+ while ((s = csv_lineparse(ibuf, unicsv_fieldsep, "\"", 0))) {
+
+ if (column > unicsv_fields_tab_ct) break; /* ignore extra fields on line */
+
+ ibuf = NULL;
+
+ column++;
+ checked++;
- for (i=0; s; i++, s = csv_lineparse(NULL, unicsv_fieldsep, "\"", 0)) {
s = lrtrim(s);
- if (i == unicsv_fieldpos.latcol) {
- human_to_dec( s, &wpt->latitude, &wpt->longitude, 1 );
+ if (! *s) continue; /* skip empty columns */
+
+ switch(unicsv_fields_tab[column]) {
+
+ case fld_time:
+ case fld_date:
+ /* switch column type if it looks like an iso time string */
+ if (strchr(s, 'T'))
+ unicsv_fields_tab[column] = fld_iso_time;
+ break;
+ default: ;
}
- else if (i == unicsv_fieldpos.loncol) {
+
+
+ switch(unicsv_fields_tab[column]) {
+
+ case fld_latitude:
+ human_to_dec( s, &wpt->latitude, &wpt->longitude, 1 );
+ break;
+
+ case fld_longitude:
human_to_dec( s, &wpt->latitude, &wpt->longitude, 2 );
- }
- else if (i == unicsv_fieldpos.namecol) {
+ break;
+
+ case fld_shortname:
wpt->shortname = xstrdup(s);
- }
- else if (i == unicsv_fieldpos.desccol) {
+ break;
+
+ case fld_description:
wpt->description = xstrdup(s);
- }
- else if (i == unicsv_fieldpos.notescol) {
+ break;
+
+ case fld_notes:
wpt->notes = xstrdup(s);
- }
- else if (i == unicsv_fieldpos.urlcol) {
+ break;
+
+ case fld_url:
wpt->url = xstrdup(s);
- }
- else if (i == unicsv_fieldpos.altcol) {
+ break;
+
+ case fld_altitude:
wpt->altitude = atof(s) * unicsv_altscale;
+ break;
+
+ case fld_utm_zone:
+ utm_zone = atoi(s);
+ break;
+
+ case fld_utm_easting:
+ utm_easting = atof(s);
+ break;
+
+ case fld_utm_northing:
+ utm_northing = atof(s);
+ break;
+
+ case fld_utm_zone_char:
+ utm_zc = toupper(s[0]);
+ break;
+
+ case fld_utm:
+ parse_coordinates(s, DATUM_WGS84, grid_utm,
+ &wpt->latitude, &wpt->longitude, MYNAME);
+ break;
+
+ case fld_bng:
+ parse_coordinates(s, DATUM_OSGB36, grid_bng,
+ &wpt->latitude, &wpt->longitude, MYNAME);
+ break;
+
+ case fld_bng_zone:
+ strncpy(bng_zone, s, sizeof(bng_zone));
+ strupper(bng_zone);
+ break;
+
+ case fld_bng_northing:
+ bng_northing = atof(s);
+ break;
+
+ case fld_bng_easting:
+ bng_easting = atof(s);
+ break;
+
+ case fld_hdop:
+ wpt->hdop = atof(s);
+ if (unicsv_detect) unicsv_data_type = trkdata;
+ break;
+
+ case fld_pdop:
+ wpt->pdop = atof(s);
+ if (unicsv_detect) unicsv_data_type = trkdata;
+ break;
+
+ case fld_vdop:
+ wpt->vdop = atof(s);
+ if (unicsv_detect) unicsv_data_type = trkdata;
+ break;
+
+ case fld_sat:
+ wpt->sat = atoi(s);
+ if (unicsv_detect) unicsv_data_type = trkdata;
+ break;
+
+ case fld_fix:
+ if (unicsv_detect) unicsv_data_type = trkdata;
+ if (case_ignore_strcmp(s, "none") == 0)
+ wpt->fix = fix_none;
+ else if (case_ignore_strcmp(s, "2d") == 0)
+ wpt->fix = fix_2d;
+ else if (case_ignore_strcmp(s, "3d") == 0)
+ wpt->fix = fix_3d;
+ else if (case_ignore_strcmp(s, "dgps") == 0)
+ wpt->fix = fix_dgps;
+ else if (case_ignore_strcmp(s, "pps") == 0)
+ wpt->fix = fix_pps;
+ else wpt->fix = fix_unknown;
+ break;
+
+ case fld_utc_date:
+ if ((is_localtime < 2) && (date < 0)) {
+ date = unicsv_parse_date(s);
+ is_localtime = 0;
+ }
+ break;
+
+ case fld_utc_time:
+ if ((is_localtime < 2) && (time < 0)) {
+ time = unicsv_parse_time(s, &msec);
+ is_localtime = 0;
+ }
+ break;
+
+ case fld_speed:
+ WAYPT_SET(wpt, speed, atof(s));
+ if (unicsv_detect) unicsv_data_type = trkdata;
+ break;
+
+ case fld_course:
+ WAYPT_SET(wpt, course, atof(s));
+ if (unicsv_detect) unicsv_data_type = trkdata;
+ break;
+
+ case fld_temperature:
+ WAYPT_SET(wpt, temperature, atof(s));
+ break;
+
+ case fld_temperature_f:
+ WAYPT_SET(wpt, temperature, FAHRENHEIT_TO_CELSIUS(atof(s)));
+ break;
+
+ case fld_heartrate:
+ wpt->heartrate = atoi(s);
+ if (unicsv_detect) unicsv_data_type = trkdata;
+ break;
+
+ case fld_cadence:
+ wpt->cadence = atoi(s);
+ if (unicsv_detect) unicsv_data_type = trkdata;
+ break;
+
+ case fld_proximity:
+ WAYPT_SET(wpt, proximity, atof(s));
+ break;
+
+ case fld_depth:
+ WAYPT_SET(wpt, depth, atof(s));
+ break;
+
+ case fld_symbol:
+ wpt->icon_descr = xstrdup(s);
+ wpt->wpt_flags.icon_descr_is_dynamic = 1;
+ break;
+
+ case fld_iso_time:
+ is_localtime = 2; /* fix result */
+ wpt->creation_time = xml_parse_time(s, &wpt->microseconds);
+ break;
+
+ case fld_time:
+ if ((is_localtime < 2) && (time < 0)) {
+ time = unicsv_parse_time(s, &msec);
+ is_localtime = 1;
+ }
+ break;
+
+ case fld_date:
+ if ((is_localtime < 2) && (date < 0)) {
+ date = unicsv_parse_date(s);
+ is_localtime = 1;
+ }
+ break;
+
+ case fld_datetime:
+ /* not implemented */
+ break;
+
+ case fld_garmin_city:
+ case fld_garmin_postal_code:
+ case fld_garmin_state:
+ case fld_garmin_country:
+ case fld_garmin_addr:
+ case fld_garmin_phone_nr:
+ case fld_garmin_facility:
+ gmsd = GMSD_FIND(wpt);
+ if (! gmsd) {
+ gmsd = garmin_fs_alloc(-1);
+ fs_chain_add(&wpt->fs, (format_specific_data *) gmsd);
+ }
+ switch(unicsv_fields_tab[column]) {
+ case fld_garmin_city: GMSD_SETSTR(city, s); break;
+ case fld_garmin_postal_code: GMSD_SETSTR(postal_code, s); break;
+ case fld_garmin_state: GMSD_SETSTR(state, s); break;
+ case fld_garmin_country: GMSD_SETSTR(country, s); break;
+ case fld_garmin_addr: GMSD_SETSTR(addr, s); break;
+ case fld_garmin_phone_nr: GMSD_SETSTR(phone_nr, s); break;
+ case fld_garmin_facility: GMSD_SETSTR(facility, s); break;
+ default: break;
+ }
+ break;
+
+ case fld_terminator: /* dummy */
+ checked--;
+ break;
}
- else if (i == unicsv_fieldpos.utmzcol) {
- utmz = atoi(s);
- }
- else if (i == unicsv_fieldpos.utmecol) {
- utme = atof(s);
+ }
+
+ if (checked == 0) {
+ waypt_free(wpt);
+ return;
+ }
+
+ if (is_localtime < 2) { /* not fixed */
+ if ((time >= 0) && (date >= 0)) {
+ time_t t = date + time;
+
+ if (is_localtime) {
+ struct tm tm;
+ tm = *gmtime(&t);
+ wpt->creation_time = mklocaltime(&tm);
+ }
+ else
+ wpt->creation_time = t;
}
- else if (i == unicsv_fieldpos.utmncol) {
- utmn = atof(s);
+ else if (time >= 0)
+ wpt->creation_time = time;
+ else if (date >= 0)
+ wpt->creation_time = date;
+ if (msec >= 0)
+ wpt->microseconds = msec;
+ }
+
+ /* utm/bng can be optional */
+ if ((wpt->latitude == -9999) && (wpt->longitude == -9999)) {
+ if (utm_zone != -9999) {
+ GPS_Math_UTM_EN_To_Known_Datum(&wpt->latitude, &wpt->longitude,
+ utm_easting, utm_northing, utm_zone, utm_zc, DATUM_WGS84);
}
- else if (i == unicsv_fieldpos.utmccol) {
- utmc = toupper(s[0]);
+ else if (bng_zone[0]) {
+ if (! GPS_Math_UKOSMap_To_WGS84_M(
+ bng_zone, bng_easting, bng_northing,
+ &wpt->latitude, &wpt->longitude))
+ fatal(MYNAME ": Unable to convert BNG coordinates (%s %.f %.f)!\n",
+ bng_zone, bng_easting, bng_northing);
}
}
- if (utmz != -9999) {
- GPS_Math_UTM_EN_To_WGS84(&wpt->latitude, &wpt->longitude,
- utme, utmn, utmz, utmc);
+
+ switch(unicsv_data_type) {
+ case rtedata:
+ if (! unicsv_route) {
+ unicsv_route = route_head_alloc();
+ route_add_head(unicsv_route);
+ }
+ route_add_wpt(unicsv_route, wpt);
+ break;
+ case trkdata:
+ if (! unicsv_track) {
+ unicsv_track = route_head_alloc();
+ track_add_head(unicsv_track);
+ }
+ track_add_wpt(unicsv_track, wpt);
+ break;
+ default:
+ waypt_add(wpt);
}
- waypt_add(wpt);
}
static void
if (unicsv_fieldsep == NULL) return;
- while ((buff = gbfgetstr(file_in))) {
+ while ((buff = gbfgetstr(fin))) {
buff = lrtrim(buff);
- if (*buff)
- unicsv_parse_one_line(buff);
+ if ((*buff == '\0') || (*buff == '#')) continue;
+ unicsv_parse_one_line(buff);
+ }
+}
+
+/* =========================================================================== */
+
+static char *
+strassign(char **old, char *new)
+{
+ if (*old) xfree(*old);
+ *old = new;
+ return new;
+}
+
+static void
+unicsv_print_str(const char *str)
+{
+ if (str && *str) {
+ char *cout, *cx;
+
+ cout = strenquote(str, UNICSV_QUOT_CHAR);
+
+ while ((cx = strstr(cout, "\r\n"))) {
+ memmove(cx, cx + 1, strlen(cx));
+ *cx++ = ',';
+ lrtrim(cx);
+ }
+ while ((cx = strchr(cout, '\r'))) {
+ *cx++ = ',';
+ lrtrim(cx);
+ }
+ while ((cx = strchr(cout, '\n'))) {
+ *cx++ = ',';
+ lrtrim(cx);
+ }
+
+ gbfprintf(fout, "%s%s", unicsv_fieldsep, cout);
+ xfree(cout);
+ }
+ else gbfputs(unicsv_fieldsep, fout);
+}
+
+#define BIT_OF(a) (1ULL << a)
+#define FIELD_USED(a) (unicsv_outp_flags & (1ULL << a))
+
+static void
+unicsv_waypt_enum_cb(const waypoint *wpt)
+{
+ char *shortname;
+ garmin_fs_t *gmsd;
+
+ shortname = (wpt->shortname) ? wpt->shortname : "";
+ gmsd = GMSD_FIND(wpt);
+
+ if (*shortname) unicsv_outp_flags |= BIT_OF(fld_shortname);
+ if (wpt->altitude != unknown_alt) unicsv_outp_flags |= BIT_OF(fld_altitude);
+ if (wpt->icon_descr && *wpt->icon_descr) unicsv_outp_flags |= BIT_OF(fld_symbol);
+ if (wpt->description && *wpt->description && (strcmp(shortname, wpt->description) != 0))
+ unicsv_outp_flags |= BIT_OF(fld_description);
+ if (wpt->notes && *wpt->notes && (strcmp(shortname, wpt->notes) != 0)) {
+ if ((! wpt->description) || (strcmp(wpt->description, wpt->notes) != 0))
+ unicsv_outp_flags |= BIT_OF(fld_notes);
+ }
+ if (wpt->url && *wpt->url) unicsv_outp_flags |= BIT_OF(fld_url);
+ if (wpt->creation_time != 0) {
+ unicsv_outp_flags |= BIT_OF(fld_time);
+ if (wpt->creation_time >= SECONDS_PER_DAY)
+ unicsv_outp_flags |= BIT_OF(fld_date);
+ }
+
+ if (wpt->fix != fix_unknown) unicsv_outp_flags |= BIT_OF(fld_fix);
+ if (wpt->vdop > 0) unicsv_outp_flags |= BIT_OF(fld_vdop);
+ if (wpt->hdop > 0) unicsv_outp_flags |= BIT_OF(fld_hdop);
+ if (wpt->pdop > 0) unicsv_outp_flags |= BIT_OF(fld_pdop);
+ if (wpt->sat > 0) unicsv_outp_flags |= BIT_OF(fld_sat);
+ if (wpt->heartrate != 0) unicsv_outp_flags |= BIT_OF(fld_heartrate);
+ if (wpt->cadence != 0) unicsv_outp_flags |= BIT_OF(fld_cadence);
+
+ /* "flagged" waypoint members */
+ if WAYPT_HAS(wpt, course) unicsv_outp_flags |= BIT_OF(fld_course);
+ if WAYPT_HAS(wpt, depth) unicsv_outp_flags |= BIT_OF(fld_depth);
+ if WAYPT_HAS(wpt, speed) unicsv_outp_flags |= BIT_OF(fld_speed);
+ if WAYPT_HAS(wpt, proximity) unicsv_outp_flags |= BIT_OF(fld_proximity);
+ if WAYPT_HAS(wpt, temperature) unicsv_outp_flags |= BIT_OF(fld_temperature);
+
+ if (gmsd) {
+ if GMSD_HAS(addr) unicsv_outp_flags |= BIT_OF(fld_garmin_addr);
+ if GMSD_HAS(city) unicsv_outp_flags |= BIT_OF(fld_garmin_city);
+ if GMSD_HAS(country) unicsv_outp_flags |= BIT_OF(fld_garmin_country);
+ if GMSD_HAS(phone_nr) unicsv_outp_flags |= BIT_OF(fld_garmin_phone_nr);
+ if GMSD_HAS(postal_code) unicsv_outp_flags |= BIT_OF(fld_garmin_postal_code);
+ if GMSD_HAS(state) unicsv_outp_flags |= BIT_OF(fld_garmin_state);
+ if GMSD_HAS(facility) unicsv_outp_flags |= BIT_OF(fld_garmin_facility);
+ }
+}
+
+static void
+unicsv_waypt_disp_cb(const waypoint *wpt)
+{
+ double lat, lon, alt;
+ char *cout = NULL;
+ char *shortname;
+ garmin_fs_t *gmsd;
+
+ unicsv_waypt_ct++;
+
+ shortname = (wpt->shortname) ? wpt->shortname : "";
+ gmsd = GMSD_FIND(wpt);
+
+ if (unicsv_datum_idx == DATUM_WGS84) {
+ lat = wpt->latitude;
+ lon = wpt->longitude;
+ alt = wpt->altitude;
+ }
+ else {
+ GPS_Math_WGS84_To_Known_Datum_M(wpt->latitude, wpt->longitude, 0.0,
+ &lat, &lon, &alt, unicsv_datum_idx);
+ }
+
+ gbfprintf(fout, "%d%s", unicsv_waypt_ct, unicsv_fieldsep);
+
+ switch(unicsv_grid_idx) {
+
+ case grid_lat_lon_ddd:
+ cout = pretty_deg_format(lat, lon, 'd', unicsv_fieldsep, 0);
+ gbfputs(cout, fout);
+ break;
+
+ case grid_lat_lon_dmm:
+ cout = pretty_deg_format(lat, lon, 'm', unicsv_fieldsep, 0);
+ gbfputs(cout, fout);
+ break;
+
+ case grid_lat_lon_dms:
+ cout = pretty_deg_format(lat, lon, 's', unicsv_fieldsep, 0);
+ gbfputs(strassign(&cout, strenquote(cout, UNICSV_QUOT_CHAR)), fout);
+ break;
+
+ case grid_bng: {
+ char map[3];
+ double north, east;
+
+ if (! GPS_Math_WGS84_To_UKOSMap_M(wpt->latitude, wpt->longitude, &east, &north, map))
+ fatal(MYNAME ": Some (or all?) of the coordinates cannot be displayed using \"BNG\".\n");
+ gbfprintf(fout, "%s%s%5.0f%s%5.0f",
+ map, unicsv_fieldsep,
+ east, unicsv_fieldsep,
+ north);
+ break;
+ }
+ case grid_utm: {
+ int zone;
+ char zonec;
+ double north, east;
+
+ if (! GPS_Math_Known_Datum_To_UTM_EN(lat, lon,
+ &east, &north, &zone, &zonec, unicsv_datum_idx))
+ fatal(MYNAME ": Some (or all?) of the coordinates cannot be displayed using \"UTM\".\n");
+ gbfprintf(fout, "%02d%s%c%s%.0f%s%.0f",
+ zone, unicsv_fieldsep,
+ zonec, unicsv_fieldsep,
+ east, unicsv_fieldsep,
+ north);
+ break;
+ }
+ default:
+ gbfprintf(fout, "%.6f%s%.6f", lat, unicsv_fieldsep, lon);
+ break;
+ }
+
+ if (cout) xfree(cout);
+
+ if FIELD_USED(fld_shortname) unicsv_print_str(shortname);
+ if FIELD_USED(fld_altitude) {
+ if (wpt->altitude != unknown_alt)
+ gbfprintf(fout, "%s%.1f", unicsv_fieldsep, wpt->altitude);
+ else
+ gbfputs(unicsv_fieldsep, fout);
+ }
+ if FIELD_USED(fld_description) unicsv_print_str(wpt->description);
+ if FIELD_USED(fld_notes) unicsv_print_str(wpt->notes);
+ if FIELD_USED(fld_symbol)
+ unicsv_print_str((wpt->icon_descr != NULL) ? wpt->icon_descr : "Waypoint");
+ if FIELD_USED(fld_depth) {
+ if WAYPT_HAS(wpt, depth)
+ gbfprintf(fout, "%s%.1f", unicsv_fieldsep, wpt->depth);
+ else
+ gbfputs(unicsv_fieldsep, fout);
+ }
+ if FIELD_USED(fld_proximity) {
+ if WAYPT_HAS(wpt, proximity)
+ gbfprintf(fout, "%s%.f", unicsv_fieldsep, wpt->proximity);
+ else
+ gbfputs(unicsv_fieldsep, fout);
+ }
+ if FIELD_USED(fld_temperature) {
+ if WAYPT_HAS(wpt, temperature)
+ gbfprintf(fout, "%s%.1f", unicsv_fieldsep, wpt->temperature);
+ else
+ gbfputs(unicsv_fieldsep, fout);
+ }
+ if FIELD_USED(fld_speed) {
+ if WAYPT_HAS(wpt, speed)
+ gbfprintf(fout, "%s%.1f", unicsv_fieldsep, wpt->speed);
+ else
+ gbfputs(unicsv_fieldsep, fout);
+ }
+ if FIELD_USED(fld_course) {
+ if WAYPT_HAS(wpt, course)
+ gbfprintf(fout, "%s%.1f", unicsv_fieldsep, wpt->course);
+ else
+ gbfputs(unicsv_fieldsep, fout);
+ }
+ if FIELD_USED(fld_fix) {
+ char *fix;
+ switch(wpt->fix) {
+ case fix_none: fix = "none";
+ case fix_2d: fix = "2d";
+ case fix_3d: fix = "3d";
+ case fix_dgps: fix = "dgps";
+ case fix_pps: fix = "pps";
+ unicsv_print_str(fix);
+ break;
+ default:
+ gbfputs(unicsv_fieldsep, fout);
+ break;
+ }
+ }
+ if FIELD_USED(fld_hdop) {
+ if (wpt->hdop > 0)
+ gbfprintf(fout, "%s%.1f", unicsv_fieldsep, wpt->hdop);
+ else
+ gbfputs(unicsv_fieldsep, fout);
+ }
+ if FIELD_USED(fld_vdop) {
+ if (wpt->vdop > 0)
+ gbfprintf(fout, "%s%.1f", unicsv_fieldsep, wpt->vdop);
+ else
+ gbfputs(unicsv_fieldsep, fout);
+ }
+ if FIELD_USED(fld_pdop) {
+ if (wpt->pdop > 0)
+ gbfprintf(fout, "%s%.1f", unicsv_fieldsep, wpt->pdop);
+ else
+ gbfputs(unicsv_fieldsep, fout);
+ }
+ if FIELD_USED(fld_sat) {
+ if (wpt->sat > 0)
+ gbfprintf(fout, "%s%d", unicsv_fieldsep, wpt->sat);
+ else
+ gbfputs(unicsv_fieldsep, fout);
+ }
+ if FIELD_USED(fld_heartrate) {
+ if (wpt->heartrate != 0)
+ gbfprintf(fout, "%s%u", unicsv_fieldsep, wpt->heartrate);
+ else
+ gbfputs(unicsv_fieldsep, fout);
+ }
+ if FIELD_USED(fld_cadence) {
+ if (wpt->cadence != 0)
+ gbfprintf(fout, "%s%u", unicsv_fieldsep, wpt->cadence);
+ else
+ gbfputs(unicsv_fieldsep, fout);
+ }
+ if FIELD_USED(fld_date) {
+ if (wpt->creation_time >= SECONDS_PER_DAY) {
+ struct tm tm;
+ char buf[32];
+ tm = *localtime(&wpt->creation_time);
+ tm.tm_year += 1900;
+ tm.tm_mon += 1;
+ snprintf(buf, sizeof(buf), "%04d/%02d/%02d", tm.tm_year, tm.tm_mon, tm.tm_mday);
+ gbfprintf(fout, "%s%s", unicsv_fieldsep, buf);
+ }
+ else
+ gbfputs(unicsv_fieldsep, fout);
+ }
+ if FIELD_USED(fld_time) {
+ if (wpt->creation_time != 0) {
+ struct tm tm;
+ char buf[32], msec[12];
+
+ tm = *localtime(&wpt->creation_time);
+ snprintf(buf, sizeof(buf), "%02d:%02d:%02d", tm.tm_hour, tm.tm_min, tm.tm_sec);
+
+ if (wpt->microseconds > 0) {
+ int len = 6;
+ int ms = wpt->microseconds;
+
+ while (len && (ms % 10 == 0)) {
+ ms /= 10;
+ len--;
+ }
+ snprintf(msec, sizeof(msec), ".%0*d", len, ms);
+ strcat(buf, msec);
+ }
+ gbfprintf(fout, "%s%s", unicsv_fieldsep, buf);
+ }
+ else
+ gbfputs(unicsv_fieldsep, fout);
+ }
+ if FIELD_USED(fld_url) unicsv_print_str(wpt->url);
+
+ if FIELD_USED(fld_garmin_facility) unicsv_print_str(GMSD_GET(facility, NULL));
+ if FIELD_USED(fld_garmin_addr) unicsv_print_str(GMSD_GET(addr, NULL));
+ if FIELD_USED(fld_garmin_city) unicsv_print_str(GMSD_GET(city, NULL));
+ if FIELD_USED(fld_garmin_postal_code) unicsv_print_str(GMSD_GET(postal_code, NULL));
+ if FIELD_USED(fld_garmin_state) unicsv_print_str(GMSD_GET(state, NULL));
+ if FIELD_USED(fld_garmin_country) unicsv_print_str(GMSD_GET(country, NULL));
+ if FIELD_USED(fld_garmin_phone_nr) unicsv_print_str(GMSD_GET(phone_nr, NULL));
+
+ gbfputs(UNICSV_LINE_SEP, fout);
+}
+
+/* --------------------------------------------------------------------------- */
+
+
+static void
+unicsv_wr_init(const char *filename)
+{
+ fout = gbfopen(filename, "w", MYNAME);
+
+ unicsv_outp_flags = 0;
+ unicsv_grid_idx = grid_unknown;
+ unicsv_datum_idx = DATUM_WGS84;
+ unicsv_fieldsep = UNICSV_FIELD_SEP;
+ unicsv_waypt_ct = 0;
+
+ if (opt_grid != NULL) {
+ int i;
+
+ if (sscanf(opt_grid, "%d", &i)) {
+ unicsv_grid_idx = (grid_type) i;
+ if ((unicsv_grid_idx < GRID_INDEX_MIN) || (unicsv_grid_idx > GRID_INDEX_MAX))
+ fatal(MYNAME ": Grid index out of range (%d..%d)!\n",
+ (int)GRID_INDEX_MIN, (int)GRID_INDEX_MAX);
+ }
+ else unicsv_grid_idx = gt_lookup_grid_type(opt_grid, MYNAME);
+ }
+
+ if (unicsv_grid_idx == grid_bng)
+ /* force datum to "Ord Srvy Grt Britn" / OSGB36 */
+ /* ! ignore parameter "Datum" ! */
+ unicsv_datum_idx = DATUM_OSGB36;
+ else
+ unicsv_datum_idx = gt_lookup_datum_index(opt_datum, MYNAME);
+}
+
+static void
+unicsv_wr_deinit(void)
+{
+ gbfclose(fout);
+}
+
+static void
+unicsv_wr(void)
+{
+ switch(global_opts.objective) {
+ case wptdata:
+ waypt_disp_all(unicsv_waypt_enum_cb);
+ break;
+ case trkdata:
+ track_disp_all(NULL, NULL, unicsv_waypt_enum_cb);
+ break;
+ case rtedata:
+ route_disp_all(NULL, NULL, unicsv_waypt_enum_cb);
+ break;
+ case posndata:
+ fatal(MYNAME ": Realtime positioning not supported.\n");
+ }
+
+ gbfprintf(fout, "No%s", unicsv_fieldsep);
+
+ switch(unicsv_grid_idx) {
+ case grid_bng:
+/* indexed parameters doesn't work under __win32__ (mingw)
+ gbfprintf(fout, "BNG-Zone%1$sBNG-East%1$sBNG-North", unicsv_fieldsep);
+*/
+ gbfprintf(fout, "BNG-Zone%sBNG-East%sBNG-North",
+ unicsv_fieldsep, unicsv_fieldsep);
+ break;
+ case grid_utm:
+/* indexed parameters doesn't work under __win32__ (mingw)
+ gbfprintf(fout, "BNG-Zone%1$sBNG-East%1$sBNG-North", unicsv_fieldsep);
+*/
+ gbfprintf(fout, "UTM-Zone%sUTM-Ch%sUTM-East%sUTM-North",
+ unicsv_fieldsep, unicsv_fieldsep, unicsv_fieldsep);
+ break;
+ default:
+ gbfprintf(fout, "Latitude%sLongitude", unicsv_fieldsep);
+ }
+
+ if FIELD_USED(fld_shortname) gbfprintf(fout, "%sName", unicsv_fieldsep);
+ if FIELD_USED(fld_altitude) gbfprintf(fout, "%sAltitude", unicsv_fieldsep);
+ if FIELD_USED(fld_description) gbfprintf(fout, "%sDescription", unicsv_fieldsep);
+ if FIELD_USED(fld_notes) gbfprintf(fout, "%sNotes", unicsv_fieldsep);
+ if FIELD_USED(fld_symbol) gbfprintf(fout, "%sSymbol", unicsv_fieldsep);
+ if FIELD_USED(fld_depth) gbfprintf(fout, "%sDepth", unicsv_fieldsep);
+ if FIELD_USED(fld_proximity) gbfprintf(fout, "%sProximity", unicsv_fieldsep);
+ if FIELD_USED(fld_temperature) gbfprintf(fout, "%sTemperature", unicsv_fieldsep);
+ if FIELD_USED(fld_speed) gbfprintf(fout, "%sSpeed", unicsv_fieldsep);
+ if FIELD_USED(fld_course) gbfprintf(fout, "%sCourse", unicsv_fieldsep);
+ if FIELD_USED(fld_fix) gbfprintf(fout, "%sFIX", unicsv_fieldsep);
+ if FIELD_USED(fld_hdop) gbfprintf(fout, "%sHDOP", unicsv_fieldsep);
+ if FIELD_USED(fld_vdop) gbfprintf(fout, "%sVDOP", unicsv_fieldsep);
+ if FIELD_USED(fld_pdop) gbfprintf(fout, "%sPDOP", unicsv_fieldsep);
+ if FIELD_USED(fld_sat) gbfprintf(fout, "%sSatellites", unicsv_fieldsep);
+ if FIELD_USED(fld_heartrate) gbfprintf(fout, "%sHeartrate", unicsv_fieldsep);
+ if FIELD_USED(fld_cadence) gbfprintf(fout, "%sCadence", unicsv_fieldsep);
+ if FIELD_USED(fld_date) gbfprintf(fout, "%sDate", unicsv_fieldsep);
+ if FIELD_USED(fld_time) gbfprintf(fout, "%sTime", unicsv_fieldsep);
+ if FIELD_USED(fld_url) gbfprintf(fout, "%sURL", unicsv_fieldsep);
+ if FIELD_USED(fld_garmin_facility) gbfprintf(fout, "%sFacility", unicsv_fieldsep);
+ if FIELD_USED(fld_garmin_addr) gbfprintf(fout, "%sAddress", unicsv_fieldsep);
+ if FIELD_USED(fld_garmin_city) gbfprintf(fout, "%sCity", unicsv_fieldsep);
+ if FIELD_USED(fld_garmin_postal_code) gbfprintf(fout, "%sPostalCode", unicsv_fieldsep);
+ if FIELD_USED(fld_garmin_state) gbfprintf(fout, "%sState", unicsv_fieldsep);
+ if FIELD_USED(fld_garmin_country) gbfprintf(fout, "%sCountry", unicsv_fieldsep);
+ if FIELD_USED(fld_garmin_phone_nr) gbfprintf(fout, "%sPhone", unicsv_fieldsep);
+
+ gbfputs(UNICSV_LINE_SEP, fout);
+
+ switch(global_opts.objective) {
+ case wptdata:
+ waypt_disp_all(unicsv_waypt_disp_cb);
+ break;
+ case trkdata:
+ track_disp_all(NULL, NULL, unicsv_waypt_disp_cb);
+ break;
+ case rtedata:
+ route_disp_all(NULL, NULL, unicsv_waypt_disp_cb);
+ break;
+ default:
+ break;
}
}
ff_vecs_t unicsv_vecs = {
ff_type_file,
- { ff_cap_read, 0, 0},
+ FF_CAP_RW_ALL,
unicsv_rd_init,
- NULL,
+ unicsv_wr_init,
unicsv_rd_deinit,
- NULL,
+ unicsv_wr_deinit,
unicsv_rd,
- NULL,
+ unicsv_wr,
NULL,
unicsv_args,
CET_CHARSET_ASCII, 0 /* can be changed with -c ... */
*/
#include "defs.h"
+#include "jeeps/gpsmath.h"
+
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
c = buff;
while ((*c != '\0') && ((unsigned char)*c <= ' ')) c++;
+
+ if (c != buff) {
+ char *src = c;
+ char *dst = buff;
+
+ while (*src) *dst++ = *src++;
+ *dst = '\0';
+ }
- return c;
+ return buff;
}
/*
return res;
}
+char *
+strenquote(const char *str, const char quot_char)
+{
+ int len;
+ char *cin, *cout;
+ char *tmp;
+
+ if (str == NULL) cin = "";
+ else cin = (char *)str;
+
+ len = strlen(cin);
+ cout = tmp = xmalloc((len * 2) + 3);
+
+ *cout++ = quot_char;
+ while (*cin) {
+ *cout++ = *cin;
+ if (*cin++ == quot_char)
+ *cout++ = quot_char;
+ }
+ *cout++ = quot_char;
+ *cout = '\0';
+
+ cout = xstrdup(tmp);
+ xfree(tmp);
+ return cout;
+}
+
void
printposn(const double c, int is_lat)
{
return (double) (deg * 100.0) + ((deg_val - deg) * 60.0);
}
+/*
+ * Convert string 'str' into geodetic latitide & longitude values. The format
+ * will be interpreted depending on 'grid' parameter.
+ *
+ * return value: number of characters efective parsed
+ */
+
+int
+parse_coordinates(const char *str, int datum, const grid_type grid,
+ double *latitude, double *longitude, const char *module)
+{
+ double lat, lon;
+ unsigned char lathemi, lonhemi;
+ int deg_lat, deg_lon, min_lat, min_lon;
+ char map[3];
+ int utmz;
+ double utme, utmn;
+ char utmc;
+ int valid, result, ct;
+ double lx, ly;
+ const char *format;
+
+ valid = 1;
+
+ switch(grid) {
+
+ case grid_lat_lon_ddd:
+ format = "%c%lf %c%lf%n";
+ ct = sscanf(str, format,
+ &lathemi, &lat, &lonhemi, &lon, &result);
+ valid = (ct == 4);
+ break;
+
+ case grid_lat_lon_dmm:
+ format = "%c%d %lf %c%d %lf%n";
+ ct = sscanf(str, format,
+ &lathemi, °_lat, &lat, &lonhemi, °_lon, &lon, &result);
+ valid = (ct == 6);
+ if (valid) {
+ lat = (double)deg_lat + (lat / (double)60);
+ lon = (double)deg_lon + (lon / (double)60);
+ }
+ break;
+
+ case grid_lat_lon_dms:
+ format = "%c%d %d %lf %c%d %d %lf%n";
+ ct = sscanf(str, format,
+ &lathemi, °_lat, &min_lat, &lat, &lonhemi, °_lon, &min_lon, &lon,
+ &result);
+ valid = (ct == 8);
+ if (valid) {
+ lat = (double)deg_lat + ((double)min_lat / (double)60) + (lat / (double)3600.0);
+ lon = (double)deg_lon + ((double)min_lon / (double)60) + (lon / (double)3600.0);
+ }
+ break;
+
+ case grid_bng:
+ format = "%2s %lf %lf%n";
+ ct = sscanf(str, format,
+ map, &lx, &ly,
+ &result);
+ valid = (ct == 3);
+ if (valid) {
+ if (! GPS_Math_UKOSMap_To_WGS84_M(map, lx, ly, &lat, &lon))
+ fatal("%s: Unable to convert BNG coordinates (%s)!\n",
+ module, str);
+ }
+ datum = DATUM_WGS84; /* fix */
+ lathemi = lonhemi = '\0';
+ break;
+
+ case grid_utm:
+ format = "%d %c %lf %lf%n";
+ ct = sscanf(str, format,
+ &utmz, &utmc, &utme, &utmn,
+ &result);
+ valid = (ct == 4);
+ if (valid) {
+ if (! GPS_Math_UTM_EN_To_Known_Datum(&lat, &lon, utme, utmn, utmz, utmc, datum))
+ fatal("%s: Unable to convert UTM coordinates (%s)!\n",
+ module, str);
+ }
+ lathemi = lonhemi = '\0';
+ break;
+
+ default:
+ /* this should never happen in a release version */
+ fatal("%s/util: Unknown grid in parse_coordinates (%d)!\n",
+ module, (int)grid);
+ }
+
+ if (! valid) {
+ warning("%s: sscanf error using format \"%s\"!\n", module, format);
+ warning("%s: parsing has stopped at parameter number %d.\n", module, ct);
+ fatal("%s: could not convert coordinates \"%s\"!\n", module, str);
+ }
+
+ if (lathemi == 'S') lat = -lat;
+ if (lonhemi == 'W') lon = -lon;
+
+ if (datum != DATUM_WGS84) {
+ double alt;
+ GPS_Math_Known_Datum_To_WGS84_M(lat, lon, (double) 0.0,
+ &lat, &lon, &alt, datum);
+ }
+
+ if (latitude) *latitude = lat;
+ if (longitude) *longitude = lon;
+
+ return result;
+}
+
/*
* replace a single occurrence of "search" in "s" with "replace".
* Returns an allocated copy if substitution was made, otherwise returns NULL.
* Return a decimal degree pair as
* DD.DDDDD DD MM.MMM or DD MM SS.S
* fmt = ['d', 'm', 's']
+ * sep = string between lat and lon (separator)
* html = 1 for html output otherwise text
*/
char *
-pretty_deg_format(double lat, double lon, char fmt, int html)
+pretty_deg_format(double lat, double lon, char fmt, char *sep, int html)
{
double latmin, lonmin, latsec, lonsec;
int latint, lonint;
lonmin = 60.0 * (fabs(lon) - lonint);
latsec = 60.0 * (latmin - floor(latmin));
lonsec = 60.0 * (lonmin - floor(lonmin));
+ if (sep == NULL) sep = " "; /* default " " */
if (fmt == 'd') { /* ddd */
- xasprintf ( &result, "%c%6.5f%s %c%6.5f%s",
- latsig, fabs(lat), html?"°":"",
+ xasprintf ( &result, "%c%6.5f%s%s%c%6.5f%s",
+ latsig, fabs(lat), html?"°":"", sep,
lonsig, fabs(lon), html?"°":"" );
}
else if (fmt == 's') { /* dms */
- xasprintf ( &result, "%c%d%s%02d'%04.1f\" %c%d%s%02d'%04.1f\"",
- latsig, latint, html?"°":" ", (int)latmin, latsec,
+ xasprintf ( &result, "%c%d%s%02d'%04.1f\"%s%c%d%s%02d'%04.1f\"",
+ latsig, latint, html?"°":" ", (int)latmin, latsec, sep,
lonsig, lonint, html?"°":" ", (int)lonmin, lonsec);
}
else { /* default dmm */
- xasprintf ( &result, "%c%d%s%06.3f %c%d%s%06.3f",
- latsig, latint, html?"°":" ", latmin,
+ xasprintf ( &result, "%c%d%s%06.3f%s%c%d%s%06.3f",
+ latsig, latint, html?"°":" ", latmin, sep,
lonsig, lonint, html?"°":" ", lonmin);
}
return result;
extern ff_vecs_t raymarine_vecs;
extern ff_vecs_t alanwpr_vecs;
extern ff_vecs_t alantrl_vecs;
+extern ff_vecs_t vitovtt_vecs;
+extern ff_vecs_t ggv_log_vecs;
+extern ff_vecs_t g7towin_vecs;
+extern ff_vecs_t garmin_gpi_vecs;
static
vecs_t vec_list[] = {
&wbt_svecs,
"wbt",
"Wintec WBT-100/200 GPS Download",
- "bin"
+ NULL
},
{
&wbt_fvecs,
"wbt-bin",
- "Wintec WBT-100/200 Binary file format",
- NULL
+ "Wintec WBT-100/200 Binary File Format",
+ "bin"
+ },
+ {
+ &wbt_fvecs,
+ "wbt-tk1",
+ "Wintec WBT-201/G-Rays 2 Binary File Format",
+ "tk1"
},
{
&hiketech_vecs,
{
&tomtom_vecs,
"tomtom",
- "TomTom POI file",
+ "TomTom POI file (.ov2)",
"ov2"
},
{
"Alan Map500 tracklogs (.trl)",
"trl"
},
+ {
+ &vitovtt_vecs,
+ "vitovtt",
+ "Vito SmartMap tracks (.vtt)",
+ "vtt"
+ },
+ {
+ &ggv_log_vecs,
+ "ggv_log",
+ "Geogrid Viewer tracklogs (.log)",
+ "log"
+ },
+#if CSVFMTS_ENABLED
+ {
+ &g7towin_vecs,
+ "g7towin",
+ "G7ToWin data files (.g7t)",
+ "g7t"
+ },
+#endif
+ {
+ &garmin_gpi_vecs,
+ "garmin_gpi",
+ "Garmin Points of Interest (.gpi)",
+ "gpi"
+ },
{
NULL,
NULL,
const long vitosmt_subversion =1000;
const size_t vitosmt_headersize =24;
const size_t vitosmt_datasize =64;
-const double mile2km =1.609344; /* mile/h to kilometer/h */
-const double kts2mps =0.5144444444444444444; /* knots to m/s */
-const double mph2mps =0.447039259; /* mile/h to m/s */
static unsigned long
ReadLong(FILE * f)
MYNAME, __LINE__, strerror(errno) );
break;
}
-
+#if 0
+ fprintf(stderr, "Looptop %d\n", ftell(infile));
+#endif
latrad =ReadDouble(infile); /* WGS84 latitude in radians */
lonrad =ReadDouble(infile); /* WGS84 longitude in radians */
elev =ReadDouble(infile); /* elevation in meters */
+#if 0
+ fprintf(stderr, "before %d\n", ftell(infile));
+#endif
timestamp =ReadRecord(infile,5); /* UTC time yr/mo/dy/hr/mi */
+#if 0
+ fprintf(stderr, "%d latrad %f/%f ele %f\n", ftell(infile),latrad, DEG(latrad), elev);
+#endif
seconds =ReadDouble(infile); /* seconds */
speed =ReadDouble(infile); /* speed in knots */
course =ReadDouble(infile); /* course in degrees */
wpt_tmp->shortname =xcalloc(16,1);
snprintf(wpt_tmp->shortname, 15 , "WP%04d", ++serial);
- wpt_tmp->speed = speed*kts2mps; /* meters per second */
- wpt_tmp->course = course;
+ WAYPT_SET(wpt_tmp, speed, KNOTS_TO_MPS(speed)); /* meters per second */
+ WAYPT_SET(wpt_tmp, course, course);
wpt_tmp->pdop = pdop;
/*
/* speed */
if (waypointp->speed>0)
- WriteDouble(&workbuffer[position], waypointp->speed / mph2mps );
+ WriteDouble(&workbuffer[position], MPS_TO_MPH(waypointp->speed));
position += sizeof(double);
/* course */
--- /dev/null
+/*
+ Read Vito SmartMap .vtt tracks
+
+ Copyright (C) 2007 Jeremy Ehrhardt, jeremye@caltech.edu
+
+ based on vitostc.c, which is
+ Copyright (C) 2005 Etienne TASSE
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
+
+ */
+
+#include <stddef.h>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+
+#define MYNAME "vitovtt"
+#include "defs.h"
+
+#define TM_YEAR_ZERO 1900
+#define TM_MONTH_ZERO 1
+
+static gbfile *infile = 0;
+static int count = 0;
+
+static const int vitovtt_version = 3;
+static const size_t vitovtt_headersize = 16;
+static const size_t vitovtt_datasize = 32;
+
+static const double vitovtt_latitudescale = 20000000.0;
+static const double vitovtt_longitudescale = 10000000.0;
+static const int vitovtt_secondscale = 30000000;
+static const int vitovtt_microsecondscale = 30;
+
+static void
+rd_init(const char *fname)
+{
+ infile = gbfopen_le(fname, "rb", MYNAME);
+}
+
+static void
+rd_deinit(void)
+{
+ gbfclose(infile);
+}
+
+static void
+vitovtt_read(void)
+{
+ int version = 0;
+ route_head *route_head = 0;
+ waypoint *wpt_tmp = 0;
+ int scaled_lat = 0;
+ int scaled_lon = 0;
+ double altitude = 0;
+ struct tm tmStruct;
+ int scaled_sec = 0;
+ int microseconds = 0;
+ double speed = 0;
+ int course = 0;
+ int status = 0;
+
+ memset(&tmStruct, 0, sizeof(tmStruct));
+
+ route_head = route_head_alloc();
+ track_add_head(route_head);
+
+ /* Read the header. */
+ version = gbfgetint32(infile);
+ count = gbfgetint32(infile);
+
+ if (version!=vitovtt_version) {
+
+ fatal("%s (%d) reading file. Unsupported version %d\n",
+ MYNAME, __LINE__, version );
+ }
+
+ while (count) {
+ /* Read an entry. */
+ scaled_lat = gbfgetint32(infile);
+ scaled_lon = gbfgetint32(infile);
+ altitude = gbfgetflt(infile);
+ tmStruct.tm_year = gbfgetint16(infile) - TM_YEAR_ZERO;
+ tmStruct.tm_mon = gbfgetc(infile) - TM_MONTH_ZERO;
+ tmStruct.tm_mday = gbfgetc(infile);
+ tmStruct.tm_hour = gbfgetc(infile);
+ tmStruct.tm_min = gbfgetc(infile);
+ scaled_sec = gbfgetint32(infile);
+ speed = gbfgetflt(infile);
+ course = gbfgetint16(infile);
+ status = gbfgetint32(infile);
+
+ wpt_tmp = waypt_new();
+
+ wpt_tmp->latitude = scaled_lat / vitovtt_latitudescale;
+ wpt_tmp->longitude = scaled_lon / vitovtt_longitudescale;
+ wpt_tmp->altitude = altitude;
+
+ tmStruct.tm_sec = scaled_sec / vitovtt_secondscale;
+ microseconds = (scaled_sec % vitovtt_secondscale) / vitovtt_microsecondscale;
+ wpt_tmp->creation_time = mkgmtime(&tmStruct);
+ wpt_tmp->microseconds = microseconds;
+
+ /*
+ * TODO: interpret speed, course, status
+ */
+
+ track_add_wpt(route_head, wpt_tmp);
+
+ count--;
+ }
+}
+
+ff_vecs_t vitovtt_vecs = {
+ ff_type_file,
+ { ff_cap_none, ff_cap_read, ff_cap_none },
+ rd_init,
+ NULL,
+ rd_deinit,
+ NULL,
+ vitovtt_read,
+ NULL,
+ NULL,
+ NULL,
+ CET_CHARSET_UTF8, 1 /* do nothing | CET-REVIEW */
+};
/*
Perform various operations on waypoints.
- Copyright (C) 2002-2005 Robert Lipe, robertlipe@usa.net
+ Copyright (C) 2002-2007 Robert Lipe, robertlipe@usa.net
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
#include <stdio.h>
#include "defs.h"
#include "cet_util.h"
+#include "grtcirc.h"
queue waypt_head;
static unsigned int waypt_ct;
* This and waypt_free should be closely synced.
*/
waypoint * tmp;
+ url_link *url_next;
+
tmp = waypt_new();
memcpy(tmp, wpt, sizeof(waypoint));
+ tmp->url_next = NULL;
if (wpt->shortname)
tmp->shortname = xstrdup(wpt->shortname);
tmp->url = xstrdup(wpt->url);
if (wpt->url_link_text)
tmp->url_link_text = xstrdup(wpt->url_link_text);
+ for (url_next = wpt->url_next; url_next; url_next = url_next->url_next) {
+ waypt_add_url(tmp,
+ (url_next->url) ? xstrdup(url_next->url) : NULL,
+ (url_next->url_link_text) ? xstrdup(url_next->url_link_text) : NULL);
+ }
if (wpt->icon_descr && wpt->wpt_flags.icon_descr_is_dynamic)
tmp->icon_descr = xstrdup(wpt->icon_descr);
if (wpt->gc_data.desc_short.utfstring) {
void
waypt_add(waypoint *wpt)
{
+ double lat_orig = wpt->latitude;
+ double lon_orig = wpt->longitude;
+
ENQUEUE_TAIL(&waypt_head, &wpt->Q);
waypt_ct++;
+ if (wpt->latitude < -90) wpt->latitude += 180;
+ else if (wpt->latitude > +90) wpt->latitude -= 180;
+ if (wpt->longitude < -180) wpt->longitude += 360;
+ else if (wpt->longitude > +180) wpt->longitude -= 360;
+
if ((wpt->latitude < -90) || (wpt->latitude > 90.0))
- fatal ("Invalid latitude %f in waypoint.\n", wpt->latitude);
+ fatal ("Invalid latitude %f in waypoint %s.\n",
+ lat_orig, wpt->shortname ? wpt->shortname : "");
if ((wpt->longitude < -180) || (wpt->longitude > 180.0))
- fatal ("Invalid longitude %f in waypoint.\n", wpt->latitude);
+ fatal ("Invalid longitude %f in waypoint %s.\n",
+ lon_orig, wpt->shortname ? wpt->shortname : "");
/*
* Some input may not have one or more of these types so we
wpt = (waypoint *) xcalloc(sizeof (*wpt), 1);
wpt->altitude = unknown_alt;
- wpt->course = unknown_course;
- wpt->speed = unknown_speed;
wpt->fix = fix_unknown;
wpt->sat = -1;
bounds->max_lon = -9999;
bounds->min_lat = 9999;
bounds->min_lon = 9999;
+ bounds->max_alt = -unknown_alt;
+ bounds->min_alt = unknown_alt;
}
int
bounds->min_lat = waypointp->latitude;
if (waypointp->longitude < bounds->min_lon)
bounds->min_lon = waypointp->longitude;
+ if (waypointp->altitude != unknown_alt) {
+ if (waypointp->altitude < bounds->min_alt)
+ bounds->min_alt = waypointp->altitude;
+ if (waypointp->altitude > bounds->max_alt)
+ bounds->max_alt = waypointp->altitude;
+ }
}
if (wpt->url_link_text) {
xfree(wpt->url_link_text);
}
+ if (wpt->url_next) {
+ url_link *url_next;
+
+ for (url_next = wpt->url_next; url_next; ) {
+
+ url_link *tonuke = url_next;
+ if (tonuke->url) {
+ xfree(tonuke->url);
+ }
+ if (tonuke->url_link_text) {
+ xfree(tonuke->url_link_text);
+ }
+ url_next = tonuke->url_next;
+ xfree(tonuke);
+ }
+ }
if (wpt->icon_descr && wpt->wpt_flags.icon_descr_is_dynamic) {
xfree((char *)(void *)wpt->icon_descr);
}
waypt_ct = count;
xfree(head_bak);
}
+
+void
+waypt_add_url(waypoint *wpt, char *link, char *url_link_text)
+{
+ if ((link == NULL) && (url_link_text == NULL)) return;
+
+ /* Special case first one; it goes right into the waypoint. */
+ if ((wpt->url == NULL) && (wpt->url_link_text == NULL)) {
+ wpt->url = link;
+ wpt->url_link_text = url_link_text;
+ } else {
+ url_link *tail;
+ url_link *new_link = xcalloc(sizeof(url_link), 1);
+ new_link->url = link;
+ new_link->url_link_text = url_link_text;
+
+ /* Find current end of chain and tack this onto the end.. */
+ for (tail = wpt->url_next;;tail = tail->url_next) {
+ if (tail == NULL) {
+ wpt->url_next = new_link;
+ break;
+ }
+ if (tail->url_next == NULL) {
+ tail->url_next = new_link;
+ break;
+ }
+ }
+ }
+}
+
+/*
+ * returns full creation_time with parts of seconds in fractional portion
+ */
+
+double
+waypt_time(const waypoint *wpt)
+{
+ if (wpt->creation_time <= 0)
+ return (double) 0;
+ else
+ return ((double)wpt->creation_time + ((double)wpt->microseconds / 1000000));
+}
+
+/*
+ * calculates the speed between points "A" and "B"
+ * the result comes in meters per second and is always positive
+ */
+
+double
+waypt_speed(const waypoint *A, const waypoint *B)
+{
+ double dist, time;
+
+ dist = radtometers(gcdist(
+ RAD(A->latitude), RAD(A->longitude),
+ RAD(B->latitude), RAD(B->longitude)));
+ if (dist < 0.1) dist = 0; /* calc. diffs on 32- and 64-bit hosts */
+ if (dist == 0) return 0;
+
+ time = fabs(waypt_time(A) - waypt_time(B));
+ if (time > 0)
+ return (dist / time);
+ else
+ return 0;
+}
#define MYNAME "WBT-100/200"
#define NL "\x0D\x0A"
-#define BAUD 9600
-#define TIMEOUT 5000
+#define WBT200BAUD 9600
-#define RECLEN_V1 12
-#define RECLEN_V2 16
+#define WBT201BAUD 57600
+#define WBT201CHUNK 4096
+
+#define TIMEOUT 5000
+
+#define RECLEN_V1 12
+#define RECLEN_V2 16
+
+#define RECLEN_WBT201 16
+
+/* tk1 file format stuff */
+
+#define TK1_MAGIC "WintecLogFormat"
+#define TK1_DATA_OFFSET 0x0400
+#define TK1_END_FLAG 0x04000000ul
/* Used to sanity check data - from
* http://hypertextbook.com/facts/2001/DanaWollman.shtml
#define _MAX(a, b) ((a) > (b) ? (a) : (b))
#define RECLEN_MAX _MAX(RECLEN_V1, RECLEN_V2)
+/* Flags for WBT201 */
+enum {
+ WBT201_TRACK_START = 0x01,
+ WBT201_WAYPOINT = 0x02,
+ WBT201_OVER_SPEED = 0x04
+};
+
+#define BUFSPEC(b) b, sizeof(b)
+
/* The formats here must be in ascending record length order so that
* each format identification attempt can read more data from the
* device if necessary. If that proves to be a bad order to try the
};
/* Number of lines to skip while waiting for an ACK from a command. I've seen
- * conversations with up to 30 lines of cruft before the response so 50 isn't
+ * conversations with up to 30 lines of cruft before the response so 60 isn't
* too crazy.
*/
-#define RETRIES 50
+#define RETRIES 60
/*
- A conversation looks like this
-
- >> $PFST,FIRMWAREVERSION
- << $PFST,FIRMWAREVERSION,WBT200,3,31,6090,R2*77
- >> $PFST,NORMAL
- << $PFST,NORMAL,*02
- >> $PFST,READLOGGER
- << $PFST,READLOGGER,*17
- << 0xFFFF, <length>, 0xFFFF
- << (length + 1) * 12 or 16 bytes of data
- << ====
- >> $PFST,NORMAL
- << $PFST,NORMAL,*02
-*/
+ * For WBT-200 protocol documentation see:
+ * http://hexten.net/wiki/index.php/WBT-200_Comms_Protocol
+ */
static void *fd;
static FILE *fl;
static char *port;
static char *erase;
+static enum {
+ UNKNOWN, WBT200, WBT201
+} dev_type = UNKNOWN;
+
struct buf_chunk {
struct buf_chunk *next;
size_t size;
/* read position */
struct buf_chunk *current;
unsigned long offset;
+ /* shoehorned in here primarily out of laziness */
+ unsigned checksum;
};
struct read_state {
- route_head *route_head;
- double plat, plon; /* previous point */
- time_t ptim;
- unsigned wpn;
+ route_head *route_head;
+ unsigned wpn, tpn;
struct buf_head data;
};
h->tail = NULL;
h->alloc = alloc;
h->used = 0;
+ h->checksum = 0;
+ h->offset = 0;
}
static void buf_empty(struct buf_head *h) {
next = chunk->next;
xfree(chunk);
}
- h->head = NULL;
- h->tail = NULL;
- h->used = 0;
+ h->head = NULL;
+ h->tail = NULL;
+ h->used = 0;
+ h->checksum = 0;
}
static void buf_rewind(struct buf_head *h) {
}
static size_t buf_read(struct buf_head *h, void *data, size_t len) {
- char *bp = data;
+ char *bp = data;
+ size_t got = 0;
while (len != 0 && h->current != NULL) {
size_t avail = h->current->used - h->offset;
if (avail > len) { avail = len; }
- memcpy(bp, buf_CHUNK_PTR(h->current, h->offset), avail);
+ /* Allow NULL buffer pointer to skip bytes */
+ if (NULL != bp) {
+ memcpy(bp, buf_CHUNK_PTR(h->current, h->offset), avail);
+ bp += avail;
+ }
+
h->offset += avail;
- bp += avail;
len -= avail;
+ got += avail;
if (h->offset == h->current->used) {
h->current = h->current->next;
}
}
- return bp - (char *) data;
+ return got;
}
static void buf_extend(struct buf_head *h, size_t amt) {
struct buf_chunk *c;
size_t sz = amt + sizeof(struct buf_chunk);
if (c = xmalloc(sz), NULL == c) {
- fatal(MYNAME ": Can't allocate %lu bytes for buffer", (unsigned long) sz);
+ fatal(MYNAME ": Can't allocate %lu bytes for buffer\n", (unsigned long) sz);
}
c->next = NULL;
h->tail = c;
}
+static void buf_update_checksum(struct buf_head *h, const void *data, size_t len) {
+ unsigned char *cp = (unsigned char *) data;
+ unsigned i;
+
+ db(4, "Updating checksum with %p, %lu, before: %02x ",
+ data, (unsigned long) len, h->checksum);
+ for (i = 0; i < len; i++) {
+ h->checksum ^= cp[i];
+ }
+ db(4, "after: %02x\n", h->checksum);
+}
+
static void buf_write(struct buf_head *h, const void *data, size_t len) {
size_t avail;
const char *bp = data;
+
+ buf_update_checksum(h, data, len);
h->used += len;
if (rc = gbser_read_line(fd, buf, len, TIMEOUT, 0x0A, 0x0D), rc != gbser_OK) {
fatal(MYNAME ": Read error (%d)\n", rc);
}
+ db(3, "Got response: \"%s\"\n", buf);
}
static void wr_cmd(const char *cmd) {
}
}
+static void wr_cmdl(const char *cmd) {
+ wr_cmd(cmd);
+ wr_cmd(NL);
+}
+
+static int expect(const char *str) {
+ int state = 0;
+ int c, i;
+ int errors = 5; /* allow this many errors */
+
+ for (i = 0; i < 5000; i++) {
+ /* reached end of string */
+ if (str[state] == '\0') {
+ return 1;
+ }
+
+ c = gbser_readc_wait(fd, 500);
+ if (c < 0) {
+ db(3, "Got error: %d\n", c);
+ if (--errors <= 0) {
+ return 0;
+ }
+ } else {
+ db(3, "Got char: %02x '%c'\n", c, isprint(c) ? c : '.');
+ if (c == str[state]) {
+ state++; /* carry on */
+ } else {
+ state = 0; /* go back to start */
+ }
+ }
+ }
+
+ return 0;
+}
+
+static int wbt200_try() {
+ int rc;
+
+ db(1, "Trying WBT100/200\n");
+
+ if ((rc = gbser_set_port(fd, WBT200BAUD, 8, 0, 1))) {
+ db(1, "Set baud rate to %d failed (%d)\n", WBT200BAUD, rc);
+ return 0;
+ }
+
+ wr_cmdl("$PFST,NORMAL");
+ return expect("$PFST");
+}
+
+static int wbt201_try() {
+ int rc;
+
+ db(1, "Trying WBT201/G-Rays 2\n");
+
+ if ((rc = gbser_set_port(fd, WBT201BAUD, 8, 0, 1))) {
+ db(1, "Set baud rate to %d failed (%d)\n", WBT201BAUD, rc);
+ return 0;
+ }
+
+ wr_cmdl("@AL");
+ return expect("@AL");
+}
+
+static int guess_device() {
+ int i;
+ db(1, "Guessing device...\n");
+ for (i = 0; i < 5; i++) {
+ if (wbt200_try()) {
+ return WBT200;
+ }
+ if (wbt201_try()) {
+ return WBT201;
+ }
+ }
+ return UNKNOWN;
+}
+
static void rd_init(const char *fname) {
port = xstrdup(fname);
db(1, "Opening port...\n");
- if ((fd = gbser_init(port), NULL == fd) ||
- gbser_set_port(fd, BAUD, 8, 0, 1)) {
+ if (fd = gbser_init(port), NULL == fd) {
fatal(MYNAME ": Can't initialise port \"%s\"\n", port);
}
+
+ dev_type = guess_device();
+ if (UNKNOWN == dev_type) {
+ fatal(MYNAME ": Can't determine device type\n");
+ }
}
static void rd_deinit(void) {
}
static int starts_with(const char *buf, const char *pat) {
- return memcmp(buf, pat, strlen(pat)) == 0;
+ size_t pat_len = strlen(pat);
+ return (pat_len <= strlen(buf))
+ ? (memcmp(buf, pat, pat_len) == 0)
+ : 0;
}
/* Send a command then wait for a line starting with the command string
* to be returned.
*/
-static void do_cmd(const char *cmd, const char *expect, char *buf, int len) {
+static int do_cmd(const char *cmd, const char *expect, char *buf, int len) {
int try;
rd_drain();
- wr_cmd(cmd);
- wr_cmd(NL);
+ wr_cmdl(cmd);
db(2, "Cmd: %s\n", cmd);
*/
for (try = 0; try < RETRIES; try++) {
rd_line(buf, len);
+ db(3, "Got: %s\n", buf);
if (starts_with(buf, expect)) {
- db(2, "Got: %s\n", buf);
- return;
+ db(2, "Matched: %s\n", buf);
+ return strlen(expect);
}
db(2, "Skip %d: %s\n", try, buf);
}
fatal(MYNAME ": Bad response from unit\n");
+ return 0; /* keep compiler quiet */
}
/* Issue a command that expects the same string to be echoed
* back as an ACK
*/
-static void do_simple(const char *cmd, char *buf, int len) {
- do_cmd(cmd, cmd, buf, len);
+static int do_simple(const char *cmd, char *buf, int len) {
+ return do_cmd(cmd, cmd, buf, len);
+}
+
+static char *get_param(const char *cmd, char *buf, int len) {
+ int cl = do_simple(cmd, buf, len);
+ return buf + cl + 1;
+}
+
+static int get_param_int(const char *cmd) {
+ char buf[80];
+ return atoi(get_param(cmd, buf, sizeof(buf)));
+}
+
+static double get_param_float(const char *cmd) {
+ char buf[80];
+ return atof(get_param(cmd, buf, sizeof(buf)));
}
/* Decompose binary date into discreet fields */
mday > 0 && mday <= 31 && mon > 0 && mon <= 12 && year >= 4;
}
-static int data_chunk(struct read_state *st, const void *buf, int fmt) {
- char wp_name[20];
+static waypoint *make_point(double lat, double lon, double alt, time_t tim, const char *fmt, int index) {
+ char wp_name[20];
+ waypoint *wpt = waypt_new();
+
+ sprintf(wp_name, fmt, index);
+
+ wpt->latitude = lat;;
+ wpt->longitude = lon;
+ wpt->altitude = alt;
+ wpt->creation_time = tim;
+ wpt->shortname = xstrdup(wp_name);
+
+ return wpt;
+}
+
+static waypoint *make_waypoint(struct read_state *st, double lat, double lon, double alt, time_t tim) {
+ return make_point(lat, lon, alt, tim, "WP%04d", ++st->wpn);
+}
+
+static waypoint *make_trackpoint(struct read_state *st, double lat, double lon, double alt, time_t tim) {
+ return make_point(lat, lon, alt, tim, "TP%04d", ++st->tpn);
+}
+
+static int wbt200_data_chunk(struct read_state *st, const void *buf, int fmt) {
gbuint32 tim;
double lat, lon, alt;
time_t rtim;
- waypoint *wpt = NULL;
- const char *bp = buf;
+ waypoint *tpt = NULL;
+ const char *bp = buf;
size_t buf_used = fmt_version[fmt].reclen;
tim = le_read32(bp + 0);
/* This fix courtesy of Anton Frolich */
lat += 100;
st->route_head = NULL;
- } else {
- /* TODO: Should this code execute for /every/ waypoint - even the first in
- * a track? Presumably it should because the first point looks as valid as
- * any other.
- */
-
- wpt = waypt_new();
-
- wpt->latitude = lat;;
- wpt->longitude = lon;
- wpt->altitude = alt;
- wpt->creation_time = rtim;
-
- sprintf(wp_name, "WP%04d", ++st->wpn);
- wpt->shortname = xstrdup(wp_name);
+ }
- if (NULL == st->route_head) {
- db(1, "New Track\n");
- st->route_head = route_head_alloc();
- track_add_head(st->route_head);
- }
+ tpt = make_trackpoint(st, lat, lon, alt, rtim);
- track_add_wpt(st->route_head, wpt);
+ if (NULL == st->route_head) {
+ db(1, "New Track\n");
+ st->route_head = route_head_alloc();
+ track_add_head(st->route_head);
}
- st->ptim = rtim;
- st->plat = lat;
- st->plon = lon;
+ track_add_wpt(st->route_head, tpt);
return 1;
}
return 1;
}
-static void process_data(struct read_state *pst, int fmt) {
+static void wbt200_process_data(struct read_state *pst, int fmt) {
char buf[RECLEN_MAX];
size_t reclen = fmt_version[fmt].reclen;
if (got != reclen) {
break;
}
- data_chunk(pst, buf, fmt);
+ wbt200_data_chunk(pst, buf, fmt);
}
}
static void state_init(struct read_state *pst) {
pst->route_head = NULL;
pst->wpn = 0;
+ pst->tpn = 0;
buf_init(&pst->data, RECLEN_V1 * RECLEN_V2);
}
state_init(pst);
}
-static void file_read(void) {
- char buf[512];
- size_t rc;
- struct read_state st;
- int fmt;
-
- state_init(&st);
-
- /* Read the whole file into the buffer */
- rc = fread(buf, 1, sizeof(buf), fl);
- while (rc != 0) {
- buf_write(&st.data, buf, rc);
- rc = fread(buf, 1, sizeof(buf), fl);
- }
-
- if (!feof(fl)) {
- fatal(MYNAME ": Read error");
- }
-
- /* Try to guess the data format */
- for (fmt = 0; fmt_version[fmt].reclen != 0; fmt++) {
- size_t reclen = fmt_version[fmt].reclen;
- if ((st.data.used % reclen) == 0 && is_valid(&st.data, fmt)) {
- break;
- }
- }
-
- if (fmt_version[fmt].reclen == 0) {
- fatal(MYNAME ": Can't autodetect data format");
- }
-
- process_data(&st, fmt);
-
- state_empty(&st);
-}
-
static void want_bytes(struct buf_head *h, size_t len) {
char buf[512];
}
}
-static void data_read(void) {
+static void wbt200_data_read(void) {
/* Awooga! Awooga! Statically allocated buffer danger!
* Actually, it's OK because rd_line can read arbitrarily
* long lines returning only the first N characters
* proof to rely on analysing the data. We need to be able to do
* that with files anyway - because they're not versioned.
*/
- do_simple("$PFST,FIRMWAREVERSION", line_buf, sizeof(line_buf));
+ do_simple("$PFST,FIRMWAREVERSION", BUFSPEC(line_buf));
- do_simple("$PFST,NORMAL", line_buf, sizeof(line_buf));
- do_simple("$PFST,READLOGGER", line_buf, sizeof(line_buf));
+ do_simple("$PFST,NORMAL", BUFSPEC(line_buf));
+ do_simple("$PFST,READLOGGER", BUFSPEC(line_buf));
/* Now we're into binary mode */
rd_buf(line_buf, 6); /* six byte header */
size_t want = reclen * count;
if (want < st.data.used) {
- fatal(MYNAME ": Internal error: formats not ordered in ascending size order");
+ fatal(MYNAME ": Internal error: formats not ordered in ascending size order\n");
}
db(3, "Want %lu bytes of data\n", (unsigned long) want);
}
if (fmt_version[fmt].reclen == 0) {
- fatal(MYNAME ": Can't autodetect data format");
+ fatal(MYNAME ": Can't autodetect data format\n");
}
- process_data(&st, fmt);
+ wbt200_process_data(&st, fmt);
/* Erase data? */
db(1, "Erasing data\n");
for (f = 27; f <= 31; f++) {
sprintf(line_buf, "$PFST,REMOVEFILE,%d", f);
- do_cmd(line_buf, "$PFST,REMOVEFILE", line_buf, sizeof(line_buf));
+ do_cmd(line_buf, "$PFST,REMOVEFILE", BUFSPEC(line_buf));
}
db(1, "Reclaiming free space\n");
for (f = 0; f <= 3; f++) {
sprintf(line_buf, "$PFST,FFSRECLAIM,%d", f);
- do_cmd(line_buf, "$PFST,FFSRECLAIM", line_buf, sizeof(line_buf));
+ do_cmd(line_buf, "$PFST,FFSRECLAIM", BUFSPEC(line_buf));
}
}
- do_simple("$PFST,NORMAL", line_buf, sizeof(line_buf));
+ do_simple("$PFST,NORMAL", BUFSPEC(line_buf));
state_empty(&st);
}
+static int all_null(const void *buf, const int len) {
+ const char *bp = buf;
+ int i;
+
+ for (i = 0; i < len; i++) {
+ if (bp[i]) {
+ return 0;
+ }
+ }
+
+ return 1;
+}
+
+static int wbt201_data_chunk(struct read_state *st, const void *buf) {
+ gbuint32 tim;
+ gbuint16 flags;
+ double lat, lon, alt;
+ time_t rtim;
+ waypoint *tpt = NULL;
+ const char *bp = buf;
+
+ /* Zero records are skipped */
+ if (all_null(buf, RECLEN_WBT201)) {
+ return 1;
+ }
+
+ flags = le_read16(bp + 0);
+ tim = le_read32(bp + 2);
+
+ if (TK1_END_FLAG == tim) {
+ /* EOF? (TK1 files only as far as I know) */
+ return 0;
+ }
+
+ lat = (double) ((gbint32) le_read32(bp + 6)) / 10000000;
+ lon = (double) ((gbint32) le_read32(bp + 10)) / 10000000;
+ alt = (double) ((gbint16) le_read16(bp + 14));
+
+ rtim = decode_date(tim);
+
+ if ((flags & WBT201_WAYPOINT) && (global_opts.masked_objective & WPTDATAMASK)) {
+ waypoint *wpt = make_waypoint(st, lat, lon, alt, rtim);
+ waypt_add(wpt);
+ }
+
+ if (global_opts.masked_objective & TRKDATAMASK) {
+ if (flags & WBT201_TRACK_START) {
+ st->route_head = NULL;
+ }
+
+ tpt = make_trackpoint(st, lat, lon, alt, rtim);
+
+ if (NULL == st->route_head) {
+ db(1, "New Track\n");
+ st->route_head = route_head_alloc();
+ track_add_head(st->route_head);
+ }
+
+ track_add_wpt(st->route_head, tpt);
+ }
+
+ return 1;
+}
+
+static void wbt201_process_chunk(struct read_state *st) {
+ char buf[RECLEN_WBT201];
+
+ db(2, "Processing %lu bytes of data\n", st->data.used);
+
+ while (buf_read(&st->data, buf, sizeof(buf)) == sizeof(buf)
+ && wbt201_data_chunk(st, buf)) {
+ /* do nothing */
+ }
+}
+
+static int wbt201_read_chunk(struct read_state *st, unsigned pos, unsigned limit) {
+ char cmd_buf[30];
+ char line_buf[100];
+ unsigned long cs;
+ char *lp, *op;
+ static char *cs_prefix = "@AL,CS,";
+
+ unsigned want = limit - pos;
+ if (want > WBT201CHUNK) {
+ want = WBT201CHUNK;
+ }
+
+ db(3, "Reading bytes at %u (0x%x), limit = %u (0x%x), want = %u (0x%x)\n",
+ pos, pos, limit, limit, want, want);
+
+ buf_empty(&st->data);
+
+ rd_drain();
+ sprintf(cmd_buf, "@AL,5,3,%d", pos);
+ wr_cmdl(cmd_buf);
+
+ want_bytes(&st->data, want);
+
+ /* checksum */
+ rd_line(BUFSPEC(line_buf));
+
+ if (!starts_with(line_buf, cs_prefix)) {
+ db(2, "Bad checksum response\n");
+ return 0;
+ }
+
+ lp = line_buf + strlen(cs_prefix);
+ cs = strtoul(lp, &op, 16);
+ if (*lp == ',' || *op != ',') {
+ db(2, "Badly formed checksum\n");
+ return 0;
+ }
+
+ if (cs != st->data.checksum) {
+ db(2, "Checksums don't match. Got %02x, expected %02\n", cs, st->data.checksum);
+ return 0;
+ }
+
+ /* ack */
+ rd_line(BUFSPEC(line_buf));
+ return starts_with(line_buf, cmd_buf);
+}
+
+static void wbt201_data_read(void) {
+ char line_buf[100];
+ struct read_state st;
+ unsigned tries;
+
+ const char *tmp;
+
+ double ver_hw;
+ double ver_sw;
+ double ver_fmt;
+
+ unsigned log_addr_start;
+ unsigned log_addr_end;
+ unsigned log_area_start;
+ unsigned log_area_end;
+
+ /* Read various device information. We don't use much of this yet -
+ * just log_addr_start and log_addr_end - but it's useful to have it
+ * here for debug and documentation purposes.
+ */
+ tmp = get_param("@AL,7,1", BUFSPEC(line_buf));
+ db(1, "Reading device \"%s\"\n", tmp);
+
+ ver_hw = get_param_float("@AL,8,1");
+ ver_sw = get_param_float("@AL,8,2");
+ ver_fmt = get_param_float("@AL,8,3");
+
+ db(2, "versions: hw=%f, sw=%f, fmt=%f\n",
+ ver_hw, ver_sw, ver_fmt);
+
+ log_addr_start = get_param_int("@AL,5,1"); /* we read from here... */
+ log_addr_end = get_param_int("@AL,5,2"); /* ...to here and ... */
+ log_area_start = get_param_int("@AL,5,9"); /* ...probably don't... */
+ log_area_end = get_param_int("@AL,5,10"); /* ...need these. */
+
+ db(2, "Log addr=(%d..%d), area=(%d..%d)\n",
+ log_addr_start, log_addr_end,
+ log_area_start, log_area_end);
+
+ state_init(&st);
+
+ tries = 10;
+ while (log_addr_start < log_addr_end) {
+ if (wbt201_read_chunk(&st, log_addr_start, log_addr_end)) {
+ buf_rewind(&st.data);
+ wbt201_process_chunk(&st);
+ log_addr_start += st.data.used;
+ } else {
+ if (--tries <= 0) {
+ fatal(MYNAME ": Too many data errors during read\n");
+ }
+ }
+ }
+
+ if (*erase != '0') {
+ /* erase device */
+ do_simple("@AL,5,6", BUFSPEC(line_buf));
+ }
+
+ state_empty(&st);
+ do_simple("@AL,2,1", BUFSPEC(line_buf));
+}
+
+static void file_read(void) {
+ char buf[512];
+ size_t rc;
+ struct read_state st;
+ int fmt;
+
+ const char * tk1_magic = TK1_MAGIC;
+ size_t tk1_magic_len = strlen(tk1_magic) + 1;
+
+ state_init(&st);
+
+ /* Read the whole file into the buffer */
+ rc = fread(buf, 1, sizeof(buf), fl);
+ while (rc != 0) {
+ buf_write(&st.data, buf, rc);
+ rc = fread(buf, 1, sizeof(buf), fl);
+ }
+
+ if (!feof(fl)) {
+ fatal(MYNAME ": Read error\n");
+ }
+
+ /* Although wbt-tk1 and wbt-bin are enumerated as distinct formats
+ * we handle them both here and autodetect which type we have.
+ */
+
+ /* WBT201 TK1 format? */
+
+ buf_rewind(&st.data);
+ buf_read(&st.data, buf, tk1_magic_len);
+ if (memcmp(buf, tk1_magic, tk1_magic_len) == 0) {
+ db(1, "Got TK1 file\n");
+ buf_rewind(&st.data);
+ /* Seek */
+ buf_read(&st.data, NULL, TK1_DATA_OFFSET);
+ wbt201_process_chunk(&st);
+ }
+ else {
+ db(1, "Got bin file\n");
+
+ /* Try to guess the data format */
+ for (fmt = 0; fmt_version[fmt].reclen != 0; fmt++) {
+ size_t reclen = fmt_version[fmt].reclen;
+ if ((st.data.used % reclen) == 0 && is_valid(&st.data, fmt)) {
+ break;
+ }
+ }
+
+ if (fmt_version[fmt].reclen == 0) {
+ fatal(MYNAME ": Can't autodetect data format\n");
+ }
+
+ wbt200_process_data(&st, fmt);
+ }
+
+ state_empty(&st);
+}
+
+static void data_read(void) {
+ switch (dev_type) {
+ case WBT200:
+ wbt200_data_read();
+ break;
+
+ case WBT201:
+ wbt201_data_read();
+ break;
+
+ default:
+ fatal(MYNAME ": Unknown device type (internal)\n");
+ break;
+ }
+}
+
+/* wbt */
+
static arglist_t wbt_sargs[] = {
{ "erase", &erase, "Erase device data after download",
"0", ARGTYPE_BOOL, ARG_NOMINMAX },
ff_vecs_t wbt_svecs = {
ff_type_serial,
- { ff_cap_none, ff_cap_read, ff_cap_none },
+ { ff_cap_read, ff_cap_read, ff_cap_none },
rd_init,
NULL,
rd_deinit,
CET_CHARSET_UTF8, 1 /* master process: don't convert anything | CET-REVIEW */
};
+/* used for wbt-bin /and/ wbt-tk1 */
+
static arglist_t wbt_fargs[] = {
ARG_TERMINATOR
};
VALUE "FileDescription", "GPS format converter\0"
VALUE "FileVersion", "@GBMAJOR@.@GBMINOR@.@GBMICRO@@PACKAGE_RELEASE@\0"
VALUE "InternalName", "\0"
- VALUE "LegalCopyright", "(C) 2002-2006 The people behind GPSBabel\0"
+ VALUE "LegalCopyright", "(C) 2002-2007 The people behind GPSBabel\0"
VALUE "LegalTrademarks", "\0"
VALUE "OriginalFilename", "gpsbabel.exe\0"
VALUE "ProductName", "GPSBabel\0"
AutoIncBuild=0\r
MajorVer=0\r
MinorVer=2\r
-Release=6\r
-Build=1\r
+Release=8\r
+Build=2\r
Debug=0\r
PreRelease=0\r
Special=0\r
[Version Info Keys]\r
CompanyName=GPSBabel Makers\r
FileDescription=GPSBabel Windows Frontend\r
-FileVersion=0.2.6.1\r
+FileVersion=0.2.8.2\r
InternalName=\r
LegalCopyright=(C) 2005,2006 Olaf Klein (o.b.klein@gpsbabel.org)\r
LegalTrademarks=\r
locale\es\LC_MESSAGES\gpsbabel.mo \\r
locale\fr\LC_MESSAGES\delphi.mo \\r
locale\fr\LC_MESSAGES\default.mo \\r
- locale\fr\LC_MESSAGES\gpsbabel.mo\r
+ locale\fr\LC_MESSAGES\gpsbabel.mo \\r
+ locale\hu\LC_MESSAGES\delphi.mo \\r
+ locale\hu\LC_MESSAGES\default.mo \\r
+ locale\hu\LC_MESSAGES\gpsbabel.mo\r
\r
.suffixes: .po\r
\r
rm -f locale\de\LC_MESSAGES\*.mo\r
rm -f locale\es\LC_MESSAGES\*.mo\r
rm -f locale\fr\LC_MESSAGES\*.mo\r
+ rm -f locale\hu\LC_MESSAGES\*.mo\r
\r
lbxTranslators.Items.Add(_('German') + ' ' + _('by') + ' Olaf Klein');\r
lbxTranslators.Items.Add(_('French') + ' ' + _('by') + ' Lilian Morinon');\r
lbxTranslators.Items.Add(_('Spanish') + ' ' + _('by') + ' Daniel Diaz');\r
+ lbxTranslators.Items.Add(_('Hungarian') + ' ' + _('by') + ' Sprok Bence');\r
end;\r
\r
procedure TfrmAbout.lbURLMouseMove(Sender: TObject; Shift: TShiftState; X,\r
format: string;\r
name: string;\r
hint: string;\r
+ defname: string;\r
otype: Byte;\r
def: PChar; // default value from gpsbabel or ini-file\r
gbdef: PChar; // default value from gpsbabel \r
max: PChar;\r
chb: TCheckBox;\r
edit: TControl;\r
+ dir: Byte; // 1 = only in; 2 = only out\r
end;\r
POption = ^TOption;\r
\r
buff: array[0..1023] of Char;\r
cin, cend: PChar;\r
index: Integer;\r
- opt: POption;\r
+ opt, opt2: POption;\r
list: TStringList;\r
i: Integer;\r
s: string;\r
opt.def := opt.gbdef;\r
end;\r
\r
+ opt.dir := 3; // in and out\r
+ opt.defname := opt.name;\r
+\r
index := Self.IndexOf(opt.format);\r
if (index >= 0) then\r
list := TStringList(Self.Objects[index])\r
Self.AddObject(opt.format, list);\r
end;\r
list.AddObject(opt.name, Pointer(opt));\r
+ if (opt.format = 'xcsv') then\r
+ begin\r
+ if (opt.name = 'style') then\r
+ begin\r
+ opt.dir := 1;\r
+ New(opt2);\r
+ opt2^ := opt^;\r
+ opt2.name := 'style_out';\r
+ opt2.dir := 2;\r
+ list.AddObject(opt2.name, Pointer(opt2));\r
+ end;\r
+ end;\r
end;\r
\r
procedure TOptions.DebugGetHints(List: TStringList);\r
info.Ext := ext;\r
info.internal := internal;\r
info.Capas := caps;\r
- \r
+\r
i := SELF.Add(name);\r
SELF.PutObject(i, Pointer(info));\r
\r
begin\r
gpsbabel_knows_inifile := True;\r
// add -p "" to command-line\r
- end;\r
+ end\r
+ else if (name = 'xcsv') then\r
+ info.internal := 'file';\r
break;\r
end;\r
end;\r
msgid ""\r
msgstr ""\r
"Project-Id-Version: PACKAGE VERSION\n"\r
-"POT-Creation-Date: 2005-12-06 17:57\n"\r
-"PO-Revision-Date: 2005-12-06 17:57\n"\r
+"POT-Creation-Date: 2007-05-01 19:36\n"\r
+"PO-Revision-Date: 2007-05-01 19:36\n"\r
"Last-Translator: Somebody <your.email@address.com>\n"\r
"MIME-Version: 1.0\n"\r
"Content-Type: text/plain; charset=UTF-8\n"\r
\r
#. frmAbout..pnClient..pnCenter..lbCopyRight..Caption\r
#: about.dfm:114\r
-msgid "Copyright (C) 2005 Olaf Klein (o.b.klein@gpsbabel.org)"\r
+msgid "Copyright (C) 2005,2006 Olaf Klein (o.b.klein@gpsbabel.org)"\r
msgstr ""\r
\r
#. frmAbout..pnClient..pnCenter..lbMoreInfo..Caption\r
\r
#. frmAbout..pnClient..pnCenter..stDescription..Caption\r
#: about.dfm:149\r
-msgid "The frontend for gpsbabel command line "\r
+msgid "The frontend for GPSBabel command line "\r
"program"\r
msgstr ""\r
\r
#. frmFilter..gbTracks..Caption\r
#: filter.dfm:31\r
#. frmMain..pnBottom..cbTracks..Caption\r
-#: main.dfm:589\r
+#: main.dfm:581\r
msgid "&Tracks"\r
msgstr ""\r
\r
#. frmFilter..gbTracks..lbTimePlusMinus..Caption\r
#: filter.dfm:39\r
+#: about.pas:87\r
+#: about.pas:88\r
+#: about.pas:89\r
+#: about.pas:90\r
msgid "by"\r
msgstr ""\r
\r
msgid "TZ"\r
msgstr ""\r
\r
+#. frmFilter..gbTracks..cbGPSfix..Hint\r
+#: filter.dfm:306\r
+msgid "Synthesize GPS fixes (PPS, DGPS, 3D, "\r
+"2D)"\r
+msgstr ""\r
+\r
+#. frmFilter..gbTracks..cbGPSfix..Caption\r
+#: filter.dfm:307\r
+msgid "GPS fixes"\r
+msgstr ""\r
+\r
+#. frmFilter..gbTracks..cbTrackCourse..Hint\r
+#: filter.dfm:316\r
+msgid "Synthesize course values"\r
+msgstr ""\r
+\r
+#. frmFilter..gbTracks..cbTrackCourse..Caption\r
+#: filter.dfm:317\r
+msgid "Course"\r
+msgstr ""\r
+\r
+#. frmFilter..gbTracks..cbTrackSpeed..Hint\r
+#: filter.dfm:325\r
+msgid "Synthesize speed values"\r
+msgstr ""\r
+\r
+#. frmFilter..gbTracks..cbTrackSpeed..Caption\r
+#: filter.dfm:326\r
+msgid "Speed"\r
+msgstr ""\r
+\r
+#. frmFilter..gbTracks..cobGPSfixes....Items.Strings\r
+#: filter.dfm:338\r
+msgid "none"\r
+msgstr ""\r
+\r
+#. frmFilter..gbTracks..cobGPSfixes....Items.Strings\r
+#: filter.dfm:339\r
+msgid "pps"\r
+msgstr ""\r
+\r
+#. frmFilter..gbTracks..cobGPSfixes....Items.Strings\r
+#: filter.dfm:340\r
+msgid "dgps"\r
+msgstr ""\r
+\r
#. frmFilter..gbRoutes..Caption\r
-#: filter.dfm:308\r
+#: filter.dfm:352\r
msgid "&Routes && Tracks"\r
msgstr ""\r
\r
#. frmFilter..gbRoutes..lbRouteSimplifyCount..Caption\r
-#: filter.dfm:316\r
+#: filter.dfm:360\r
msgid "limit to"\r
msgstr ""\r
\r
#. frmFilter..gbRoutes..lbRouteSimplifyText..Caption\r
-#: filter.dfm:324\r
+#: filter.dfm:368\r
msgid "Points"\r
msgstr ""\r
\r
#. frmFilter..gbRoutes..cbRouteSimplify..Hint\r
-#: filter.dfm:331\r
+#: filter.dfm:375\r
msgid "Simplify routes and tracks by limited number of "\r
"points"\r
msgstr ""\r
\r
#. frmFilter..gbRoutes..cbRouteSimplify..Caption\r
-#: filter.dfm:332\r
+#: filter.dfm:376\r
msgid "Simplify"\r
msgstr ""\r
\r
#. frmFilter..gbRoutes..edRoutesSimplifyMaxPoints..Hint\r
-#: filter.dfm:341\r
+#: filter.dfm:385\r
msgid "Upper limit of points for routes and "\r
"tracks"\r
msgstr ""\r
\r
#. frmFilter..gbRoutes..cbReverse..Hint\r
-#: filter.dfm:363\r
+#: filter.dfm:407\r
msgid "Reverse routes and tracks"\r
msgstr ""\r
\r
#. frmFilter..gbRoutes..cbReverse..Caption\r
-#: filter.dfm:364\r
+#: filter.dfm:408\r
msgid "Reverse"\r
msgstr ""\r
\r
#. frmFilter..pnBottom..btnOK..Caption\r
-#: filter.dfm:381\r
+#: filter.dfm:425\r
msgid "OK"\r
msgstr ""\r
\r
#. frmFilter..pnBottom..BitBtn1..Caption\r
-#: filter.dfm:417\r
+#: filter.dfm:461\r
msgid "File based filters"\r
msgstr ""\r
\r
#. frmFilter..gbWaypoints..Caption\r
-#: filter.dfm:437\r
+#: filter.dfm:490\r
#. frmMain..pnBottom..cbWaypoints..Caption\r
-#: main.dfm:563\r
+#: main.dfm:555\r
msgid "&Waypoints"\r
msgstr ""\r
\r
#. frmFilter..gbWaypoints..lbWayptRadiusLat..Caption\r
-#: filter.dfm:446\r
+#: filter.dfm:499\r
msgid "Latitude"\r
msgstr ""\r
\r
#. frmFilter..gbWaypoints..lbWayptRadiusLon..Caption\r
-#: filter.dfm:454\r
+#: filter.dfm:507\r
msgid "Longitude"\r
msgstr ""\r
\r
#. frmFilter..gbWaypoints..cbWayptMergeDupLoc..Hint\r
-#: filter.dfm:462\r
+#: filter.dfm:515\r
msgid "Merge waypoints with duplicate locations"\r
msgstr ""\r
\r
#. frmFilter..gbWaypoints..cbWayptMergeDupLoc..Caption\r
-#: filter.dfm:463\r
+#: filter.dfm:516\r
msgid "locations"\r
msgstr ""\r
\r
#. frmFilter..gbWaypoints..cbWayptMergeDupNames..Hint\r
-#: filter.dfm:472\r
+#: filter.dfm:525\r
msgid "Merge waypoints with duplicate \"short "\r
"name\""\r
msgstr ""\r
\r
#. frmFilter..gbWaypoints..cbWayptMergeDupNames..Caption\r
-#: filter.dfm:473\r
+#: filter.dfm:526\r
msgid "\"short names\""\r
msgstr ""\r
\r
#. frmFilter..gbWaypoints..cbWayptMergeDistance..Hint\r
-#: filter.dfm:482\r
+#: filter.dfm:535\r
msgid "Merge waypoints separated by less then"\r
msgstr ""\r
\r
#. frmFilter..gbWaypoints..cbWayptMergeDistance..Caption\r
-#: filter.dfm:483\r
+#: filter.dfm:536\r
msgid "Position"\r
msgstr ""\r
\r
#. frmFilter..gbWaypoints..cbWayptSort..Hint\r
-#: filter.dfm:511\r
+#: filter.dfm:564\r
msgid "Sort waypoints by \"short name\" or by "\r
"description"\r
msgstr ""\r
\r
#. frmFilter..gbWaypoints..cbWayptSort..Caption\r
-#: filter.dfm:512\r
+#: filter.dfm:565\r
msgid "Sort"\r
msgstr ""\r
\r
#. frmFilter..gbWaypoints..cbWayptMergeDups..Hint\r
-#: filter.dfm:520\r
+#: filter.dfm:573\r
msgid "Merge duplicate waypoints"\r
msgstr ""\r
\r
#. frmFilter..gbWaypoints..cbWayptMergeDups..Caption\r
-#: filter.dfm:521\r
+#: filter.dfm:574\r
msgid "Duplicates"\r
msgstr ""\r
\r
#. frmFilter..gbWaypoints..cbWayptRadius..Hint\r
-#: filter.dfm:530\r
+#: filter.dfm:583\r
msgid "Include points based on their proximity to central "\r
"point"\r
msgstr ""\r
\r
#. frmFilter..gbWaypoints..cbWayptRadius..Caption\r
-#: filter.dfm:531\r
+#: filter.dfm:584\r
msgid "Radius"\r
msgstr ""\r
\r
#. frmFilter..gbWaypoints..edWayptRadiusLat..Hint\r
-#: filter.dfm:559\r
+#: filter.dfm:612\r
msgid "Latitude of central point"\r
msgstr ""\r
\r
#. frmFilter..gbWaypoints..edWayptRadiusLon..Hint\r
-#: filter.dfm:569\r
+#: filter.dfm:622\r
msgid "Longitude of central point"\r
msgstr ""\r
\r
+#. frmFilter..gbTransform..Caption\r
+#: filter.dfm:634\r
+msgid "Transformation"\r
+msgstr ""\r
+\r
+#. frmFilter..gbTransform..cbTransform..Caption\r
+#: filter.dfm:651\r
+msgid "Transform"\r
+msgstr ""\r
+\r
+#. frmFilter..gbTransform..cbTransformDelete..Hint\r
+#: filter.dfm:660\r
+msgid "Delete source data after transformation"\r
+msgstr ""\r
+\r
+#. frmFilter..gbTransform..cbTransformDelete..Caption\r
+#: filter.dfm:661\r
+msgid "Delete"\r
+msgstr ""\r
+\r
#. frmMain..pnTop..gbInput..Caption\r
#: main.dfm:38\r
-#: main.pas:269\r
-#: main.pas:274\r
-#: main.pas:460\r
-#: main.pas:842\r
+#: main.pas:270\r
+#: main.pas:275\r
+#: main.pas:467\r
+#: main.pas:868\r
msgid "Input"\r
msgstr ""\r
\r
#. frmMain..pnTop..gbInput..lbInputOpts..Caption\r
#: main.dfm:68\r
#. frmMain..pnTop..gbOutput..lbOutputOpts..Caption\r
-#: main.dfm:233\r
+#: main.dfm:229\r
#. frmMain..ActionList1..acOptionsSourceFormat..Category\r
-#: main.dfm:1428\r
+#: main.dfm:1418\r
#. frmMain..ActionList1..acOptionsTargetFormat..Category\r
-#: main.dfm:1433\r
+#: main.dfm:1423\r
#. frmMain..ActionList1..acOptionsEnableCharactersetTransformation..Category\r
-#: main.dfm:1447\r
+#: main.dfm:1437\r
msgid "Options"\r
msgstr ""\r
\r
#. frmMain..pnTop..gbInput..lbInputFormat..Caption\r
#: main.dfm:76\r
#. frmMain..pnTop..gbOutput..lbOutputFormat..Caption\r
-#: main.dfm:263\r
+#: main.dfm:259\r
msgid "Format"\r
msgstr ""\r
\r
#. frmMain..pnTop..gbInput..lbInputFile..Caption\r
#: main.dfm:83\r
#. frmMain..pnTop..gbOutput..lbOutputFile..Caption\r
-#: main.dfm:270\r
+#: main.dfm:266\r
#. frmMain..ActionList1..acFileExit..Category\r
-#: main.dfm:1409\r
+#: main.dfm:1399\r
#. frmMain..ActionList1..acFileClearMemo..Category\r
-#: main.dfm:1438\r
+#: main.dfm:1428\r
#. frmMain..ActionList1..acFileOutputToScreen..Category\r
-#: main.dfm:1453\r
+#: main.dfm:1443\r
#. frmMain..ActionList1..acFileChangeLanguage..Category\r
-#: main.dfm:1465\r
+#: main.dfm:1455\r
#. frmMain..ActionList1..acFileExportCSV..Category\r
-#: main.dfm:1470\r
-#: main.pas:839\r
-#: main.pas:893\r
+#: main.dfm:1460\r
+#: main.pas:865\r
+#: main.pas:919\r
msgid "File"\r
msgstr ""\r
\r
#. frmMain..pnTop..gbInput..chbInputDevice..Caption\r
#: main.dfm:115\r
#. frmMain..pnTop..gbOutput..chbOutputDevice..Caption\r
-#: main.dfm:303\r
+#: main.dfm:299\r
msgid "Device"\r
msgstr ""\r
\r
#. frmMain..pnTop..gbInput..cbInputLang....Items.Strings\r
#: main.dfm:152\r
#. frmMain..pnTop..gbOutput..cbOutputLang....Items.Strings\r
-#: main.dfm:367\r
+#: main.dfm:363\r
msgid "- default -"\r
msgstr ""\r
\r
msgstr ""\r
\r
#. frmMain..pnTop..gbInput..cbInputFormatDevice..Hint\r
-#: main.dfm:198\r
+#: main.dfm:194\r
msgid "Format for input from device"\r
msgstr ""\r
\r
#. frmMain..pnTop..gbInput..cbInputFormat..Hint\r
-#: main.dfm:212\r
+#: main.dfm:208\r
msgid "Format for input from file"\r
msgstr ""\r
\r
#. frmMain..pnTop..gbOutput..Caption\r
-#: main.dfm:226\r
-#: main.pas:270\r
-#: main.pas:275\r
-#: main.pas:469\r
-#: main.pas:896\r
+#: main.dfm:222\r
+#: main.pas:271\r
+#: main.pas:276\r
+#: main.pas:476\r
+#: main.pas:922\r
msgid "Output"\r
msgstr ""\r
\r
#. frmMain..pnTop..gbOutput..sbSaveFile..Hint\r
-#: main.dfm:277\r
+#: main.dfm:273\r
msgid "Start the file save dialog"\r
msgstr ""\r
\r
#. frmMain..pnTop..gbOutput..chbOutputDevice..Hint\r
-#: main.dfm:300\r
+#: main.dfm:296\r
msgid "Write data to device instead to file"\r
msgstr ""\r
\r
#. frmMain..pnTop..gbOutput..cbOutputFormatDevice..Hint\r
-#: main.dfm:313\r
+#: main.dfm:309\r
msgid "Format for ouput to device"\r
msgstr ""\r
\r
#. frmMain..pnTop..gbOutput..edOutputOpts..Hint\r
-#: main.dfm:325\r
+#: main.dfm:321\r
msgid "Options for the selected output format"\r
msgstr ""\r
\r
#. frmMain..pnTop..gbOutput..cbOutputFormat..Hint\r
-#: main.dfm:336\r
+#: main.dfm:332\r
msgid "Format for output to file"\r
msgstr ""\r
\r
#. frmMain..pnTop..gbOutput..edOutputFile..Hint\r
-#: main.dfm:349\r
+#: main.dfm:345\r
msgid "Write data to given filename"\r
msgstr ""\r
\r
#. frmMain..pnTop..gbOutput..cbOutputLang..Hint\r
-#: main.dfm:361\r
+#: main.dfm:357\r
msgid "Characterset for output data"\r
msgstr ""\r
\r
#. frmMain..pnTop..gbOutput..cbOutputDevice..Hint\r
-#: main.dfm:394\r
+#: main.dfm:390\r
msgid "Write data to device ..."\r
msgstr ""\r
\r
#. frmMain..pnBottom..lbWhat..Caption\r
-#: main.dfm:423\r
+#: main.dfm:415\r
msgid "What ?"\r
msgstr ""\r
\r
#. frmMain..pnBottom..cbWaypoints..Hint\r
-#: main.dfm:562\r
+#: main.dfm:554\r
msgid "Process waypoint information"\r
msgstr ""\r
\r
#. frmMain..pnBottom..cbRoutes..Hint\r
-#: main.dfm:576\r
+#: main.dfm:568\r
msgid "Process route information"\r
msgstr ""\r
\r
#. frmMain..pnBottom..cbRoutes..Caption\r
-#: main.dfm:577\r
+#: main.dfm:569\r
msgid "&Routes"\r
msgstr ""\r
\r
#. frmMain..pnBottom..cbTracks..Hint\r
-#: main.dfm:588\r
+#: main.dfm:580\r
msgid "Process track information"\r
msgstr ""\r
\r
#. frmMain..pnBottom..btnFilter..Caption\r
-#: main.dfm:602\r
+#: main.dfm:594\r
#. frmMain..ActionList1..acFilterSelect..Caption\r
-#: main.dfm:1403\r
+#: main.dfm:1393\r
msgid "&Filter"\r
msgstr ""\r
\r
#. frmMain..pnBottom..btnProcess..Hint\r
-#: main.dfm:646\r
+#: main.dfm:638\r
msgid "Start data conversion"\r
msgstr ""\r
\r
#. frmMain..pnBottom..btnProcess..Caption\r
-#: main.dfm:649\r
+#: main.dfm:641\r
#. frmMain..ActionList1..acConvert..Caption\r
-#: main.dfm:1396\r
+#: main.dfm:1386\r
msgid "let's go"\r
msgstr ""\r
\r
#. frmMain..OpenDialog..Filter\r
-#: main.dfm:711\r
+#: main.dfm:701\r
msgid "Garmin Mapsource mps|*.mps|All files|*.*"\r
msgstr ""\r
\r
#. frmMain..SaveDialog..Filter\r
-#: main.dfm:717\r
+#: main.dfm:707\r
msgid "All file(s)|*.*|Garmin MapSource mps|*.mps"\r
msgstr ""\r
\r
#. frmMain..ActionList1..acConvert..Category\r
-#: main.dfm:1395\r
+#: main.dfm:1385\r
#. frmMain..ActionList1..acFilterSelect..Category\r
-#: main.dfm:1402\r
+#: main.dfm:1392\r
msgid "Babel"\r
msgstr ""\r
\r
#. frmMain..ActionList1..acFilterSelect..Hint\r
-#: main.dfm:1404\r
+#: main.dfm:1394\r
msgid "Filter incomming data before writing them to file or "\r
"device"\r
msgstr ""\r
\r
#. frmMain..ActionList1..acFileExit..Caption\r
-#: main.dfm:1410\r
+#: main.dfm:1400\r
msgid "E&xit"\r
msgstr ""\r
\r
#. frmMain..ActionList1..acHelpAbout..Category\r
-#: main.dfm:1414\r
+#: main.dfm:1404\r
#. frmMain..ActionList1..acHelpIntro..Category\r
-#: main.dfm:1419\r
+#: main.dfm:1409\r
#. frmMain..ActionList1..acHelpReadme..Category\r
-#: main.dfm:1423\r
+#: main.dfm:1413\r
msgid "Help"\r
msgstr ""\r
\r
#. frmMain..ActionList1..acHelpAbout..Caption\r
-#: main.dfm:1415\r
+#: main.dfm:1405\r
msgid "&About"\r
msgstr ""\r
\r
#. frmMain..ActionList1..acHelpIntro..Caption\r
-#: main.dfm:1420\r
+#: main.dfm:1410\r
msgid "&Intro"\r
msgstr ""\r
\r
#. frmMain..ActionList1..acHelpReadme..Caption\r
-#: main.dfm:1424\r
+#: main.dfm:1414\r
#. frmReadme..Caption\r
#: readme.dfm:6\r
msgid "GPSBabel README"\r
msgstr ""\r
\r
#. frmMain..ActionList1..acOptionsSourceFormat..Caption\r
-#: main.dfm:1429\r
+#: main.dfm:1419\r
msgid "... for source format"\r
msgstr ""\r
\r
#. frmMain..ActionList1..acOptionsTargetFormat..Caption\r
-#: main.dfm:1434\r
+#: main.dfm:1424\r
msgid "... for target format"\r
msgstr ""\r
\r
#. frmMain..ActionList1..acFileClearMemo..Caption\r
-#: main.dfm:1439\r
+#: main.dfm:1429\r
msgid "Clear output"\r
msgstr ""\r
\r
#. frmMain..ActionList1..acFileClearMemo..Hint\r
-#: main.dfm:1440\r
+#: main.dfm:1430\r
msgid "Clear messages"\r
msgstr ""\r
\r
#. frmMain..ActionList1..acOptionsEnableCharactersetTransformation..Caption\r
-#: main.dfm:1448\r
+#: main.dfm:1438\r
msgid "Enable characterset transformation"\r
msgstr ""\r
\r
#. frmMain..ActionList1..acFileOutputToScreen..Caption\r
-#: main.dfm:1454\r
+#: main.dfm:1444\r
msgid "Output to screen"\r
msgstr ""\r
\r
#. frmMain..ActionList1..acFileChangeLanguage..Caption\r
-#: main.dfm:1466\r
+#: main.dfm:1456\r
msgid "Change language"\r
msgstr ""\r
\r
#. frmMain..ActionList1..acFileExportCSV..Caption\r
-#: main.dfm:1471\r
+#: main.dfm:1461\r
msgid "Export gpsbabel.csv (unicode)"\r
msgstr ""\r
\r
#. frmMain..MainMenu1..mnuFile..Caption\r
-#: main.dfm:1479\r
+#: main.dfm:1469\r
msgid "&File"\r
msgstr ""\r
\r
#. frmMain..MainMenu1..mnuFile..File1..Caption\r
-#: main.dfm:1487\r
+#: main.dfm:1477\r
msgid "Export"\r
msgstr ""\r
\r
#. frmMain..MainMenu1..mnuOptions..Caption\r
-#: main.dfm:1508\r
+#: main.dfm:1498\r
msgid "&Options"\r
msgstr ""\r
\r
#. frmMain..MainMenu1..mnuOptions..mnuSynthesizeShortNames..Caption\r
-#: main.dfm:1510\r
+#: main.dfm:1500\r
msgid "Synthesize shortnames"\r
msgstr ""\r
\r
#. frmMain..MainMenu1..mnuOptions..mnuSynthesizeShortNames....Hint\r
-#: main.dfm:1513\r
+#: main.dfm:1503\r
msgid "Ignore shortnames from source data and synthesize them from "\r
"description or notes"\r
msgstr ""\r
\r
#. frmMain..MainMenu1..mnuOptions..mnuOptionsForceDataType..Caption\r
-#: main.dfm:1517\r
+#: main.dfm:1507\r
msgid "Force selected GPS data types (nuketypes "\r
"filter)"\r
msgstr ""\r
\r
#. frmMain..MainMenu1..mnuHelp..Caption\r
-#: main.dfm:1558\r
+#: main.dfm:1548\r
msgid "&Help"\r
msgstr ""\r
\r
msgstr ""\r
\r
#: about.pas:87\r
-msgid "German by Olaf Klein"\r
+#: select.pas:81\r
+msgid "German"\r
msgstr ""\r
\r
#: about.pas:88\r
-msgid "French by Lilian Morinon"\r
+#: select.pas:83\r
+msgid "French"\r
+msgstr ""\r
+\r
+#: about.pas:89\r
+#: select.pas:82\r
+msgid "Spanish"\r
+msgstr ""\r
+\r
+#: about.pas:90\r
+#: select.pas:85\r
+msgid "Hungarian"\r
msgstr ""\r
\r
-#: about.pas:131\r
+#: about.pas:132\r
msgid "Please have a look at the file README.GUI.\n"\r
"\nThere you will find all information you need to\n"\r
"get GPSBabelGUI working in your own "\r
"language."\r
msgstr ""\r
\r
-#: filter.pas:199\r
+#: filter.pas:180\r
+#: filter.pas:181\r
+#: filter.pas:184\r
+#: filter.pas:185\r
+msgid "Waypoints"\r
+msgstr ""\r
+\r
+#: filter.pas:180\r
+#: filter.pas:181\r
+#: filter.pas:182\r
+#: filter.pas:183\r
+msgid "Routes"\r
+msgstr ""\r
+\r
+#: filter.pas:182\r
+#: filter.pas:183\r
+#: filter.pas:184\r
+#: filter.pas:185\r
+msgid "Tracks"\r
+msgstr ""\r
+\r
+#: filter.pas:224\r
msgid "Feet"\r
msgstr ""\r
\r
-#: filter.pas:200\r
+#: filter.pas:225\r
msgid "Meter"\r
msgstr ""\r
\r
-#: filter.pas:203\r
+#: filter.pas:228\r
msgid "Miles"\r
msgstr ""\r
\r
-#: filter.pas:204\r
+#: filter.pas:229\r
msgid "Kilometer"\r
msgstr ""\r
\r
-#: filter.pas:214\r
+#: filter.pas:239\r
msgid "Not supported by gpsbabel.exe, release "\r
"%s!"\r
msgstr ""\r
\r
-#: filter.pas:250\r
+#: filter.pas:288\r
msgid "Value (%s) out of range (%g to %g)!"\r
msgstr ""\r
\r
-#: filter.pas:530\r
-#: options.pas:654\r
+#: filter.pas:593\r
+#: options.pas:661\r
msgid "Discard changes?"\r
msgstr ""\r
\r
-#: main.pas:243\r
+#: main.pas:244\r
msgid "Internal development release"\r
msgstr ""\r
\r
-#: main.pas:245\r
+#: main.pas:246\r
msgid "BETA"\r
msgstr ""\r
\r
-#: main.pas:247\r
+#: main.pas:248\r
msgid "Private release"\r
msgstr ""\r
\r
-#: main.pas:249\r
+#: main.pas:250\r
msgid "Special release"\r
msgstr ""\r
\r
-#: main.pas:340\r
+#: main.pas:342\r
msgid "The file \"gpsbabel.exe\" found in current directory is too "\r
"old!"\r
msgstr ""\r
\r
-#: main.pas:409\r
-#: main.pas:543\r
+#: main.pas:416\r
+#: main.pas:550\r
msgid "All files|*.*"\r
msgstr ""\r
\r
-#: main.pas:477\r
+#: main.pas:484\r
msgid "Select and edit options for \"%s\""\r
msgstr ""\r
\r
-#: main.pas:481\r
+#: main.pas:488\r
msgid "No options available for \"%s\""\r
msgstr ""\r
\r
-#: main.pas:590\r
+#. s := s + '-1';\r
+#: main.pas:603\r
msgid "File %s not found."\r
msgstr ""\r
\r
-#: main.pas:648\r
+#: main.pas:664\r
msgid "File \"%s\" exists ! Overwrite ?"\r
msgstr ""\r
\r
-#: main.pas:649\r
+#: main.pas:665\r
msgid "Warning"\r
msgstr ""\r
\r
-#: main.pas:682\r
+#: main.pas:698\r
msgid "Could not run \"gpsbabel.exe\"!"\r
msgstr ""\r
\r
-#: main.pas:691\r
+#: main.pas:707\r
msgid "Sorry, gpsbabel.exe reported problems!"\r
msgstr ""\r
\r
-#: main.pas:693\r
+#: main.pas:709\r
msgid "Converted successfully from \"%s\" to "\r
"\"%s\"."\r
msgstr ""\r
\r
-#: main.pas:794\r
+#: main.pas:820\r
msgid "GPSBabel, version %s"\r
msgstr ""\r
\r
-#: main.pas:828\r
-#: main.pas:883\r
+#: main.pas:854\r
+#: main.pas:909\r
msgid "Port"\r
msgstr ""\r
\r
-#: main.pas:980\r
+#: main.pas:1013\r
msgid "Options for \"%s\""\r
msgstr ""\r
\r
-#: main.pas:1169\r
-#: main.pas:1239\r
+#: main.pas:1203\r
+#: main.pas:1273\r
msgid "Choose language"\r
msgstr ""\r
\r
-#: main.pas:1169\r
+#: main.pas:1203\r
msgid "for GUIBabelGUI"\r
msgstr ""\r
\r
-#: main.pas:1239\r
+#: main.pas:1273\r
msgid "for export"\r
msgstr ""\r
\r
#. override;\r
-#: options.pas:143\r
+#: options.pas:147\r
msgid "Be aware, that most options are made for the output side. "\r
msgstr ""\r
\r
-#: options.pas:144\r
+#: options.pas:148\r
msgid "Currently we don't have a flag which tells us which direction is used "\r
"by the options."\r
msgstr ""\r
\r
-#: options.pas:204\r
+#: options.pas:208\r
msgid "Short \"%s\""\r
msgstr ""\r
\r
-#: options.pas:325\r
+#: options.pas:332\r
msgid "Invalid line format!"\r
msgstr ""\r
\r
-#: options.pas:346\r
+#: options.pas:353\r
msgid "Unknown option \"%s\"!"\r
msgstr ""\r
\r
-#: utils.pas:113\r
+#: select.pas:84\r
+msgid "English"\r
+msgstr ""\r
+\r
+#: utils.pas:119\r
msgid "Error WINAPI: Could not create \"NamedPipe\"!"\r
msgstr ""\r
\r
-#: utils.pas:118\r
+#: utils.pas:124\r
msgid "\"gpsbabel.exe\" not found!!!"\r
msgstr ""\r
\r
#. dwCreationFlags, // creation flags\r
-#: utils.pas:137\r
+#: utils.pas:143\r
msgid "Could not run \"gpsbabel.exe\" (Error "\r
"%d)!"\r
msgstr ""\r
\r
-#: utils.pas:165\r
+#: utils.pas:176\r
msgid "\"gpsbabel.exe\" returned error 0x%x (%d)"\r
msgstr ""\r
\r
msgid "Append icon_descr to description"\r
msgstr ""\r
\r
+msgid "Append realtime positioning data to the output file instead of truncating"\r
+msgstr ""\r
+\r
msgid "Base URL for link tag in output"\r
msgstr ""\r
\r
msgid "Default icon name"\r
msgstr ""\r
\r
+msgid "Default location"\r
+msgstr ""\r
+\r
msgid "Default speed for waypoints (knots/hr)"\r
msgstr ""\r
\r
msgid "Include groundspeak logs if present"\r
msgstr ""\r
\r
+msgid "Include major turn points (with description) from calculated route"\r
+msgstr ""\r
+\r
msgid "Include only via stations in route"\r
msgstr ""\r
\r
msgid "Use shortname instead of description"\r
msgstr ""\r
\r
-msgid "Version of gdb file to generate (1,2)"\r
+msgid "Version of gdb file to generate (1..3)"\r
msgstr ""\r
\r
msgid "Version of mapsource file to generate (3,4,5)"\r
msgid "Width of lines, in pixels"\r
msgstr ""\r
\r
+msgid "Write position using this grid."\r
+msgstr ""\r
+\r
msgid "Write timestamps with offset x to UTC time"\r
msgstr ""\r
\r
# Doesn't have any letters\r
#. frmMain..MainMenu1..mnuFile..N5..Caption\r
-#: main.dfm:1495\r
+#: main.dfm:1485\r
#. frmMain..MainMenu1..mnuFile..N3..Caption\r
-#: main.dfm:1501\r
+#: main.dfm:1491\r
#. frmMain..MainMenu1..mnuOptions..N2..Caption\r
-#: main.dfm:1525\r
+#: main.dfm:1515\r
#. frmMain..MainMenu1..mnuOptions..N4..Caption\r
-#: main.dfm:1537\r
+#: main.dfm:1527\r
#. frmMain..MainMenu1..mnuHelp..N1..Caption\r
-#: main.dfm:1566\r
+#: main.dfm:1556\r
msgid "-"\r
msgstr ""\r
\r
msgid "+/-"\r
msgstr ""\r
\r
+# Doesn't look like text\r
+#. frmFilter..gbTracks..cobGPSfixes....Items.Strings\r
+#: filter.dfm:342\r
+msgid "2d"\r
+msgstr ""\r
+\r
+# Doesn't look like text\r
+#. frmFilter..gbTracks..cobGPSfixes....Items.Strings\r
+#: filter.dfm:341\r
+msgid "3d"\r
+msgstr ""\r
+\r
# Doesn't have any letters\r
#. frmFilter..gbRoutes..edRoutesSimplifyMaxPoints..Text\r
#: filter.dfm:344\r
msgid "50 "\r
msgstr ""\r
\r
-#. frmFilter..gbTracks..edTrackTitle..Text\r
+#. frmFilter..gbTracks..edTrackTitleValue..Text\r
#: filter.dfm:88\r
msgid "ACTIVE LOG # %Y%m%d"\r
msgstr ""\r
#. frmMain..pnTop..gbInput..cbInputLang....Items.Strings\r
#: main.dfm:153\r
#. frmMain..pnTop..gbOutput..cbOutputLang....Items.Strings\r
-#: main.dfm:368\r
+#: main.dfm:364\r
msgid "ASCII"\r
msgstr ""\r
\r
msgstr ""\r
\r
#. frmMain..ActionList1..acDebugCreatePo..Caption\r
-#: main.dfm:1459\r
+#: main.dfm:1449\r
msgid "Create options.po"\r
msgstr ""\r
\r
#. frmMain..ActionList1..acDebugCreatePo..Category\r
-#: main.dfm:1458\r
+#: main.dfm:1448\r
#. frmMain..MainMenu1..mnuDebug..Caption\r
-#: main.dfm:1546\r
+#: main.dfm:1536\r
msgid "Debug"\r
msgstr ""\r
\r
# Seems like a Font.Name extract\r
#. frmMain..memoOutput..Font.Name\r
-#: main.dfm:678\r
+#: main.dfm:670\r
msgid "Fixedsys"\r
msgstr ""\r
\r
#. frmMain..Caption\r
#: main.dfm:6\r
#. Programmer's name for it: SGPSBabelTitle\r
-#: common.pas:32\r
+#: common.pas:35\r
msgid "GPSBabelGUI-2"\r
msgstr ""\r
\r
msgid "GPSBabelGUI-2:"\r
msgstr ""\r
\r
+#. frmMain..stbMain......Text\r
+#: main.dfm:693\r
#. Programmer's name for it: SGPSBabelURL\r
-#: common.pas:31\r
+#: common.pas:34\r
msgid "http://www.gpsbabel.org"\r
msgstr ""\r
\r
#. frmMain..pnTop..gbInput..cbInputLang....Items.Strings\r
#: main.dfm:156\r
#. frmMain..pnTop..gbOutput..cbOutputLang....Items.Strings\r
-#: main.dfm:371\r
+#: main.dfm:367\r
msgid "ISO-8859-1"\r
msgstr ""\r
\r
#. frmMain..pnTop..gbInput..cbInputLang....Items.Strings\r
#: main.dfm:165\r
#. frmMain..pnTop..gbOutput..cbOutputLang....Items.Strings\r
-#: main.dfm:380\r
+#: main.dfm:376\r
msgid "ISO-8859-10"\r
msgstr ""\r
\r
#. frmMain..pnTop..gbInput..cbInputLang....Items.Strings\r
#: main.dfm:166\r
#. frmMain..pnTop..gbOutput..cbOutputLang....Items.Strings\r
-#: main.dfm:381\r
+#: main.dfm:377\r
msgid "ISO-8859-13"\r
msgstr ""\r
\r
#. frmMain..pnTop..gbInput..cbInputLang....Items.Strings\r
#: main.dfm:167\r
#. frmMain..pnTop..gbOutput..cbOutputLang....Items.Strings\r
-#: main.dfm:382\r
+#: main.dfm:378\r
msgid "ISO-8859-14"\r
msgstr ""\r
\r
#. frmMain..pnTop..gbInput..cbInputLang....Items.Strings\r
#: main.dfm:168\r
#. frmMain..pnTop..gbOutput..cbOutputLang....Items.Strings\r
-#: main.dfm:383\r
+#: main.dfm:379\r
msgid "ISO-8859-15"\r
msgstr ""\r
\r
#. frmMain..pnTop..gbInput..cbInputLang....Items.Strings\r
#: main.dfm:157\r
#. frmMain..pnTop..gbOutput..cbOutputLang....Items.Strings\r
-#: main.dfm:372\r
+#: main.dfm:368\r
msgid "ISO-8859-2"\r
msgstr ""\r
\r
#. frmMain..pnTop..gbInput..cbInputLang....Items.Strings\r
#: main.dfm:158\r
#. frmMain..pnTop..gbOutput..cbOutputLang....Items.Strings\r
-#: main.dfm:373\r
+#: main.dfm:369\r
msgid "ISO-8859-3"\r
msgstr ""\r
\r
#. frmMain..pnTop..gbInput..cbInputLang....Items.Strings\r
#: main.dfm:159\r
#. frmMain..pnTop..gbOutput..cbOutputLang....Items.Strings\r
-#: main.dfm:374\r
+#: main.dfm:370\r
msgid "ISO-8859-4"\r
msgstr ""\r
\r
#. frmMain..pnTop..gbInput..cbInputLang....Items.Strings\r
#: main.dfm:160\r
#. frmMain..pnTop..gbOutput..cbOutputLang....Items.Strings\r
-#: main.dfm:375\r
+#: main.dfm:371\r
msgid "ISO-8859-5"\r
msgstr ""\r
\r
#. frmMain..pnTop..gbInput..cbInputLang....Items.Strings\r
#: main.dfm:161\r
#. frmMain..pnTop..gbOutput..cbOutputLang....Items.Strings\r
-#: main.dfm:376\r
+#: main.dfm:372\r
msgid "ISO-8859-6"\r
msgstr ""\r
\r
#. frmMain..pnTop..gbInput..cbInputLang....Items.Strings\r
#: main.dfm:162\r
#. frmMain..pnTop..gbOutput..cbOutputLang....Items.Strings\r
-#: main.dfm:377\r
+#: main.dfm:373\r
msgid "ISO-8859-7"\r
msgstr ""\r
\r
#. frmMain..pnTop..gbInput..cbInputLang....Items.Strings\r
#: main.dfm:163\r
#. frmMain..pnTop..gbOutput..cbOutputLang....Items.Strings\r
-#: main.dfm:378\r
+#: main.dfm:374\r
msgid "ISO-8859-8"\r
msgstr ""\r
\r
#. frmMain..pnTop..gbInput..cbInputLang....Items.Strings\r
#: main.dfm:164\r
#. frmMain..pnTop..gbOutput..cbOutputLang....Items.Strings\r
-#: main.dfm:379\r
+#: main.dfm:375\r
msgid "ISO-8859-9"\r
msgstr ""\r
\r
#. frmMain..pnTop..gbInput..cbInputLang....Items.Strings\r
#: main.dfm:169\r
#. frmMain..pnTop..gbOutput..cbOutputLang....Items.Strings\r
-#: main.dfm:384\r
+#: main.dfm:380\r
msgid "KOI-8"\r
msgstr ""\r
\r
#. frmMain..pnTop..gbInput..cbInputLang....Items.Strings\r
#: main.dfm:170\r
#. frmMain..pnTop..gbOutput..cbOutputLang....Items.Strings\r
-#: main.dfm:385\r
+#: main.dfm:381\r
msgid "MACROMAN"\r
msgstr ""\r
\r
#. frmMain..Font.Name\r
#: main.dfm:13\r
#. frmMain..pnBottom..lbWhat..Font.Name\r
-#: main.dfm:427\r
+#: main.dfm:419\r
#. frmMain..stbMain..Font.Name\r
-#: main.dfm:693\r
+#: main.dfm:685\r
#. frmOptions..Font.Name\r
#: options.dfm:14\r
#. frmOptions..pnOptions..Font.Name\r
-#: options.dfm:68\r
+#: options.dfm:69\r
#. frmOptions..pnOptions..mmWarning..Font.Name\r
-#: options.dfm:85\r
+#: options.dfm:86\r
#. frmReadme..Font.Name\r
#: readme.dfm:11\r
#. frmSelect..Font.Name\r
#. frmMain..pnTop..gbInput..cbInputLang....Items.Strings\r
#: main.dfm:154\r
#. frmMain..pnTop..gbOutput..cbOutputLang....Items.Strings\r
-#: main.dfm:369\r
+#: main.dfm:365\r
msgid "MS-ANSI"\r
msgstr ""\r
\r
#. frmMain..pnTop..gbInput..cbInputDevice....Items.Strings\r
#: main.dfm:183\r
#. frmMain..pnTop..gbOutput..cbOutputDevice....Items.Strings\r
-#: main.dfm:398\r
+#: main.dfm:394\r
msgid "USB"\r
msgstr ""\r
\r
#. frmMain..pnTop..gbInput..cbInputLang....Items.Strings\r
#: main.dfm:155\r
#. frmMain..pnTop..gbOutput..cbOutputLang....Items.Strings\r
-#: main.dfm:370\r
+#: main.dfm:366\r
msgid "UTF-8"\r
msgstr ""\r
\r
msgstr ""\r
"Project-Id-Version: GPSBabelGUI-2\n"\r
"POT-Creation-Date: 2005-08-12 14:50\n"\r
-"PO-Revision-Date: 2006-11-01 20:12+0100\n"\r
-"Last-Translator: Olaf Klein <o.b.klein@gpsbabel.org>\n"\r
+"PO-Revision-Date: 2007-05-01 19:38+0100\n"\r
+"Last-Translator: Olaf Klein <o.b.klein@t-online.de>\n"\r
"Language-Team: <o.b.klein@gpsbabel.org>\n"\r
"MIME-Version: 1.0\n"\r
"Content-Type: text/plain; charset=UTF-8\n"\r
#. frmAbout..pnClient..pnCenter..lbCopyRight..Caption\r
#: about.dfm:114\r
msgid "Copyright (C) 2005,2006 Olaf Klein (o.b.klein@gpsbabel.org)"\r
-msgstr ""\r
+msgstr "Copyright (C) 2005,2006 Olaf Klein (o.b.klein@gpsbabel.org)"\r
\r
#. frmAbout..pnClient..pnCenter..lbMoreInfo..Caption\r
#: about.dfm:121\r
#: about.pas:87\r
#: about.pas:88\r
#: about.pas:89\r
+#: about.pas:90\r
msgid "by"\r
msgstr "von"\r
\r
msgid "TZ"\r
msgstr "\"TZ\""\r
\r
-#. frmFilter..gbTracks..cbTrackFixes..Hint\r
+#. frmFilter..gbTracks..cbGPSfix..Hint\r
#: filter.dfm:306\r
msgid "Synthesize GPS fixes (PPS, DGPS, 3D, 2D)"\r
msgstr ""\r
\r
-#. frmFilter..gbTracks..cbTrackFixes..Caption\r
+#. frmFilter..gbTracks..cbGPSfix..Caption\r
#: filter.dfm:307\r
msgid "GPS fixes"\r
msgstr ""\r
\r
#. frmFilter..gbTracks..cbTrackCourse..Hint\r
-#: filter.dfm:315\r
+#: filter.dfm:316\r
msgid "Synthesize course values"\r
msgstr "Generiere Kurs-Werte"\r
\r
#. frmFilter..gbTracks..cbTrackCourse..Caption\r
-#: filter.dfm:316\r
+#: filter.dfm:317\r
msgid "Course"\r
msgstr "Kurs"\r
\r
#. frmFilter..gbTracks..cbTrackSpeed..Hint\r
-#: filter.dfm:324\r
+#: filter.dfm:325\r
msgid "Synthesize speed values"\r
msgstr "Generiere Geschwindigkeitswerte"\r
\r
#. frmFilter..gbTracks..cbTrackSpeed..Caption\r
-#: filter.dfm:325\r
+#: filter.dfm:326\r
msgid "Speed"\r
msgstr "Geschwindigkeit"\r
\r
+#. frmFilter..gbTracks..cobGPSfixes....Items.Strings\r
+#: filter.dfm:338\r
+msgid "none"\r
+msgstr ""\r
+\r
+#. frmFilter..gbTracks..cobGPSfixes....Items.Strings\r
+#: filter.dfm:339\r
+msgid "pps"\r
+msgstr ""\r
+\r
+#. frmFilter..gbTracks..cobGPSfixes....Items.Strings\r
+#: filter.dfm:340\r
+msgid "dgps"\r
+msgstr ""\r
+\r
#. frmFilter..gbRoutes..Caption\r
-#: filter.dfm:335\r
+#: filter.dfm:352\r
msgid "&Routes && Tracks"\r
msgstr "&Routen && Tracks"\r
\r
#. frmFilter..gbRoutes..lbRouteSimplifyCount..Caption\r
-#: filter.dfm:343\r
+#: filter.dfm:360\r
msgid "limit to"\r
msgstr "auf maximal"\r
\r
#. frmFilter..gbRoutes..lbRouteSimplifyText..Caption\r
-#: filter.dfm:351\r
+#: filter.dfm:368\r
msgid "Points"\r
msgstr "Punkte"\r
\r
#. frmFilter..gbRoutes..cbRouteSimplify..Hint\r
-#: filter.dfm:358\r
+#: filter.dfm:375\r
msgid "Simplify routes and tracks by limited number of points"\r
msgstr "Limitiert die Anzahl von Wegpunkten in Routen und Tracks"\r
\r
#. frmFilter..gbRoutes..cbRouteSimplify..Caption\r
-#: filter.dfm:359\r
+#: filter.dfm:376\r
msgid "Simplify"\r
msgstr "Vereinfachen"\r
\r
#. frmFilter..gbRoutes..edRoutesSimplifyMaxPoints..Hint\r
-#: filter.dfm:368\r
+#: filter.dfm:385\r
msgid "Upper limit of points for routes and tracks"\r
msgstr "Maximale Anzahl an Punkten innerhalb von Routen und Tracks"\r
\r
#. frmFilter..gbRoutes..cbReverse..Hint\r
-#: filter.dfm:390\r
+#: filter.dfm:407\r
msgid "Reverse routes and tracks"\r
msgstr "Reihenfolge von Wegpunkten in Routen und Tracks umdrehen"\r
\r
#. frmFilter..gbRoutes..cbReverse..Caption\r
-#: filter.dfm:391\r
+#: filter.dfm:408\r
msgid "Reverse"\r
msgstr "Umdrehen"\r
\r
#. frmFilter..pnBottom..btnOK..Caption\r
-#: filter.dfm:408\r
+#: filter.dfm:425\r
msgid "OK"\r
msgstr "OK"\r
\r
#. frmFilter..pnBottom..BitBtn1..Caption\r
-#: filter.dfm:444\r
+#: filter.dfm:461\r
msgid "File based filters"\r
msgstr "Datei basierende Filter"\r
\r
#. frmFilter..gbWaypoints..Caption\r
#. frmMain..pnBottom..cbWaypoints..Caption\r
-#: filter.dfm:473\r
+#: filter.dfm:490\r
#: main.dfm:555\r
msgid "&Waypoints"\r
msgstr "&Wegpunkte"\r
\r
#. frmFilter..gbWaypoints..lbWayptRadiusLat..Caption\r
-#: filter.dfm:482\r
+#: filter.dfm:499\r
msgid "Latitude"\r
msgstr "Breitengrad"\r
\r
#. frmFilter..gbWaypoints..lbWayptRadiusLon..Caption\r
-#: filter.dfm:490\r
+#: filter.dfm:507\r
msgid "Longitude"\r
msgstr "Längengrad"\r
\r
#. frmFilter..gbWaypoints..cbWayptMergeDupLoc..Hint\r
-#: filter.dfm:498\r
+#: filter.dfm:515\r
msgid "Merge waypoints with duplicate locations"\r
msgstr "Fasse Wegpunkte mit gleichen Koordinaten zusammen"\r
\r
#. frmFilter..gbWaypoints..cbWayptMergeDupLoc..Caption\r
-#: filter.dfm:499\r
+#: filter.dfm:516\r
msgid "locations"\r
msgstr "Koordinaten"\r
\r
#. frmFilter..gbWaypoints..cbWayptMergeDupNames..Hint\r
-#: filter.dfm:508\r
+#: filter.dfm:525\r
msgid "Merge waypoints with duplicate \"short name\""\r
msgstr "Fasse Wegpunkte mit gleichem Namen zusammen"\r
\r
#. frmFilter..gbWaypoints..cbWayptMergeDupNames..Caption\r
-#: filter.dfm:509\r
+#: filter.dfm:526\r
msgid "\"short names\""\r
msgstr "\"Kurznamen\""\r
\r
#. frmFilter..gbWaypoints..cbWayptMergeDistance..Hint\r
-#: filter.dfm:518\r
+#: filter.dfm:535\r
msgid "Merge waypoints separated by less then"\r
msgstr "Fasse alle Wegpunkte zusammen, die weniger als ... auseinander liegen"\r
\r
#. frmFilter..gbWaypoints..cbWayptMergeDistance..Caption\r
-#: filter.dfm:519\r
+#: filter.dfm:536\r
msgid "Position"\r
msgstr "Position"\r
\r
#. frmFilter..gbWaypoints..cbWayptSort..Hint\r
-#: filter.dfm:547\r
+#: filter.dfm:564\r
msgid "Sort waypoints by \"short name\" or by description"\r
msgstr "Sortiere Wegpunkte nach Name oder Beschreibung"\r
\r
#. frmFilter..gbWaypoints..cbWayptSort..Caption\r
-#: filter.dfm:548\r
+#: filter.dfm:565\r
msgid "Sort"\r
msgstr "Sortieren"\r
\r
#. frmFilter..gbWaypoints..cbWayptMergeDups..Hint\r
-#: filter.dfm:556\r
+#: filter.dfm:573\r
msgid "Merge duplicate waypoints"\r
msgstr "Entferne doppelte Wegpunkte"\r
\r
#. frmFilter..gbWaypoints..cbWayptMergeDups..Caption\r
-#: filter.dfm:557\r
+#: filter.dfm:574\r
msgid "Duplicates"\r
msgstr "Duplikate"\r
\r
#. frmFilter..gbWaypoints..cbWayptRadius..Hint\r
-#: filter.dfm:566\r
+#: filter.dfm:583\r
msgid "Include points based on their proximity to central point"\r
msgstr "Übernehme nur Punkte mit Entfernung von maximal ... um Mittelpunkt ..."\r
\r
#. frmFilter..gbWaypoints..cbWayptRadius..Caption\r
-#: filter.dfm:567\r
+#: filter.dfm:584\r
msgid "Radius"\r
msgstr "Radius"\r
\r
#. frmFilter..gbWaypoints..edWayptRadiusLat..Hint\r
-#: filter.dfm:595\r
+#: filter.dfm:612\r
msgid "Latitude of central point"\r
msgstr "Breitengrad (Latitude) des Mittelpunktes"\r
\r
#. frmFilter..gbWaypoints..edWayptRadiusLon..Hint\r
-#: filter.dfm:605\r
+#: filter.dfm:622\r
msgid "Longitude of central point"\r
msgstr "Längengrad (Longitude) des Mittelpunktes"\r
\r
#. frmFilter..gbTransform..Caption\r
-#: filter.dfm:617\r
+#: filter.dfm:634\r
msgid "Transformation"\r
msgstr "Transformation"\r
\r
#. frmFilter..gbTransform..cbTransform..Caption\r
-#: filter.dfm:634\r
+#: filter.dfm:651\r
msgid "Transform"\r
msgstr "Transformiere"\r
\r
#. frmFilter..gbTransform..cbTransformDelete..Hint\r
-#: filter.dfm:643\r
+#: filter.dfm:660\r
msgid "Delete source data after transformation"\r
msgstr "Lösche anschließend die internen Quelldaten"\r
\r
#. frmFilter..gbTransform..cbTransformDelete..Caption\r
-#: filter.dfm:644\r
+#: filter.dfm:661\r
msgid "Delete"\r
msgstr "Lösche"\r
\r
#: main.dfm:38\r
#: main.pas:270\r
#: main.pas:275\r
-#: main.pas:471\r
-#: main.pas:872\r
+#: main.pas:467\r
+#: main.pas:868\r
msgid "Input"\r
msgstr "Eingabe"\r
\r
#: main.dfm:1443\r
#: main.dfm:1455\r
#: main.dfm:1460\r
-#: main.pas:869\r
-#: main.pas:923\r
+#: main.pas:865\r
+#: main.pas:919\r
msgid "File"\r
msgstr "Datei"\r
\r
#: main.dfm:222\r
#: main.pas:271\r
#: main.pas:276\r
-#: main.pas:480\r
-#: main.pas:926\r
+#: main.pas:476\r
+#: main.pas:922\r
msgid "Output"\r
msgstr "Ausgabe"\r
\r
msgid "Spanish"\r
msgstr "Spanisch"\r
\r
-#: about.pas:131\r
+#: about.pas:90\r
+#: select.pas:85\r
+msgid "Hungarian"\r
+msgstr "Ungarisch"\r
+\r
+#: about.pas:132\r
msgid ""\r
"Please have a look at the file README.GUI.\n"\r
"\n"\r
"Dort finden Sie alle nötigen Informationen, um\n"\r
"GPSBabelGUI eine neue Sprache beizubringen."\r
\r
-#: filter.pas:178\r
-#: filter.pas:179\r
-#: filter.pas:182\r
-#: filter.pas:183\r
+#: filter.pas:180\r
+#: filter.pas:181\r
+#: filter.pas:184\r
+#: filter.pas:185\r
msgid "Waypoints"\r
msgstr "Wegpunkte"\r
\r
-#: filter.pas:178\r
-#: filter.pas:179\r
#: filter.pas:180\r
#: filter.pas:181\r
+#: filter.pas:182\r
+#: filter.pas:183\r
msgid "Routes"\r
msgstr "Routen"\r
\r
-#: filter.pas:180\r
-#: filter.pas:181\r
#: filter.pas:182\r
#: filter.pas:183\r
+#: filter.pas:184\r
+#: filter.pas:185\r
msgid "Tracks"\r
msgstr "Tracks"\r
\r
-#: filter.pas:222\r
+#: filter.pas:224\r
msgid "Feet"\r
msgstr "\"Feet\" (engl.)"\r
\r
-#: filter.pas:223\r
+#: filter.pas:225\r
msgid "Meter"\r
msgstr "Meter"\r
\r
-#: filter.pas:226\r
+#: filter.pas:228\r
msgid "Miles"\r
msgstr "Meilen"\r
\r
-#: filter.pas:227\r
+#: filter.pas:229\r
msgid "Kilometer"\r
msgstr "Kilometer"\r
\r
-#: filter.pas:237\r
+#: filter.pas:239\r
msgid "Not supported by gpsbabel.exe, release %s!"\r
msgstr "Wird von gpsbabel.exe, Version %s, nicht unterstützt!"\r
\r
-#: filter.pas:285\r
+#: filter.pas:288\r
msgid "Value (%s) out of range (%g to %g)!"\r
msgstr "Wert (%s) liegt außerhalb des zulässigen Bereiches (%g to %g)!"\r
\r
-#: filter.pas:590\r
+#: filter.pas:593\r
#: options.pas:661\r
msgid "Discard changes?"\r
msgstr "Änderungen verwerfen?"\r
msgid "Special release"\r
msgstr "Spezial-Version"\r
\r
-#: main.pas:346\r
+#: main.pas:342\r
msgid "The file \"gpsbabel.exe\" found in current directory is too old!"\r
msgstr "Die Datei \"gpsbabel.exe\" ist zu alt für diese GUI!"\r
\r
-#: main.pas:420\r
-#: main.pas:554\r
+#: main.pas:416\r
+#: main.pas:550\r
msgid "All files|*.*"\r
msgstr "Alle Dateien|*.*"\r
\r
-#: main.pas:488\r
+#: main.pas:484\r
msgid "Select and edit options for \"%s\""\r
msgstr "Optionen von \"%s\" bearbeiten"\r
\r
-#: main.pas:492\r
+#: main.pas:488\r
msgid "No options available for \"%s\""\r
msgstr " \"%s\" hat keine Optionen!"\r
\r
#. s := s + '-1';\r
-#: main.pas:607\r
+#: main.pas:603\r
msgid "File %s not found."\r
msgstr "Datei \"%s\" nicht gefunden."\r
\r
-#: main.pas:668\r
+#: main.pas:664\r
msgid "File \"%s\" exists ! Overwrite ?"\r
msgstr "Datei \"%s\" existiert bereits! Überschreiben?"\r
\r
-#: main.pas:669\r
+#: main.pas:665\r
msgid "Warning"\r
msgstr "Warnung"\r
\r
-#: main.pas:702\r
+#: main.pas:698\r
msgid "Could not run \"gpsbabel.exe\"!"\r
msgstr "Konnte \"gpsbabel.exe\" nicht ausführen!"\r
\r
-#: main.pas:711\r
+#: main.pas:707\r
msgid "Sorry, gpsbabel.exe reported problems!"\r
msgstr "Uhps, da ging etwas schief!"\r
\r
-#: main.pas:713\r
+#: main.pas:709\r
msgid "Converted successfully from \"%s\" to \"%s\"."\r
msgstr "Erfolgreich konvertiert von \"%s\" zu \"%s\"."\r
\r
-#: main.pas:824\r
+#: main.pas:820\r
msgid "GPSBabel, version %s"\r
msgstr "GPSBabel, Version %s"\r
\r
-#: main.pas:858\r
-#: main.pas:913\r
+#: main.pas:854\r
+#: main.pas:909\r
msgid "Port"\r
msgstr "Schnittstelle"\r
\r
-#: main.pas:1017\r
+#: main.pas:1013\r
msgid "Options for \"%s\""\r
msgstr "Optionen für \"%s\""\r
\r
-#: main.pas:1207\r
-#: main.pas:1277\r
+#: main.pas:1203\r
+#: main.pas:1273\r
msgid "Choose language"\r
msgstr "Wähle Sprache"\r
\r
-#: main.pas:1207\r
+#: main.pas:1203\r
msgid "for GUIBabelGUI"\r
msgstr "für GPSBabelGUI"\r
\r
-#: main.pas:1277\r
+#: main.pas:1273\r
msgid "for export"\r
msgstr "für Export"\r
\r
msgstr ""\r
"Project-Id-Version: GPSBabel command line program\n"\r
"POT-Creation-Date: 2005-11-19 01:14\n"\r
-"PO-Revision-Date: 2006-10-30 18:29+0100\n"\r
-"Last-Translator: Olaf Klein <o.b.klein@gpsbabel.org>\n"\r
+"PO-Revision-Date: 2007-05-01 20:18+0100\n"\r
+"Last-Translator: Olaf Klein <o.b.klein@t-online.de>\n"\r
"MIME-Version: 1.0\n"\r
"Content-Type: text/plain; charset=utf-8\n"\r
"Content-Transfer-Encoding: 8bit\n"\r
msgid "Append icon_descr to description"\r
msgstr "Erweitere Beschreibung um Symbolbeschreibung"\r
\r
+msgid "Append realtime positioning data to the output file instead of truncating"\r
+msgstr ""\r
+\r
msgid "Base URL for link tag in output"\r
msgstr "Basis-URL für Verknüpfungseintrag "\r
\r
msgid "Default icon name"\r
msgstr "Standard Symbol"\r
\r
+msgid "Default location"\r
+msgstr ""\r
+\r
msgid "Default speed for waypoints (knots/hr)"\r
msgstr "Vorgabegeschwindigkeit (Knoten/h)"\r
\r
msgid "Include groundspeak logs if present"\r
msgstr "Groundspeak Log's beifügen (wenn vorhandan)"\r
\r
+msgid "Include major turn points (with description) from calculated route"\r
+msgstr ""\r
+\r
msgid "Include only via stations in route"\r
msgstr "Übernehme nur Stationspunkte ('viastations') der Route"\r
\r
msgid "Use shortname instead of description"\r
msgstr "Benutze den Kurznamen anstelle der Beschreibung"\r
\r
-msgid "Version of gdb file to generate (1,2)"\r
-msgstr "GDB-Version (1 oder 2)"\r
+msgid "Version of gdb file to generate (1..3)"\r
+msgstr "Schreibe GDB-Version 1, 2 oder 3"\r
\r
msgid "Version of mapsource file to generate (3,4,5)"\r
msgstr "Schreibe MapSource Datei in Version ... (3,4 oder 5)"\r
msgid "Width of lines, in pixels"\r
msgstr "Linienhöhe in Pixel"\r
\r
+msgid "Write position using this grid."\r
+msgstr ""\r
+\r
msgid "Write timestamps with offset x to UTC time"\r
msgstr "Schreibe Zeitstempel relativ zur UTC + x"\r
\r
msgstr ""\r
"Project-Id-Version: GPSBabelGUI-2\n"\r
"POT-Creation-Date: 2005-12-06 17:57\n"\r
-"PO-Revision-Date: 2006-11-01 20:07+0100\n"\r
-"Last-Translator: Daniel Díaz <Daniel.Diaz.Quintero@gmail.com>\n"\r
+"PO-Revision-Date: 2007-05-01 20:30+0100\n"\r
+"Last-Translator: Olaf Klein <o.b.klein@t-online.de>\n"\r
"MIME-Version: 1.0\n"\r
"Content-Type: text/plain; charset=UTF-8\n"\r
"Content-Transfer-Encoding: 8bit\n"\r
#. frmAbout..pnClient..pnCenter..lbCopyRight..Caption\r
#: about.dfm:114\r
msgid "Copyright (C) 2005,2006 Olaf Klein (o.b.klein@gpsbabel.org)"\r
-msgstr ""\r
+msgstr "Copyright (C) 2005,2006 Olaf Klein (o.b.klein@gpsbabel.org)"\r
\r
#. frmAbout..pnClient..pnCenter..lbMoreInfo..Caption\r
#: about.dfm:121\r
#: about.pas:87\r
#: about.pas:88\r
#: about.pas:89\r
+#: about.pas:90\r
msgid "by"\r
msgstr "por"\r
\r
msgid "TZ"\r
msgstr "TZ"\r
\r
-#. frmFilter..gbTracks..cbTrackFixes..Hint\r
+#. frmFilter..gbTracks..cbGPSfix..Hint\r
#: filter.dfm:306\r
msgid "Synthesize GPS fixes (PPS, DGPS, 3D, 2D)"\r
msgstr ""\r
\r
-#. frmFilter..gbTracks..cbTrackFixes..Caption\r
+#. frmFilter..gbTracks..cbGPSfix..Caption\r
#: filter.dfm:307\r
msgid "GPS fixes"\r
msgstr ""\r
\r
#. frmFilter..gbTracks..cbTrackCourse..Hint\r
-#: filter.dfm:315\r
+#: filter.dfm:316\r
msgid "Synthesize course values"\r
msgstr "Sintetizar los valores del curso"\r
\r
#. frmFilter..gbTracks..cbTrackCourse..Caption\r
-#: filter.dfm:316\r
+#: filter.dfm:317\r
msgid "Course"\r
msgstr "Curso"\r
\r
#. frmFilter..gbTracks..cbTrackSpeed..Hint\r
-#: filter.dfm:324\r
+#: filter.dfm:325\r
msgid "Synthesize speed values"\r
msgstr "Sintetizar los valores de la velocidad"\r
\r
#. frmFilter..gbTracks..cbTrackSpeed..Caption\r
-#: filter.dfm:325\r
+#: filter.dfm:326\r
msgid "Speed"\r
msgstr "Rutas"\r
\r
+#. frmFilter..gbTracks..cobGPSfixes....Items.Strings\r
+#: filter.dfm:338\r
+msgid "none"\r
+msgstr ""\r
+\r
+#. frmFilter..gbTracks..cobGPSfixes....Items.Strings\r
+#: filter.dfm:339\r
+msgid "pps"\r
+msgstr ""\r
+\r
+#. frmFilter..gbTracks..cobGPSfixes....Items.Strings\r
+#: filter.dfm:340\r
+msgid "dgps"\r
+msgstr ""\r
+\r
#. frmFilter..gbRoutes..Caption\r
-#: filter.dfm:335\r
+#: filter.dfm:352\r
msgid "&Routes && Tracks"\r
msgstr "&Rutas && Trazas"\r
\r
#. frmFilter..gbRoutes..lbRouteSimplifyCount..Caption\r
-#: filter.dfm:343\r
+#: filter.dfm:360\r
msgid "limit to"\r
msgstr "limitar a"\r
\r
#. frmFilter..gbRoutes..lbRouteSimplifyText..Caption\r
-#: filter.dfm:351\r
+#: filter.dfm:368\r
msgid "Points"\r
msgstr "Puntos"\r
\r
#. frmFilter..gbRoutes..cbRouteSimplify..Hint\r
-#: filter.dfm:358\r
+#: filter.dfm:375\r
msgid "Simplify routes and tracks by limited number of points"\r
msgstr "Simplificar rutas y trazas limitando el número de puntos"\r
\r
#. frmFilter..gbRoutes..cbRouteSimplify..Caption\r
-#: filter.dfm:359\r
+#: filter.dfm:376\r
msgid "Simplify"\r
msgstr "Simplificar"\r
\r
#. frmFilter..gbRoutes..edRoutesSimplifyMaxPoints..Hint\r
-#: filter.dfm:368\r
+#: filter.dfm:385\r
msgid "Upper limit of points for routes and tracks"\r
msgstr "Aumentar número de puntos para rutas y trazas"\r
\r
#. frmFilter..gbRoutes..cbReverse..Hint\r
-#: filter.dfm:390\r
+#: filter.dfm:407\r
msgid "Reverse routes and tracks"\r
msgstr "Rutas y trazas inversas"\r
\r
#. frmFilter..gbRoutes..cbReverse..Caption\r
-#: filter.dfm:391\r
+#: filter.dfm:408\r
msgid "Reverse"\r
msgstr "Inverso"\r
\r
#. frmFilter..pnBottom..btnOK..Caption\r
-#: filter.dfm:408\r
+#: filter.dfm:425\r
msgid "OK"\r
msgstr "OK"\r
\r
#. frmFilter..pnBottom..BitBtn1..Caption\r
-#: filter.dfm:444\r
+#: filter.dfm:461\r
msgid "File based filters"\r
msgstr "Archivos de filtros"\r
\r
#. frmFilter..gbWaypoints..Caption\r
#. frmMain..pnBottom..cbWaypoints..Caption\r
-#: filter.dfm:473\r
+#: filter.dfm:490\r
#: main.dfm:555\r
msgid "&Waypoints"\r
msgstr "&Registros de trazado"\r
\r
#. frmFilter..gbWaypoints..lbWayptRadiusLat..Caption\r
-#: filter.dfm:482\r
+#: filter.dfm:499\r
msgid "Latitude"\r
msgstr "Latitud"\r
\r
#. frmFilter..gbWaypoints..lbWayptRadiusLon..Caption\r
-#: filter.dfm:490\r
+#: filter.dfm:507\r
msgid "Longitude"\r
msgstr "Longitud"\r
\r
#. frmFilter..gbWaypoints..cbWayptMergeDupLoc..Hint\r
-#: filter.dfm:498\r
+#: filter.dfm:515\r
msgid "Merge waypoints with duplicate locations"\r
msgstr "Mezclar registros de trazado con ubicaciones duplicadas"\r
\r
#. frmFilter..gbWaypoints..cbWayptMergeDupLoc..Caption\r
-#: filter.dfm:499\r
+#: filter.dfm:516\r
msgid "locations"\r
msgstr "ubicaciones"\r
\r
#. frmFilter..gbWaypoints..cbWayptMergeDupNames..Hint\r
-#: filter.dfm:508\r
+#: filter.dfm:525\r
msgid "Merge waypoints with duplicate \"short name\""\r
msgstr "Mezclar registros de trazado duplicados con \"nombre corto\""\r
\r
#. frmFilter..gbWaypoints..cbWayptMergeDupNames..Caption\r
-#: filter.dfm:509\r
+#: filter.dfm:526\r
msgid "\"short names\""\r
msgstr "\"nombre corto\""\r
\r
#. frmFilter..gbWaypoints..cbWayptMergeDistance..Hint\r
-#: filter.dfm:518\r
+#: filter.dfm:535\r
msgid "Merge waypoints separated by less then"\r
msgstr "Mezclar registros de trazado menores cuando"\r
\r
#. frmFilter..gbWaypoints..cbWayptMergeDistance..Caption\r
-#: filter.dfm:519\r
+#: filter.dfm:536\r
msgid "Position"\r
msgstr "Posición"\r
\r
#. frmFilter..gbWaypoints..cbWayptSort..Hint\r
-#: filter.dfm:547\r
+#: filter.dfm:564\r
msgid "Sort waypoints by \"short name\" or by description"\r
msgstr "Ordenar registros de trazado por \"nombre corto\" o por descripción"\r
\r
#. frmFilter..gbWaypoints..cbWayptSort..Caption\r
-#: filter.dfm:548\r
+#: filter.dfm:565\r
msgid "Sort"\r
msgstr "Ordenar"\r
\r
#. frmFilter..gbWaypoints..cbWayptMergeDups..Hint\r
-#: filter.dfm:556\r
+#: filter.dfm:573\r
msgid "Merge duplicate waypoints"\r
msgstr "Mezclar registros de trazado duplicados"\r
\r
#. frmFilter..gbWaypoints..cbWayptMergeDups..Caption\r
-#: filter.dfm:557\r
+#: filter.dfm:574\r
msgid "Duplicates"\r
msgstr "Duplicados"\r
\r
#. frmFilter..gbWaypoints..cbWayptRadius..Hint\r
-#: filter.dfm:566\r
+#: filter.dfm:583\r
msgid "Include points based on their proximity to central point"\r
msgstr "Incluir puntos basándose en la proximidad a un punto central"\r
\r
#. frmFilter..gbWaypoints..cbWayptRadius..Caption\r
-#: filter.dfm:567\r
+#: filter.dfm:584\r
msgid "Radius"\r
msgstr "Radio"\r
\r
#. frmFilter..gbWaypoints..edWayptRadiusLat..Hint\r
-#: filter.dfm:595\r
+#: filter.dfm:612\r
msgid "Latitude of central point"\r
msgstr "Latitud del punto central"\r
\r
#. frmFilter..gbWaypoints..edWayptRadiusLon..Hint\r
-#: filter.dfm:605\r
+#: filter.dfm:622\r
msgid "Longitude of central point"\r
msgstr "Longitud del punto central"\r
\r
#. frmFilter..gbTransform..Caption\r
-#: filter.dfm:617\r
+#: filter.dfm:634\r
msgid "Transformation"\r
msgstr ""\r
\r
#. frmFilter..gbTransform..cbTransform..Caption\r
-#: filter.dfm:634\r
+#: filter.dfm:651\r
msgid "Transform"\r
msgstr ""\r
\r
#. frmFilter..gbTransform..cbTransformDelete..Hint\r
-#: filter.dfm:643\r
+#: filter.dfm:660\r
msgid "Delete source data after transformation"\r
msgstr ""\r
\r
#. frmFilter..gbTransform..cbTransformDelete..Caption\r
-#: filter.dfm:644\r
+#: filter.dfm:661\r
msgid "Delete"\r
msgstr "Eliminar"\r
\r
#: main.dfm:38\r
#: main.pas:270\r
#: main.pas:275\r
-#: main.pas:471\r
-#: main.pas:872\r
+#: main.pas:467\r
+#: main.pas:868\r
msgid "Input"\r
msgstr "Entrada"\r
\r
#: main.dfm:1443\r
#: main.dfm:1455\r
#: main.dfm:1460\r
-#: main.pas:869\r
-#: main.pas:923\r
+#: main.pas:865\r
+#: main.pas:919\r
msgid "File"\r
msgstr "Archivo"\r
\r
#: main.dfm:222\r
#: main.pas:271\r
#: main.pas:276\r
-#: main.pas:480\r
-#: main.pas:926\r
+#: main.pas:476\r
+#: main.pas:922\r
msgid "Output"\r
msgstr "Salida"\r
\r
msgid "Spanish"\r
msgstr "Español"\r
\r
-#: about.pas:131\r
+#: about.pas:90\r
+#: select.pas:85\r
+msgid "Hungarian"\r
+msgstr "Húngaro"\r
+\r
+#: about.pas:132\r
msgid ""\r
"Please have a look at the file README.GUI.\n"\r
"\n"\r
"Allí encontrará toda la inforamción que necesita\n"\r
"para ejecutar GPSBabelGUI en su propio lenguaje."\r
\r
-#: filter.pas:178\r
-#: filter.pas:179\r
-#: filter.pas:182\r
-#: filter.pas:183\r
+#: filter.pas:180\r
+#: filter.pas:181\r
+#: filter.pas:184\r
+#: filter.pas:185\r
msgid "Waypoints"\r
msgstr "Registros de trazado"\r
\r
-#: filter.pas:178\r
-#: filter.pas:179\r
#: filter.pas:180\r
#: filter.pas:181\r
+#: filter.pas:182\r
+#: filter.pas:183\r
msgid "Routes"\r
msgstr "Rutas"\r
\r
-#: filter.pas:180\r
-#: filter.pas:181\r
#: filter.pas:182\r
#: filter.pas:183\r
+#: filter.pas:184\r
+#: filter.pas:185\r
msgid "Tracks"\r
msgstr "Trazas"\r
\r
-#: filter.pas:222\r
+#: filter.pas:224\r
msgid "Feet"\r
msgstr "Pie"\r
\r
-#: filter.pas:223\r
+#: filter.pas:225\r
msgid "Meter"\r
msgstr "Metro"\r
\r
-#: filter.pas:226\r
+#: filter.pas:228\r
msgid "Miles"\r
msgstr "Milla"\r
\r
-#: filter.pas:227\r
+#: filter.pas:229\r
msgid "Kilometer"\r
msgstr "Kilómetro"\r
\r
-#: filter.pas:237\r
+#: filter.pas:239\r
msgid "Not supported by gpsbabel.exe, release %s!"\r
msgstr "¡No soportado por gpsbabel.exe, versión %s!"\r
\r
-#: filter.pas:285\r
+#: filter.pas:288\r
msgid "Value (%s) out of range (%g to %g)!"\r
msgstr "¡Valor (%s) fuera de rango (de %g a %g)!"\r
\r
-#: filter.pas:590\r
+#: filter.pas:593\r
#: options.pas:661\r
msgid "Discard changes?"\r
msgstr "¿Descartar cambios?"\r
msgid "Special release"\r
msgstr "Versión especial"\r
\r
-#: main.pas:346\r
+#: main.pas:342\r
msgid "The file \"gpsbabel.exe\" found in current directory is too old!"\r
msgstr "¡El archivo \"gpsbabel.exe\" encontrado en el directorio es obsoleto!"\r
\r
-#: main.pas:420\r
-#: main.pas:554\r
+#: main.pas:416\r
+#: main.pas:550\r
msgid "All files|*.*"\r
msgstr "Todos los archivo|*.*"\r
\r
-#: main.pas:488\r
+#: main.pas:484\r
msgid "Select and edit options for \"%s\""\r
msgstr "Seleccionar y editar opciones para \"%s\""\r
\r
-#: main.pas:492\r
+#: main.pas:488\r
msgid "No options available for \"%s\""\r
msgstr "No hay opciones disponibles para \"%s\""\r
\r
#. s := s + '-1';\r
-#: main.pas:607\r
+#: main.pas:603\r
msgid "File %s not found."\r
msgstr "No se encontró el archivo %s."\r
\r
-#: main.pas:668\r
+#: main.pas:664\r
msgid "File \"%s\" exists ! Overwrite ?"\r
msgstr "El archivo \"%s\" ya existe ¿sobreescribir?"\r
\r
-#: main.pas:669\r
+#: main.pas:665\r
msgid "Warning"\r
msgstr "Precaución"\r
\r
-#: main.pas:702\r
+#: main.pas:698\r
msgid "Could not run \"gpsbabel.exe\"!"\r
msgstr "¡No se puede ejecutar \"gpsbabel.exe\"!"\r
\r
-#: main.pas:711\r
+#: main.pas:707\r
msgid "Sorry, gpsbabel.exe reported problems!"\r
msgstr "¡Perdón, gpsbabel.exe indicó algún problema!"\r
\r
-#: main.pas:713\r
+#: main.pas:709\r
msgid "Converted successfully from \"%s\" to \"%s\"."\r
msgstr "Conversión correcta de \"%s\" to \"%s\"."\r
\r
-#: main.pas:824\r
+#: main.pas:820\r
msgid "GPSBabel, version %s"\r
msgstr "GPSBabel, versión %s"\r
\r
-#: main.pas:858\r
-#: main.pas:913\r
+#: main.pas:854\r
+#: main.pas:909\r
msgid "Port"\r
msgstr "Puerto"\r
\r
-#: main.pas:1017\r
+#: main.pas:1013\r
msgid "Options for \"%s\""\r
msgstr "Opciones para \"%s\""\r
\r
-#: main.pas:1207\r
-#: main.pas:1277\r
+#: main.pas:1203\r
+#: main.pas:1273\r
msgid "Choose language"\r
msgstr "Elejir lenguaje"\r
\r
-#: main.pas:1207\r
+#: main.pas:1203\r
msgid "for GUIBabelGUI"\r
msgstr "para GUIBabelGUI"\r
\r
-#: main.pas:1277\r
+#: main.pas:1273\r
msgid "for export"\r
msgstr "para exportar"\r
\r
-msgid ""
-msgstr ""
-"Project-Id-Version: GPSBabel command line program\n"
-"POT-Creation-Date: 2006-10-29 16:00\n"
-"PO-Revision-Date: 2006-10-31 14:53+0100\n"
-"Last-Translator: Daniel Díaz <Daniel.Diaz.Quintero@gmail.com>\n"
-"Language-Team: Daniel Díaz <Daniel.Diaz.Quintero@gmail.com>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-Country: SPAIN\n"
-
-msgid "(integer sec or 'auto') Barograph to GPS time diff"
-msgstr "Dif. de tiempos de barógrafo a GPS (núm de segs. o 'auto')"
-
-msgid "(USR input) Break segments into separate tracks"
-msgstr "(Entrada USR) Dividir segmentos en tracks separadas"
-
-msgid "(USR output) Merge into one segmented track"
-msgstr "(Salida USR) Combinar en track segmentada"
-
-msgid "Ad-hoc closed icon name"
-msgstr "Cerrar nombre de icono Ad-hoc"
-
-msgid "Ad-hoc open icon name"
-msgstr "Abrir nombre de icono Ad-hoc"
-
-msgid "Allow whitespace synth. shortnames"
-msgstr "Permitir espacios en los nombres cortos a generar"
-
-msgid "Altitudes are absolute and not clamped to ground"
-msgstr "Altitudes absolutas, no relativas al suelo"
-
-msgid "Append icon_descr to description"
-msgstr "Añadir descripción de icono a la descripción"
-
-msgid "Base URL for link tag in output"
-msgstr "URL base para marca de enlace en salida"
-
-msgid "Basename prepended to URL on output"
-msgstr "Prefijo de la URL del resultado"
-
-msgid "Category name (Cache)"
-msgstr "Nombre de categoría (Cache)"
-
-msgid "Category number to use for written waypoints"
-msgstr "Número de categoría a usar en los puntos de trazado."
-
-msgid "Color for lines or mapnotes"
-msgstr "Color para líneas o notas de mapa"
-
-msgid "Command unit to power itself down"
-msgstr "Enviar comando de apagado a la unidad"
-
-msgid "Complete date-free tracks with given date (YYYYMMDD)."
-msgstr "Listado completo de trazas de la fecha (AAAAMMDD)."
-
-msgid "Create waypoints from geocache log entries"
-msgstr "Crear puntos de trazado a partir de entradas de log de geocache"
-
-msgid "Database name"
-msgstr "Nombre de la base de datos"
-
-msgid "Database name (filename)"
-msgstr "Nombre de la base de datos (nombre de fichero)"
-
-msgid "Datum (default=NAD27)"
-msgstr "Datum (por defecto=NAD27)"
-
-msgid "Days after which points are considered old"
-msgstr "Días después de los cuales los puntos se consideran antiguos"
-
-msgid "Decimal seconds to pause between groups of strings"
-msgstr "Segundos de pausa (en decimal) entre grupos de cadenas."
-
-msgid "Default category on output (1..16)"
-msgstr "Categoría por defecto del resultado (1..16)"
-
-msgid "Default icon name"
-msgstr "Nombre del icono por defecto"
-
-msgid "Default speed for waypoints (knots/hr)"
-msgstr "Velocidad por defecto para los puntos de trazado (nudos/hora)"
-
-msgid "Degrees output as 'ddd', 'dmm'(default) or 'dms'"
-msgstr "Salida en grados como 'ggg', 'gmm' (defecto) o 'gms'"
-
-msgid "Delete all waypoints"
-msgstr "Borrar todos los puntos de trazado."
-
-msgid "Display labels on track and routepoints (default = 1)"
-msgstr "Mostrar etiquetas en rutas y puntos de ruta (defecto=1)"
-
-msgid "Distance unit [m=metric, s=statute]"
-msgstr "Unidades de distancia [m=metrico,s=imperial]"
-
-msgid "Do not add geocache data to description"
-msgstr "No añadir datos de geocache a la descripción"
-
-msgid "Draw extrusion line from trackpoint to ground"
-msgstr "Dibujar línea de extrusión desde el punto de trazado a tierra."
-
-msgid "Drop route points that do not have an equivalent waypoint (hidden points)"
-msgstr "Descartar puntos de la ruta que no tengan punto de ruta equivalente (oculto)"
-
-msgid "Encrypt hints using ROT13"
-msgstr "Encriptar sugerencias mediante ROT13"
-
-msgid "Encrypt hints with ROT13"
-msgstr "Encriptar sugerencias mediante ROT13"
-
-msgid "Erase device data after download"
-msgstr "Borrar datos del dispositivo después de descargar."
-
-msgid "Export linestrings for tracks and routes"
-msgstr "Exportar cadenas de líneas para tracks y rutas"
-
-msgid "Export placemarks for tracks and routes"
-msgstr "Exportar marcas para tracks y rutas"
-
-msgid "Full path to XCSV style file"
-msgstr "Ruta completa de la hoja de estilo XCSV"
-
-msgid "Generate file with lat/lon for centering map"
-msgstr "Generar fichero con lat/lon para centrar mapa"
-
-msgid "Give points (waypoints/route points) a default radius (proximity)"
-msgstr "Dar a los puntos (puntos de ruta/puntos de la ruta) un radio por defecto (proximidad)"
-
-msgid "GPS datum (def. WGS 84)"
-msgstr "Datum GPS (def. WGS 84)"
-
-msgid "Height in pixels of map"
-msgstr "Alto del mapa, en pixels"
-
-msgid "Ignore event marker icons"
-msgstr "Ignorar iconos de marca de eventos"
-
-msgid "Include extended data for trackpoints (default = 1)"
-msgstr "Incluir datos extendidos para los puntos de ruta."
-
-msgid "Include groundspeak logs if present"
-msgstr "Incluir registros de groundspeak, si existen"
-
-msgid "Include only via stations in route"
-msgstr "Suprimir puntos de ruta calculados"
-
-msgid "Include short name in bookmarks"
-msgstr "Incluir nombre corto en Favoritos"
-
-msgid "Index of name field in .dbf"
-msgstr "Índice del campo nombre en .dbf"
-
-msgid "Index of route (if more the one in source)"
-msgstr "Índice de ruta (si hay más de una en el origen)"
-
-msgid "Index of route to write (if more the one in source)"
-msgstr "Índice de la ruta a escribir (si existe más de una en origen)"
-
-msgid "Index of route/track to write (if more the one in source)"
-msgstr "Índice de la ruta/track a escribir (si existe más de una)"
-
-msgid "Index of track (if more the one in source)"
-msgstr "Índice de traza (si hay más de una en el origen)"
-
-msgid "Index of track to write (if more the one in source)"
-msgstr "Índice de track a escribir (si hay más de una en el origen)"
-
-msgid "Index of URL field in .dbf"
-msgstr "Índice del campo URL en .dbf"
-
-msgid "Infrastructure closed icon name"
-msgstr "Nombre de icono para cerrar infraestructura."
-
-msgid "Infrastructure open icon name"
-msgstr "Nombre de icono para abrir infraestructura."
-
-msgid "Keep turns if simplify filter is used"
-msgstr "Mantener giros si se usa el filtro de simplificación"
-
-msgid "Length of generated shortnames"
-msgstr "Longitud de nombres cortos a generar"
-
-msgid "Length of generated shortnames (default 16)"
-msgstr "Longitud de nombres cortos a generar"
-
-msgid "Line color, specified in hex AABBGGRR"
-msgstr "Color de línea, especificado en hex AABBGGRR"
-
-msgid "Make synth. shortnames unique"
-msgstr "Crear nombres cortos únicos"
-
-msgid "MapSend version TRK file to generate (3,4)"
-msgstr "Versión de fichero TRK de MapSend a generar (3,4)"
-
-msgid "Margin for map. Degrees or percentage"
-msgstr "Márgen para el mapa. Grados de porcentaje."
-
-msgid "Marker type for new points"
-msgstr "Tipo de marcador para puntos nuevos"
-
-msgid "Marker type for old points"
-msgstr "Tipo de marcador para puntos antiguos"
-
-msgid "Marker type for unfound points"
-msgstr "Tipo de marcador para puntos no encontrados"
-
-msgid "Max length of waypoint name to write"
-msgstr "Longitud máxima de nombre de los puntos de rutas a escribir"
-
-msgid "Max number of comments to write (maxcmts=200)"
-msgstr "Máximo número de comentarios a escribir (maxcmts=200)"
-
-msgid "Max shortname length when used with -s"
-msgstr "Longitud máxima de nombre corto cuando se use con -s"
-
-msgid "Max synthesized shortname length"
-msgstr "Longitud máxima de nombre corto a generar"
-
-msgid "Merge output with existing file"
-msgstr "Combinar salida con fichero existente"
-
-msgid "Name of the 'unassigned' category"
-msgstr "Nombre de la categoría 'Sin asignar'"
-
-msgid "New name for the route"
-msgstr "Nuevo nombre de la ruta"
-
-msgid "No separator lines between waypoints"
-msgstr "Sin líneas de separación entre puntos de trazado."
-
-msgid "No whitespace in generated shortnames"
-msgstr "Sin espacios en blanco en nombres cortos."
-
-msgid "Non-stealth encrypted icon name"
-msgstr "Nombre de icono encriptado (No oculto)"
-
-msgid "Non-stealth non-encrypted icon name"
-msgstr "Nombre de icono no encriptado (No oculto)"
-
-msgid "Numeric value of bitrate (baud=4800)"
-msgstr "Valor numérico de bitrate (baudios=4800)"
-
-msgid "Omit Placer name"
-msgstr "Omitir nombre del creador"
-
-msgid "Only read turns; skip all other points"
-msgstr "Sólo leer giros; ignorar todos los demás puntos"
-
-msgid "Path to HTML style sheet"
-msgstr "Ruta de la hoja de estilo HTML"
-
-msgid "Precision of coordinates"
-msgstr "Precisión de las coordenadas."
-
-msgid "Radius for circles"
-msgstr "Radio para los círculos"
-
-msgid "Radius of our big earth (default 6371000 meters)"
-msgstr "Radio de nuestra gran Tierra (por defecto 6371000 metros)"
-
-msgid "Read control points as waypoint/route/none"
-msgstr "Leer puntos de control como punto de ruta/ruta/ninguno"
-
-msgid "Read/Write date format (i.e. DDMMYYYY)"
-msgstr "Formato de fecha en Lectura/Escritura (p.e. DDMMAAAA)"
-
-msgid "Read/Write date format (i.e. yyyy/mm/dd)"
-msgstr "Formato de fecha en Lectura/Escritura (p.e. aaaa/mm/dd)"
-
-msgid "Read/write GPGGA sentences"
-msgstr "Comandos de Lectura/Escritura en GPGGA"
-
-msgid "Read/write GPGSA sentences"
-msgstr "Comandos de Lectura/Escritura en GPGSA"
-
-msgid "Read/write GPRMC sentences"
-msgstr "Comandos de Lectura/Escritura en GPRMC"
-
-msgid "Read/write GPVTG sentences"
-msgstr "Comandos de Lectura/Escritura en GPVTG"
-
-msgid "Read/Write time format (i.e. HH:mm:ss xx)"
-msgstr "Formato de hora en Lectura/Escritura (p.e. HH:mm:ss xx)"
-
-msgid "Retain at most this number of position points (0 = unlimited)"
-msgstr "Almacenar como poco este número de puntos de posición (0=ilimitado)"
-
-msgid "Return current position as a waypoint"
-msgstr "Devolver la posición actual como un punto de ruta"
-
-msgid "Road type changes"
-msgstr "Cambios en tipo de carretera."
-
-msgid "Shortname is MAC address"
-msgstr "El nombre corto es la dirección MAC"
-
-msgid "Speed in bits per second of serial port (baud=4800)"
-msgstr "Velocidad en bits por segundos del puerto serie (4800 baudios)"
-
-msgid "Split input into separate files"
-msgstr "Dividir la entrada en archivos separados"
-
-msgid "Split into multiple routes at turns"
-msgstr "Dividir en múltiples rutas en los giros"
-
-msgid "Stealth encrypted icon name"
-msgstr "Nombre de icono encriptado (Oculto)"
-
-msgid "Stealth non-encrypted icon name"
-msgstr "Nombre de icono no encriptado (Oculto)"
-
-msgid "String to separate concatenated address fields (default=\", \")"
-msgstr "Separar la cadena en campos de dirección concatenados (defecto=\",\")"
-
-msgid "Suppress labels on generated pins"
-msgstr "Quitar etiquetas en pins generados"
-
-msgid "Suppress retired geocaches"
-msgstr "Eliminar geocaches retirados"
-
-msgid "Suppress separator lines between waypoints"
-msgstr "Quitar líneas de separación entre puntos de ruta"
-
-msgid "Suppress use of handshaking in name of speed"
-msgstr "Eliminar uso de handshaking en nombre de velocidad (???)"
-
-msgid "Suppress whitespace in generated shortnames"
-msgstr "Quitar espacios en nombres cortos generados"
-
-msgid "Symbol to use for point data"
-msgstr "Símbolo a usar para los datos de puntos"
-
-msgid "Synthesize track times"
-msgstr "Tratar tiempos de las trazas"
-
-msgid "Target GPX version for output"
-msgstr "Versión GPX destino para la salida"
-
-msgid "Temperature unit [c=Celsius, f=Fahrenheit]"
-msgstr "Unidades de temperatura [c=Celsius, f=Fahrenheit]"
-
-msgid "The icon description is already the marker"
-msgstr "La descripción del icono ya es el marcador"
-
-msgid "Type of .an1 file"
-msgstr "Fichero de tipo .an1"
-
-msgid "Units for altitude (f)eet or (m)etres"
-msgstr "Unidades de altitud (p)íes o (m)etros"
-
-msgid "Units used when writing comments ('s'tatute or 'm'etric)"
-msgstr "Unidades utilizadas en los comentarios ('i'mperial o 'm'étrico')"
-
-msgid "UPPERCASE synth. shortnames"
-msgstr "Nombres cortos a generar en MAYÚSCULAS"
-
-msgid "Use depth values on output (default is ignore)"
-msgstr "Usar valores de profundidad en resultado (por defecto: ignorar)"
-
-msgid "Use proximity values on output (default is ignore)"
-msgstr "Usar valores de proximidad en resultado (por defecto: ignorar)"
-
-msgid "Use shortname instead of description"
-msgstr "Usar el nombre corto en lugar de la descripción"
-
-msgid "Version of gdb file to generate (1,2)"
-msgstr "Versión de fichero gdb a generar (1,2)"
-
-msgid "Version of mapsource file to generate (3,4,5)"
-msgstr "Versión de fichero mapsource a generar (3,4,5)"
-
-msgid "Waypoint background color"
-msgstr "Color de fondo para los puntos de ruta"
-
-msgid "Waypoint foreground color"
-msgstr "Color primer plano para los puntos de ruta"
-
-msgid "Waypoint type"
-msgstr "Tipo de punto de trazado"
-
-msgid "Width in pixels of map"
-msgstr "Ancho del mapa, en pixels"
-
-msgid "Width of lines, in pixels"
-msgstr "Ancho de líneas, en pixels"
-
-msgid "Write timestamps with offset x to UTC time"
-msgstr "Escribir marcas de tiempo con un desplazamiento de 'x' sobre la hora UTC"
-
-msgid "Write tracks compatible with Carto Exploreur"
-msgstr "Crear trazas compatibles con Carto Exploreur"
-
-msgid "Zoom level to reduce points"
-msgstr "Nivel de Zoom para reducir puntos"
-
+msgid ""\r
+msgstr ""\r
+"Project-Id-Version: GPSBabel command line program\n"\r
+"POT-Creation-Date: 2006-10-29 16:00\n"\r
+"PO-Revision-Date: 2007-05-01 20:23+0100\n"\r
+"Last-Translator: Olaf Klein <o.b.klein@t-online.de>\n"\r
+"Language-Team: Daniel Díaz <Daniel.Diaz.Quintero@gmail.com>\n"\r
+"MIME-Version: 1.0\n"\r
+"Content-Type: text/plain; charset=UTF-8\n"\r
+"Content-Transfer-Encoding: 8bit\n"\r
+"X-Poedit-Country: SPAIN\n"\r
+\r
+msgid "(integer sec or 'auto') Barograph to GPS time diff"\r
+msgstr "Dif. de tiempos de barógrafo a GPS (núm de segs. o 'auto')"\r
+\r
+msgid "(USR input) Break segments into separate tracks"\r
+msgstr "(Entrada USR) Dividir segmentos en tracks separadas"\r
+\r
+msgid "(USR output) Merge into one segmented track"\r
+msgstr "(Salida USR) Combinar en track segmentada"\r
+\r
+msgid "Ad-hoc closed icon name"\r
+msgstr "Cerrar nombre de icono Ad-hoc"\r
+\r
+msgid "Ad-hoc open icon name"\r
+msgstr "Abrir nombre de icono Ad-hoc"\r
+\r
+msgid "Allow whitespace synth. shortnames"\r
+msgstr "Permitir espacios en los nombres cortos a generar"\r
+\r
+msgid "Altitudes are absolute and not clamped to ground"\r
+msgstr "Altitudes absolutas, no relativas al suelo"\r
+\r
+msgid "Append icon_descr to description"\r
+msgstr "Añadir descripción de icono a la descripción"\r
+\r
+msgid "Append realtime positioning data to the output file instead of truncating"\r
+msgstr ""\r
+\r
+msgid "Base URL for link tag in output"\r
+msgstr "URL base para marca de enlace en salida"\r
+\r
+msgid "Basename prepended to URL on output"\r
+msgstr "Prefijo de la URL del resultado"\r
+\r
+msgid "Category name (Cache)"\r
+msgstr "Nombre de categoría (Cache)"\r
+\r
+msgid "Category number to use for written waypoints"\r
+msgstr "Número de categoría a usar en los puntos de trazado."\r
+\r
+msgid "Color for lines or mapnotes"\r
+msgstr "Color para líneas o notas de mapa"\r
+\r
+msgid "Command unit to power itself down"\r
+msgstr "Enviar comando de apagado a la unidad"\r
+\r
+msgid "Complete date-free tracks with given date (YYYYMMDD)."\r
+msgstr "Listado completo de trazas de la fecha (AAAAMMDD)."\r
+\r
+msgid "Create waypoints from geocache log entries"\r
+msgstr "Crear puntos de trazado a partir de entradas de log de geocache"\r
+\r
+msgid "Database name"\r
+msgstr "Nombre de la base de datos"\r
+\r
+msgid "Database name (filename)"\r
+msgstr "Nombre de la base de datos (nombre de fichero)"\r
+\r
+msgid "Datum (default=NAD27)"\r
+msgstr "Datum (por defecto=NAD27)"\r
+\r
+msgid "Days after which points are considered old"\r
+msgstr "Días después de los cuales los puntos se consideran antiguos"\r
+\r
+msgid "Decimal seconds to pause between groups of strings"\r
+msgstr "Segundos de pausa (en decimal) entre grupos de cadenas."\r
+\r
+msgid "Default category on output (1..16)"\r
+msgstr "Categoría por defecto del resultado (1..16)"\r
+\r
+msgid "Default icon name"\r
+msgstr "Nombre del icono por defecto"\r
+\r
+msgid "Default location"\r
+msgstr ""\r
+\r
+msgid "Default speed for waypoints (knots/hr)"\r
+msgstr "Velocidad por defecto para los puntos de trazado (nudos/hora)"\r
+\r
+msgid "Degrees output as 'ddd', 'dmm'(default) or 'dms'"\r
+msgstr "Salida en grados como 'ggg', 'gmm' (defecto) o 'gms'"\r
+\r
+msgid "Delete all waypoints"\r
+msgstr "Borrar todos los puntos de trazado."\r
+\r
+msgid "Display labels on track and routepoints (default = 1)"\r
+msgstr "Mostrar etiquetas en rutas y puntos de ruta (defecto=1)"\r
+\r
+msgid "Distance unit [m=metric, s=statute]"\r
+msgstr "Unidades de distancia [m=metrico,s=imperial]"\r
+\r
+msgid "Do not add geocache data to description"\r
+msgstr "No añadir datos de geocache a la descripción"\r
+\r
+msgid "Draw extrusion line from trackpoint to ground"\r
+msgstr "Dibujar línea de extrusión desde el punto de trazado a tierra."\r
+\r
+msgid "Drop route points that do not have an equivalent waypoint (hidden points)"\r
+msgstr "Descartar puntos de la ruta que no tengan punto de ruta equivalente (oculto)"\r
+\r
+msgid "Encrypt hints using ROT13"\r
+msgstr "Encriptar sugerencias mediante ROT13"\r
+\r
+msgid "Encrypt hints with ROT13"\r
+msgstr "Encriptar sugerencias mediante ROT13"\r
+\r
+msgid "Erase device data after download"\r
+msgstr "Borrar datos del dispositivo después de descargar."\r
+\r
+msgid "Export linestrings for tracks and routes"\r
+msgstr "Exportar cadenas de líneas para tracks y rutas"\r
+\r
+msgid "Export placemarks for tracks and routes"\r
+msgstr "Exportar marcas para tracks y rutas"\r
+\r
+msgid "Full path to XCSV style file"\r
+msgstr "Ruta completa de la hoja de estilo XCSV"\r
+\r
+msgid "Generate file with lat/lon for centering map"\r
+msgstr "Generar fichero con lat/lon para centrar mapa"\r
+\r
+msgid "Give points (waypoints/route points) a default radius (proximity)"\r
+msgstr "Dar a los puntos (puntos de ruta/puntos de la ruta) un radio por defecto (proximidad)"\r
+\r
+msgid "GPS datum (def. WGS 84)"\r
+msgstr "Datum GPS (def. WGS 84)"\r
+\r
+msgid "Height in pixels of map"\r
+msgstr "Alto del mapa, en pixels"\r
+\r
+msgid "Ignore event marker icons"\r
+msgstr "Ignorar iconos de marca de eventos"\r
+\r
+msgid "Include extended data for trackpoints (default = 1)"\r
+msgstr "Incluir datos extendidos para los puntos de ruta."\r
+\r
+msgid "Include groundspeak logs if present"\r
+msgstr "Incluir registros de groundspeak, si existen"\r
+\r
+msgid "Include major turn points (with description) from calculated route"\r
+msgstr ""\r
+\r
+msgid "Include only via stations in route"\r
+msgstr "Suprimir puntos de ruta calculados"\r
+\r
+msgid "Include short name in bookmarks"\r
+msgstr "Incluir nombre corto en Favoritos"\r
+\r
+msgid "Index of name field in .dbf"\r
+msgstr "Índice del campo nombre en .dbf"\r
+\r
+msgid "Index of route (if more the one in source)"\r
+msgstr "Índice de ruta (si hay más de una en el origen)"\r
+\r
+msgid "Index of route to write (if more the one in source)"\r
+msgstr "Índice de la ruta a escribir (si existe más de una en origen)"\r
+\r
+msgid "Index of route/track to write (if more the one in source)"\r
+msgstr "Índice de la ruta/track a escribir (si existe más de una)"\r
+\r
+msgid "Index of track (if more the one in source)"\r
+msgstr "Índice de traza (si hay más de una en el origen)"\r
+\r
+msgid "Index of track to write (if more the one in source)"\r
+msgstr "Índice de track a escribir (si hay más de una en el origen)"\r
+\r
+msgid "Index of URL field in .dbf"\r
+msgstr "Índice del campo URL en .dbf"\r
+\r
+msgid "Infrastructure closed icon name"\r
+msgstr "Nombre de icono para cerrar infraestructura."\r
+\r
+msgid "Infrastructure open icon name"\r
+msgstr "Nombre de icono para abrir infraestructura."\r
+\r
+msgid "Keep turns if simplify filter is used"\r
+msgstr "Mantener giros si se usa el filtro de simplificación"\r
+\r
+msgid "Length of generated shortnames"\r
+msgstr "Longitud de nombres cortos a generar"\r
+\r
+msgid "Length of generated shortnames (default 16)"\r
+msgstr "Longitud de nombres cortos a generar"\r
+\r
+msgid "Line color, specified in hex AABBGGRR"\r
+msgstr "Color de línea, especificado en hex AABBGGRR"\r
+\r
+msgid "Make synth. shortnames unique"\r
+msgstr "Crear nombres cortos únicos"\r
+\r
+msgid "MapSend version TRK file to generate (3,4)"\r
+msgstr "Versión de fichero TRK de MapSend a generar (3,4)"\r
+\r
+msgid "Margin for map. Degrees or percentage"\r
+msgstr "Márgen para el mapa. Grados de porcentaje."\r
+\r
+msgid "Marker type for new points"\r
+msgstr "Tipo de marcador para puntos nuevos"\r
+\r
+msgid "Marker type for old points"\r
+msgstr "Tipo de marcador para puntos antiguos"\r
+\r
+msgid "Marker type for unfound points"\r
+msgstr "Tipo de marcador para puntos no encontrados"\r
+\r
+msgid "Max length of waypoint name to write"\r
+msgstr "Longitud máxima de nombre de los puntos de rutas a escribir"\r
+\r
+msgid "Max number of comments to write (maxcmts=200)"\r
+msgstr "Máximo número de comentarios a escribir (maxcmts=200)"\r
+\r
+msgid "Max shortname length when used with -s"\r
+msgstr "Longitud máxima de nombre corto cuando se use con -s"\r
+\r
+msgid "Max synthesized shortname length"\r
+msgstr "Longitud máxima de nombre corto a generar"\r
+\r
+msgid "Merge output with existing file"\r
+msgstr "Combinar salida con fichero existente"\r
+\r
+msgid "Name of the 'unassigned' category"\r
+msgstr "Nombre de la categoría 'Sin asignar'"\r
+\r
+msgid "New name for the route"\r
+msgstr "Nuevo nombre de la ruta"\r
+\r
+msgid "No separator lines between waypoints"\r
+msgstr "Sin líneas de separación entre puntos de trazado."\r
+\r
+msgid "No whitespace in generated shortnames"\r
+msgstr "Sin espacios en blanco en nombres cortos."\r
+\r
+msgid "Non-stealth encrypted icon name"\r
+msgstr "Nombre de icono encriptado (No oculto)"\r
+\r
+msgid "Non-stealth non-encrypted icon name"\r
+msgstr "Nombre de icono no encriptado (No oculto)"\r
+\r
+msgid "Numeric value of bitrate (baud=4800)"\r
+msgstr "Valor numérico de bitrate (baudios=4800)"\r
+\r
+msgid "Omit Placer name"\r
+msgstr "Omitir nombre del creador"\r
+\r
+msgid "Only read turns; skip all other points"\r
+msgstr "Sólo leer giros; ignorar todos los demás puntos"\r
+\r
+msgid "Path to HTML style sheet"\r
+msgstr "Ruta de la hoja de estilo HTML"\r
+\r
+msgid "Precision of coordinates"\r
+msgstr "Precisión de las coordenadas."\r
+\r
+msgid "Radius for circles"\r
+msgstr "Radio para los círculos"\r
+\r
+msgid "Radius of our big earth (default 6371000 meters)"\r
+msgstr "Radio de nuestra gran Tierra (por defecto 6371000 metros)"\r
+\r
+msgid "Read control points as waypoint/route/none"\r
+msgstr "Leer puntos de control como punto de ruta/ruta/ninguno"\r
+\r
+msgid "Read/Write date format (i.e. DDMMYYYY)"\r
+msgstr "Formato de fecha en Lectura/Escritura (p.e. DDMMAAAA)"\r
+\r
+msgid "Read/Write date format (i.e. yyyy/mm/dd)"\r
+msgstr "Formato de fecha en Lectura/Escritura (p.e. aaaa/mm/dd)"\r
+\r
+msgid "Read/write GPGGA sentences"\r
+msgstr "Comandos de Lectura/Escritura en GPGGA"\r
+\r
+msgid "Read/write GPGSA sentences"\r
+msgstr "Comandos de Lectura/Escritura en GPGSA"\r
+\r
+msgid "Read/write GPRMC sentences"\r
+msgstr "Comandos de Lectura/Escritura en GPRMC"\r
+\r
+msgid "Read/write GPVTG sentences"\r
+msgstr "Comandos de Lectura/Escritura en GPVTG"\r
+\r
+msgid "Read/Write time format (i.e. HH:mm:ss xx)"\r
+msgstr "Formato de hora en Lectura/Escritura (p.e. HH:mm:ss xx)"\r
+\r
+msgid "Retain at most this number of position points (0 = unlimited)"\r
+msgstr "Almacenar como poco este número de puntos de posición (0=ilimitado)"\r
+\r
+msgid "Return current position as a waypoint"\r
+msgstr "Devolver la posición actual como un punto de ruta"\r
+\r
+msgid "Road type changes"\r
+msgstr "Cambios en tipo de carretera."\r
+\r
+msgid "Shortname is MAC address"\r
+msgstr "El nombre corto es la dirección MAC"\r
+\r
+msgid "Speed in bits per second of serial port (baud=4800)"\r
+msgstr "Velocidad en bits por segundos del puerto serie (4800 baudios)"\r
+\r
+msgid "Split input into separate files"\r
+msgstr "Dividir la entrada en archivos separados"\r
+\r
+msgid "Split into multiple routes at turns"\r
+msgstr "Dividir en múltiples rutas en los giros"\r
+\r
+msgid "Stealth encrypted icon name"\r
+msgstr "Nombre de icono encriptado (Oculto)"\r
+\r
+msgid "Stealth non-encrypted icon name"\r
+msgstr "Nombre de icono no encriptado (Oculto)"\r
+\r
+msgid "String to separate concatenated address fields (default=\", \")"\r
+msgstr "Separar la cadena en campos de dirección concatenados (defecto=\",\")"\r
+\r
+msgid "Suppress labels on generated pins"\r
+msgstr "Quitar etiquetas en pins generados"\r
+\r
+msgid "Suppress retired geocaches"\r
+msgstr "Eliminar geocaches retirados"\r
+\r
+msgid "Suppress separator lines between waypoints"\r
+msgstr "Quitar líneas de separación entre puntos de ruta"\r
+\r
+msgid "Suppress use of handshaking in name of speed"\r
+msgstr "Eliminar uso de handshaking en nombre de velocidad (???)"\r
+\r
+msgid "Suppress whitespace in generated shortnames"\r
+msgstr "Quitar espacios en nombres cortos generados"\r
+\r
+msgid "Symbol to use for point data"\r
+msgstr "Símbolo a usar para los datos de puntos"\r
+\r
+msgid "Synthesize track times"\r
+msgstr "Tratar tiempos de las trazas"\r
+\r
+msgid "Target GPX version for output"\r
+msgstr "Versión GPX destino para la salida"\r
+\r
+msgid "Temperature unit [c=Celsius, f=Fahrenheit]"\r
+msgstr "Unidades de temperatura [c=Celsius, f=Fahrenheit]"\r
+\r
+msgid "The icon description is already the marker"\r
+msgstr "La descripción del icono ya es el marcador"\r
+\r
+msgid "Type of .an1 file"\r
+msgstr "Fichero de tipo .an1"\r
+\r
+msgid "Units for altitude (f)eet or (m)etres"\r
+msgstr "Unidades de altitud (p)íes o (m)etros"\r
+\r
+msgid "Units used when writing comments ('s'tatute or 'm'etric)"\r
+msgstr "Unidades utilizadas en los comentarios ('i'mperial o 'm'étrico')"\r
+\r
+msgid "UPPERCASE synth. shortnames"\r
+msgstr "Nombres cortos a generar en MAYÚSCULAS"\r
+\r
+msgid "Use depth values on output (default is ignore)"\r
+msgstr "Usar valores de profundidad en resultado (por defecto: ignorar)"\r
+\r
+msgid "Use proximity values on output (default is ignore)"\r
+msgstr "Usar valores de proximidad en resultado (por defecto: ignorar)"\r
+\r
+msgid "Use shortname instead of description"\r
+msgstr "Usar el nombre corto en lugar de la descripción"\r
+\r
+msgid "Version of gdb file to generate (1..3)"\r
+msgstr ""\r
+\r
+msgid "Version of mapsource file to generate (3,4,5)"\r
+msgstr "Versión de fichero mapsource a generar (3,4,5)"\r
+\r
+msgid "Waypoint background color"\r
+msgstr "Color de fondo para los puntos de ruta"\r
+\r
+msgid "Waypoint foreground color"\r
+msgstr "Color primer plano para los puntos de ruta"\r
+\r
+msgid "Waypoint type"\r
+msgstr "Tipo de punto de trazado"\r
+\r
+msgid "Width in pixels of map"\r
+msgstr "Ancho del mapa, en pixels"\r
+\r
+msgid "Width of lines, in pixels"\r
+msgstr "Ancho de líneas, en pixels"\r
+\r
+msgid "Write position using this grid."\r
+msgstr ""\r
+\r
+msgid "Write timestamps with offset x to UTC time"\r
+msgstr "Escribir marcas de tiempo con un desplazamiento de 'x' sobre la hora UTC"\r
+\r
+msgid "Write tracks compatible with Carto Exploreur"\r
+msgstr "Crear trazas compatibles con Carto Exploreur"\r
+\r
+msgid "Zoom level to reduce points"\r
+msgstr "Nivel de Zoom para reducir puntos"\r
+\r
+#\r
msgid ""\r
msgstr ""\r
"Project-Id-Version: GPSBabelGUI-2\n"\r
"POT-Creation-Date: 2005-09-22 23:44\n"\r
-"PO-Revision-Date: 2006-11-01 20:06+0100\n"\r
-"Last-Translator: Lilian Morinon <lilian_morinon@yahoo.fr>\n"\r
+"PO-Revision-Date: 2007-05-01 20:29+0100\n"\r
+"Last-Translator: Olaf Klein <o.b.klein@t-online.de>\n"\r
"MIME-Version: 1.0\n"\r
"Content-Type: text/plain; charset=UTF-8\n"\r
"Content-Transfer-Encoding: 8bit\n"\r
#. frmAbout..pnClient..pnCenter..lbCopyRight..Caption\r
#: about.dfm:114\r
msgid "Copyright (C) 2005,2006 Olaf Klein (o.b.klein@gpsbabel.org)"\r
-msgstr ""\r
+msgstr "Copyright (C) 2005,2006 Olaf Klein (o.b.klein@gpsbabel.org)"\r
\r
#. frmAbout..pnClient..pnCenter..lbMoreInfo..Caption\r
#: about.dfm:121\r
#: about.pas:87\r
#: about.pas:88\r
#: about.pas:89\r
+#: about.pas:90\r
msgid "by"\r
msgstr "par"\r
\r
msgid "TZ"\r
msgstr "TZ"\r
\r
-#. frmFilter..gbTracks..cbTrackFixes..Hint\r
+#. frmFilter..gbTracks..cbGPSfix..Hint\r
#: filter.dfm:306\r
msgid "Synthesize GPS fixes (PPS, DGPS, 3D, 2D)"\r
msgstr ""\r
\r
-#. frmFilter..gbTracks..cbTrackFixes..Caption\r
+#. frmFilter..gbTracks..cbGPSfix..Caption\r
#: filter.dfm:307\r
msgid "GPS fixes"\r
msgstr ""\r
\r
#. frmFilter..gbTracks..cbTrackCourse..Hint\r
-#: filter.dfm:315\r
+#: filter.dfm:316\r
msgid "Synthesize course values"\r
msgstr ""\r
\r
#. frmFilter..gbTracks..cbTrackCourse..Caption\r
-#: filter.dfm:316\r
+#: filter.dfm:317\r
msgid "Course"\r
msgstr ""\r
\r
#. frmFilter..gbTracks..cbTrackSpeed..Hint\r
-#: filter.dfm:324\r
+#: filter.dfm:325\r
msgid "Synthesize speed values"\r
msgstr ""\r
\r
#. frmFilter..gbTracks..cbTrackSpeed..Caption\r
-#: filter.dfm:325\r
+#: filter.dfm:326\r
msgid "Speed"\r
msgstr "Vitesse"\r
\r
+#. frmFilter..gbTracks..cobGPSfixes....Items.Strings\r
+#: filter.dfm:338\r
+msgid "none"\r
+msgstr ""\r
+\r
+#. frmFilter..gbTracks..cobGPSfixes....Items.Strings\r
+#: filter.dfm:339\r
+msgid "pps"\r
+msgstr ""\r
+\r
+#. frmFilter..gbTracks..cobGPSfixes....Items.Strings\r
+#: filter.dfm:340\r
+msgid "dgps"\r
+msgstr ""\r
+\r
#. frmFilter..gbRoutes..Caption\r
-#: filter.dfm:335\r
+#: filter.dfm:352\r
msgid "&Routes && Tracks"\r
msgstr "&Routes && Traces"\r
\r
#. frmFilter..gbRoutes..lbRouteSimplifyCount..Caption\r
-#: filter.dfm:343\r
+#: filter.dfm:360\r
msgid "limit to"\r
msgstr "limiter à"\r
\r
#. frmFilter..gbRoutes..lbRouteSimplifyText..Caption\r
-#: filter.dfm:351\r
+#: filter.dfm:368\r
msgid "Points"\r
msgstr "Points"\r
\r
#. frmFilter..gbRoutes..cbRouteSimplify..Hint\r
-#: filter.dfm:358\r
+#: filter.dfm:375\r
msgid "Simplify routes and tracks by limited number of points"\r
msgstr "Simplifier les routes et traces en limitant le nombre de points"\r
\r
#. frmFilter..gbRoutes..cbRouteSimplify..Caption\r
-#: filter.dfm:359\r
+#: filter.dfm:376\r
msgid "Simplify"\r
msgstr "Simplifier"\r
\r
#. frmFilter..gbRoutes..edRoutesSimplifyMaxPoints..Hint\r
-#: filter.dfm:368\r
+#: filter.dfm:385\r
msgid "Upper limit of points for routes and tracks"\r
msgstr "Limite maximum du nombre de points pour les routes et traces"\r
\r
#. frmFilter..gbRoutes..cbReverse..Hint\r
-#: filter.dfm:390\r
+#: filter.dfm:407\r
msgid "Reverse routes and tracks"\r
msgstr "Inverser les routes et les traces"\r
\r
#. frmFilter..gbRoutes..cbReverse..Caption\r
-#: filter.dfm:391\r
+#: filter.dfm:408\r
msgid "Reverse"\r
msgstr "Inverser"\r
\r
#. frmFilter..pnBottom..btnOK..Caption\r
-#: filter.dfm:408\r
+#: filter.dfm:425\r
msgid "OK"\r
msgstr "OK"\r
\r
#. frmFilter..pnBottom..BitBtn1..Caption\r
-#: filter.dfm:444\r
+#: filter.dfm:461\r
msgid "File based filters"\r
msgstr "Filtres de fichiers"\r
\r
#. frmFilter..gbWaypoints..Caption\r
#. frmMain..pnBottom..cbWaypoints..Caption\r
-#: filter.dfm:473\r
+#: filter.dfm:490\r
#: main.dfm:555\r
msgid "&Waypoints"\r
msgstr "&Waypoints"\r
\r
#. frmFilter..gbWaypoints..lbWayptRadiusLat..Caption\r
-#: filter.dfm:482\r
+#: filter.dfm:499\r
msgid "Latitude"\r
msgstr "Latitude"\r
\r
#. frmFilter..gbWaypoints..lbWayptRadiusLon..Caption\r
-#: filter.dfm:490\r
+#: filter.dfm:507\r
msgid "Longitude"\r
msgstr "Longitude"\r
\r
#. frmFilter..gbWaypoints..cbWayptMergeDupLoc..Hint\r
-#: filter.dfm:498\r
+#: filter.dfm:515\r
msgid "Merge waypoints with duplicate locations"\r
msgstr "Fusionner les waypoints avec les positions en doublon"\r
\r
#. frmFilter..gbWaypoints..cbWayptMergeDupLoc..Caption\r
-#: filter.dfm:499\r
+#: filter.dfm:516\r
msgid "locations"\r
msgstr "positions"\r
\r
#. frmFilter..gbWaypoints..cbWayptMergeDupNames..Hint\r
-#: filter.dfm:508\r
+#: filter.dfm:525\r
msgid "Merge waypoints with duplicate \"short name\""\r
msgstr "Fusionner les waypoints avec les doublons \"short name\""\r
\r
#. frmFilter..gbWaypoints..cbWayptMergeDupNames..Caption\r
-#: filter.dfm:509\r
+#: filter.dfm:526\r
msgid "\"short names\""\r
msgstr "\"noms courts\""\r
\r
#. frmFilter..gbWaypoints..cbWayptMergeDistance..Hint\r
-#: filter.dfm:518\r
+#: filter.dfm:535\r
msgid "Merge waypoints separated by less then"\r
msgstr "Fusionner les waypoints séparé par moins de"\r
\r
#. frmFilter..gbWaypoints..cbWayptMergeDistance..Caption\r
-#: filter.dfm:519\r
+#: filter.dfm:536\r
msgid "Position"\r
msgstr "Position"\r
\r
#. frmFilter..gbWaypoints..cbWayptSort..Hint\r
-#: filter.dfm:547\r
+#: filter.dfm:564\r
msgid "Sort waypoints by \"short name\" or by description"\r
msgstr "Trier les waypoints par \"short name\" ou par description"\r
\r
#. frmFilter..gbWaypoints..cbWayptSort..Caption\r
-#: filter.dfm:548\r
+#: filter.dfm:565\r
msgid "Sort"\r
msgstr "Trier"\r
\r
#. frmFilter..gbWaypoints..cbWayptMergeDups..Hint\r
-#: filter.dfm:556\r
+#: filter.dfm:573\r
msgid "Merge duplicate waypoints"\r
msgstr "Fusionner les waypoints identiques"\r
\r
#. frmFilter..gbWaypoints..cbWayptMergeDups..Caption\r
-#: filter.dfm:557\r
+#: filter.dfm:574\r
msgid "Duplicates"\r
msgstr "Doublons"\r
\r
#. frmFilter..gbWaypoints..cbWayptRadius..Hint\r
-#: filter.dfm:566\r
+#: filter.dfm:583\r
msgid "Include points based on their proximity to central point"\r
msgstr "Inclure les points en fonction de la proximité d'un point central"\r
\r
#. frmFilter..gbWaypoints..cbWayptRadius..Caption\r
-#: filter.dfm:567\r
+#: filter.dfm:584\r
msgid "Radius"\r
msgstr "Rayon"\r
\r
#. frmFilter..gbWaypoints..edWayptRadiusLat..Hint\r
-#: filter.dfm:595\r
+#: filter.dfm:612\r
msgid "Latitude of central point"\r
msgstr "Latitude du point central"\r
\r
#. frmFilter..gbWaypoints..edWayptRadiusLon..Hint\r
-#: filter.dfm:605\r
+#: filter.dfm:622\r
msgid "Longitude of central point"\r
msgstr "Longitude du point central"\r
\r
#. frmFilter..gbTransform..Caption\r
-#: filter.dfm:617\r
+#: filter.dfm:634\r
msgid "Transformation"\r
msgstr ""\r
\r
#. frmFilter..gbTransform..cbTransform..Caption\r
-#: filter.dfm:634\r
+#: filter.dfm:651\r
msgid "Transform"\r
msgstr ""\r
\r
#. frmFilter..gbTransform..cbTransformDelete..Hint\r
-#: filter.dfm:643\r
+#: filter.dfm:660\r
msgid "Delete source data after transformation"\r
msgstr ""\r
\r
#. frmFilter..gbTransform..cbTransformDelete..Caption\r
-#: filter.dfm:644\r
+#: filter.dfm:661\r
msgid "Delete"\r
msgstr ""\r
\r
#: main.dfm:38\r
#: main.pas:270\r
#: main.pas:275\r
-#: main.pas:471\r
-#: main.pas:872\r
+#: main.pas:467\r
+#: main.pas:868\r
msgid "Input"\r
msgstr "Entrée"\r
\r
#: main.dfm:1443\r
#: main.dfm:1455\r
#: main.dfm:1460\r
-#: main.pas:869\r
-#: main.pas:923\r
+#: main.pas:865\r
+#: main.pas:919\r
msgid "File"\r
msgstr "Fichier"\r
\r
#: main.dfm:222\r
#: main.pas:271\r
#: main.pas:276\r
-#: main.pas:480\r
-#: main.pas:926\r
+#: main.pas:476\r
+#: main.pas:922\r
msgid "Output"\r
msgstr "Sortie"\r
\r
msgid "Spanish"\r
msgstr "Espagnol"\r
\r
-#: about.pas:131\r
+#: about.pas:90\r
+#: select.pas:85\r
+msgid "Hungarian"\r
+msgstr "Hongrois"\r
+\r
+#: about.pas:132\r
msgid ""\r
"Please have a look at the file README.GUI.\n"\r
"\n"\r
"Vous trouverez toutes l'information nécessaire\n"\r
"pour faire fonctionner GPSBabelGUI dans votre langue."\r
\r
-#: filter.pas:178\r
-#: filter.pas:179\r
-#: filter.pas:182\r
-#: filter.pas:183\r
+#: filter.pas:180\r
+#: filter.pas:181\r
+#: filter.pas:184\r
+#: filter.pas:185\r
msgid "Waypoints"\r
msgstr "Waypoints"\r
\r
-#: filter.pas:178\r
-#: filter.pas:179\r
#: filter.pas:180\r
#: filter.pas:181\r
+#: filter.pas:182\r
+#: filter.pas:183\r
msgid "Routes"\r
msgstr "Routes"\r
\r
-#: filter.pas:180\r
-#: filter.pas:181\r
#: filter.pas:182\r
#: filter.pas:183\r
+#: filter.pas:184\r
+#: filter.pas:185\r
msgid "Tracks"\r
msgstr "Traces"\r
\r
-#: filter.pas:222\r
+#: filter.pas:224\r
msgid "Feet"\r
msgstr "Pieds"\r
\r
-#: filter.pas:223\r
+#: filter.pas:225\r
msgid "Meter"\r
msgstr "Mètre"\r
\r
-#: filter.pas:226\r
+#: filter.pas:228\r
msgid "Miles"\r
msgstr "Miles"\r
\r
-#: filter.pas:227\r
+#: filter.pas:229\r
msgid "Kilometer"\r
msgstr "Kilomètre"\r
\r
-#: filter.pas:237\r
+#: filter.pas:239\r
msgid "Not supported by gpsbabel.exe, release %s!"\r
msgstr "Non supporté par GPSBabel, version %s!"\r
\r
-#: filter.pas:285\r
+#: filter.pas:288\r
msgid "Value (%s) out of range (%g to %g)!"\r
msgstr "Valeurs (%s) en dehors des limites (%g à %g)!"\r
\r
-#: filter.pas:590\r
+#: filter.pas:593\r
#: options.pas:661\r
msgid "Discard changes?"\r
msgstr "Ne pas tenir compte des changements?"\r
msgid "Special release"\r
msgstr "Version spéciale"\r
\r
-#: main.pas:346\r
+#: main.pas:342\r
msgid "The file \"gpsbabel.exe\" found in current directory is too old!"\r
msgstr "Le fichier \"gpsbabel.exe\" présent dans le répertoir courant est trop vieux!"\r
\r
-#: main.pas:420\r
-#: main.pas:554\r
+#: main.pas:416\r
+#: main.pas:550\r
msgid "All files|*.*"\r
msgstr "Tous les fichiers|*.*"\r
\r
-#: main.pas:488\r
+#: main.pas:484\r
msgid "Select and edit options for \"%s\""\r
msgstr "Selctionner et éditer les options pour \"%s\""\r
\r
-#: main.pas:492\r
+#: main.pas:488\r
msgid "No options available for \"%s\""\r
msgstr "Pas d'option disponible pour \"%s\""\r
\r
#. s := s + '-1';\r
-#: main.pas:607\r
+#: main.pas:603\r
msgid "File %s not found."\r
msgstr "Fichier%s non trouvé."\r
\r
-#: main.pas:668\r
+#: main.pas:664\r
msgid "File \"%s\" exists ! Overwrite ?"\r
msgstr "Le fichier \"%s\" existe déjà ! Ecraser ?"\r
\r
-#: main.pas:669\r
+#: main.pas:665\r
msgid "Warning"\r
msgstr "Attention"\r
\r
-#: main.pas:702\r
+#: main.pas:698\r
msgid "Could not run \"gpsbabel.exe\"!"\r
msgstr "Impossible d'éxécuter \"gpsbabel.exe\"!"\r
\r
-#: main.pas:711\r
+#: main.pas:707\r
msgid "Sorry, gpsbabel.exe reported problems!"\r
msgstr "Désolé, GPSBabel a reporté un problème !"\r
\r
-#: main.pas:713\r
+#: main.pas:709\r
msgid "Converted successfully from \"%s\" to \"%s\"."\r
msgstr "Conversion de \"%s\" à \"%s\" réussie."\r
\r
-#: main.pas:824\r
+#: main.pas:820\r
msgid "GPSBabel, version %s"\r
msgstr "GPSBabel, version %s"\r
\r
-#: main.pas:858\r
-#: main.pas:913\r
+#: main.pas:854\r
+#: main.pas:909\r
msgid "Port"\r
msgstr "Port"\r
\r
-#: main.pas:1017\r
+#: main.pas:1013\r
msgid "Options for \"%s\""\r
msgstr "Options pour \"%s\""\r
\r
-#: main.pas:1207\r
-#: main.pas:1277\r
+#: main.pas:1203\r
+#: main.pas:1273\r
msgid "Choose language"\r
msgstr "Choisir la langue"\r
\r
-#: main.pas:1207\r
+#: main.pas:1203\r
msgid "for GUIBabelGUI"\r
msgstr "pour GPSBabelGUI"\r
\r
-#: main.pas:1277\r
+#: main.pas:1273\r
msgid "for export"\r
msgstr "pour export"\r
\r
msgstr ""\r
"Project-Id-Version: GPSBabel command line program\n"\r
"POT-Creation-Date: 2005-11-19 01:14\n"\r
-"PO-Revision-Date: 2006-10-29 19:18+0100\n"\r
-"Last-Translator: Lilian Morinon <lilian_morinon@yahoo.fr>\n"\r
+"PO-Revision-Date: 2007-05-01 20:21+0100\n"\r
+"Last-Translator: Olaf Klein <o.b.klein@t-online.de>\n"\r
"Language-Team: \n"\r
"MIME-Version: 1.0\n"\r
"Content-Type: text/plain; charset=utf-8\n"\r
msgid "Append icon_descr to description"\r
msgstr "Ajouter icon_descr à la description"\r
\r
+msgid "Append realtime positioning data to the output file instead of truncating"\r
+msgstr ""\r
+\r
msgid "Base URL for link tag in output"\r
msgstr "URL de base pour l'étiquette de lien en sortie"\r
\r
msgid "Default icon name"\r
msgstr "Nom d'icone par défaut"\r
\r
+msgid "Default location"\r
+msgstr ""\r
+\r
msgid "Default speed for waypoints (knots/hr)"\r
msgstr ""\r
\r
msgid "Include groundspeak logs if present"\r
msgstr "Inclure les logs groundspeak si disponible"\r
\r
+msgid "Include major turn points (with description) from calculated route"\r
+msgstr ""\r
+\r
msgid "Include only via stations in route"\r
msgstr "Inclure seulement les étapes dans la route"\r
\r
msgid "Use shortname instead of description"\r
msgstr "Utiliser le nom court au lieu de la description"\r
\r
-msgid "Version of gdb file to generate (1,2)"\r
-msgstr "Version du fichier gdb à créer (1,2)"\r
+msgid "Version of gdb file to generate (1..3)"\r
+msgstr ""\r
\r
msgid "Version of mapsource file to generate (3,4,5)"\r
msgstr "Version du fichier mapsource à créer (3,4,5)"\r
msgid "Width of lines, in pixels"\r
msgstr "Largeur des lignes en pixels"\r
\r
+msgid "Write position using this grid."\r
+msgstr ""\r
+\r
msgid "Write timestamps with offset x to UTC time"\r
msgstr "Ecrire l'horodatage avec un décalage de x par rapport à l'heure UTC"\r
\r
--- /dev/null
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: GPSBabel Hungarian translation 0.1\n"
+"POT-Creation-Date: 2005-12-06 17:57\n"
+"PO-Revision-Date: 2007-06-07 02:37+0100\n"
+"Last-Translator: Sprok Bence <sprok.bence@gmail.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: dxgettext 1.2.1\n"
+"Language-Team: Sprok Bence <sprok.bence@gmail.com>\n"
+"X-Poedit-Language: Hungarian\n"
+"X-Poedit-Country: HUNGARY\n"
+
+#. frmAbout..Caption
+#: about.dfm:5
+msgid "About"
+msgstr "Névjegy"
+
+#. frmAbout..pnClient..pnCenter..lbHint1..Caption
+#: about.dfm:76
+msgid "This program is part of the GPSBabel project, hosted on"
+msgstr "Ez a program a GPSBabel Projekt része, letölthető:"
+
+#. frmAbout..pnClient..pnCenter..lbVersion..Caption
+#: about.dfm:84
+#: about.pas:80
+msgid "Version"
+msgstr "Verziószám"
+
+#. frmAbout..pnClient..pnCenter..lbTranslators..Caption
+#: about.dfm:91
+msgid "Translations"
+msgstr "Fordítások"
+
+#. frmAbout..pnClient..pnCenter..lbURL..Caption
+#: about.dfm:98
+msgid "www.gpsbabel.org"
+msgstr "www.gpsbabel.org"
+
+#. frmAbout..pnClient..pnCenter..lbCopyRight..Caption
+#: about.dfm:114
+msgid "Copyright (C) 2005,2006 Olaf Klein (o.b.klein@gpsbabel.org)"
+msgstr "Copyright (C) 2005,2006 Olaf Klein (o.b.klein@gpsbabel.org)"
+
+#. frmAbout..pnClient..pnCenter..lbMoreInfo..Caption
+#: about.dfm:121
+msgid "Find more info at"
+msgstr "További információ:"
+
+#. frmAbout..pnClient..pnCenter..stDescription..Caption
+#: about.dfm:149
+msgid "The frontend for GPSBabel command line program"
+msgstr "Grafikus felület a GPSbabel programhoz"
+
+#. frmAbout..pnClient..pnCenter..stLicense..Caption
+#: about.dfm:163
+msgid "THIS SOFTWARE MAY ONLY BE LICENSED FREE OF CHARGE"
+msgstr "EZ A SZOFTVER INGYENES, KERESKEDELMI ÁRUSÍTÁSA TILOS!"
+
+#. frmAbout..pnClient..pnCenter..btnNewLanguage..Caption
+#: about.dfm:192
+msgid "Adding a new language"
+msgstr "Új nyelv hozzáadása"
+
+#. frmFilter..Caption
+#: filter.dfm:6
+msgid "Filter"
+msgstr "Szűrő"
+
+#. frmFilter..gbTracks..Caption
+#. frmMain..pnBottom..cbTracks..Caption
+#: filter.dfm:31
+#: main.dfm:581
+msgid "&Tracks"
+msgstr "Nyomvonalak"
+
+# It doesn't make sense to use 'by' in the hungarian language. This simply can be taken out.
+#. frmFilter..gbTracks..lbTimePlusMinus..Caption
+#: filter.dfm:39
+#: about.pas:87
+#: about.pas:88
+#: about.pas:89
+#: about.pas:90
+msgid "by"
+msgstr " "
+
+#. frmFilter..gbTracks..lbTimeDays..Caption
+#: filter.dfm:46
+msgid "day(s), "
+msgstr "nappal"
+
+#. frmFilter..gbTracks..lbTimeHours..Caption
+#: filter.dfm:53
+msgid "hour(s), "
+msgstr "órával"
+
+#. frmFilter..gbTracks..lbTimeMinutes..Caption
+#: filter.dfm:60
+msgid "minute(s),"
+msgstr "perccel"
+
+#. frmFilter..gbTracks..lbTimeSeconds..Caption
+#: filter.dfm:67
+msgid "second(s)"
+msgstr "másodperccel"
+
+#. frmFilter..gbTracks..cbTrackTitle..Hint
+#: filter.dfm:74
+msgid "Title for new tracks"
+msgstr "Az új nyomvonal címe"
+
+#. frmFilter..gbTracks..cbTrackTitle..Caption
+#: filter.dfm:76
+msgid "Tit&le"
+msgstr "Cím"
+
+#. frmFilter..gbTracks..cbTrackSplit..Hint
+#: filter.dfm:95
+msgid "Split track into several tracks depending on date of trackpoint"
+msgstr "Nyomvonalak szétvágása dátum alapján"
+
+#. frmFilter..gbTracks..cbTrackSplit..Caption
+#: filter.dfm:96
+msgid "&Split"
+msgstr "Szétvágás"
+
+#. frmFilter..gbTracks..cbTrackTime..Hint
+#: filter.dfm:104
+msgid "Shift all tracks"
+msgstr "Az összes nyomvonal időbeli eltolása"
+
+#. frmFilter..gbTracks..cbTrackTime..Caption
+#: filter.dfm:105
+msgid "&Move"
+msgstr "Eltolás"
+
+#. frmFilter..gbTracks..cbTrackStart..Hint
+#: filter.dfm:197
+msgid "Take only trackpoints starting at"
+msgstr "Csak ettől az időponttól jelentkező nyomvonalpontok meghagyása"
+
+#. frmFilter..gbTracks..cbTrackStart..Caption
+#: filter.dfm:198
+msgid "Start at"
+msgstr "Vágás (-tól)"
+
+#. frmFilter..gbTracks..cbTrackStop..Caption
+#: filter.dfm:237
+msgid "stop at"
+msgstr "-ig"
+
+#. frmFilter..gbTracks..cbTrackPack..Hint
+#: filter.dfm:276
+msgid "Pack all tracks into one track (No duplicate timestamps)"
+msgstr "Csomagolj össze minden nyomvonalat egybe (nincs időazonosság)"
+
+#. frmFilter..gbTracks..cbTrackPack..Caption
+#: filter.dfm:277
+msgid "&Pack (or)"
+msgstr "Csomag (vagy)"
+
+#. frmFilter..gbTracks..cbTrackMerge..Hint
+#: filter.dfm:286
+msgid "Merge all tracks into one track"
+msgstr "Fűzz össze minden nyomvonalat egybe"
+
+#. frmFilter..gbTracks..cbTrackMerge..Caption
+#: filter.dfm:287
+msgid "Merge"
+msgstr "Fűzés"
+
+#. frmFilter..gbTracks..cbTrackRangeTimeZone..Hint
+#: filter.dfm:296
+msgid "Shift start/stop by local timezone offset"
+msgstr "A -tól -ig helyi időzóna eltolással"
+
+#. frmFilter..gbTracks..cbTrackRangeTimeZone..Caption
+#: filter.dfm:297
+msgid "TZ"
+msgstr "IZ"
+
+#. frmFilter..gbTracks..cbGPSfix..Hint
+#: filter.dfm:306
+msgid "Synthesize GPS fixes (PPS, DGPS, 3D, 2D)"
+msgstr "GPS fixek előállítása (PPS, DGPS, 3D, 2D)"
+
+#. frmFilter..gbTracks..cbGPSfix..Caption
+#: filter.dfm:307
+msgid "GPS fixes"
+msgstr "GPS fixek"
+
+#. frmFilter..gbTracks..cbTrackCourse..Hint
+#: filter.dfm:316
+msgid "Synthesize course values"
+msgstr "Azimut értékek előállítása"
+
+#. frmFilter..gbTracks..cbTrackCourse..Caption
+#: filter.dfm:317
+msgid "Course"
+msgstr "Azimut"
+
+#. frmFilter..gbTracks..cbTrackSpeed..Hint
+#: filter.dfm:325
+msgid "Synthesize speed values"
+msgstr "Sebesség értékek előállítása"
+
+#. frmFilter..gbTracks..cbTrackSpeed..Caption
+#: filter.dfm:326
+msgid "Speed"
+msgstr "Sebesség"
+
+#. frmFilter..gbTracks..cobGPSfixes....Items.Strings
+#: filter.dfm:338
+msgid "none"
+msgstr "nincs"
+
+#. frmFilter..gbTracks..cobGPSfixes....Items.Strings
+#: filter.dfm:339
+msgid "pps"
+msgstr "pps"
+
+#. frmFilter..gbTracks..cobGPSfixes....Items.Strings
+#: filter.dfm:340
+msgid "dgps"
+msgstr "dgps"
+
+#. frmFilter..gbRoutes..Caption
+#: filter.dfm:352
+msgid "&Routes && Tracks"
+msgstr "Útvonalak és Nyomvonalak"
+
+#. frmFilter..gbRoutes..lbRouteSimplifyCount..Caption
+#: filter.dfm:360
+msgid "limit to"
+msgstr "max."
+
+#. frmFilter..gbRoutes..lbRouteSimplifyText..Caption
+#: filter.dfm:368
+msgid "Points"
+msgstr "Pontig"
+
+#. frmFilter..gbRoutes..cbRouteSimplify..Hint
+#: filter.dfm:375
+msgid "Simplify routes and tracks by limited number of points"
+msgstr "Nyomvonalak és útvonalak egyszerűsítése meghatározott pontig"
+
+#. frmFilter..gbRoutes..cbRouteSimplify..Caption
+#: filter.dfm:376
+msgid "Simplify"
+msgstr "Egyszerűsítés"
+
+#. frmFilter..gbRoutes..edRoutesSimplifyMaxPoints..Hint
+#: filter.dfm:385
+msgid "Upper limit of points for routes and tracks"
+msgstr "A pontok felső korlátja"
+
+#. frmFilter..gbRoutes..cbReverse..Hint
+#: filter.dfm:407
+msgid "Reverse routes and tracks"
+msgstr "Útvonalak és nyomvonalak irányának megfordítása"
+
+#. frmFilter..gbRoutes..cbReverse..Caption
+#: filter.dfm:408
+msgid "Reverse"
+msgstr "Megfordítás"
+
+#. frmFilter..pnBottom..btnOK..Caption
+#: filter.dfm:425
+msgid "OK"
+msgstr "OK"
+
+#. frmFilter..pnBottom..BitBtn1..Caption
+#: filter.dfm:461
+msgid "File based filters"
+msgstr "Fájl alapú szűrő"
+
+#. frmFilter..gbWaypoints..Caption
+#. frmMain..pnBottom..cbWaypoints..Caption
+#: filter.dfm:490
+#: main.dfm:555
+msgid "&Waypoints"
+msgstr "Útpontok"
+
+#. frmFilter..gbWaypoints..lbWayptRadiusLat..Caption
+#: filter.dfm:499
+msgid "Latitude"
+msgstr "Szélesség"
+
+#. frmFilter..gbWaypoints..lbWayptRadiusLon..Caption
+#: filter.dfm:507
+msgid "Longitude"
+msgstr "Hosszúság"
+
+#. frmFilter..gbWaypoints..cbWayptMergeDupLoc..Hint
+#: filter.dfm:515
+msgid "Merge waypoints with duplicate locations"
+msgstr "Azonos helyen levő pontok egyesítése"
+
+#. frmFilter..gbWaypoints..cbWayptMergeDupLoc..Caption
+#: filter.dfm:516
+msgid "locations"
+msgstr "hely szerint"
+
+#. frmFilter..gbWaypoints..cbWayptMergeDupNames..Hint
+#: filter.dfm:525
+msgid "Merge waypoints with duplicate \"short name\""
+msgstr "Útpontok egyesítése azonos \"rövid név\" -el"
+
+#. frmFilter..gbWaypoints..cbWayptMergeDupNames..Caption
+#: filter.dfm:526
+msgid "\"short names\""
+msgstr "\"rövid név\""
+
+#. frmFilter..gbWaypoints..cbWayptMergeDistance..Hint
+#: filter.dfm:535
+msgid "Merge waypoints separated by less then"
+msgstr "Útpontok egyesítése, ha a távolság kevesebb mint:"
+
+#. frmFilter..gbWaypoints..cbWayptMergeDistance..Caption
+#: filter.dfm:536
+msgid "Position"
+msgstr "Távolság"
+
+#. frmFilter..gbWaypoints..cbWayptSort..Hint
+#: filter.dfm:564
+msgid "Sort waypoints by \"short name\" or by description"
+msgstr "Rendezés \"rövid név\" vagy megjegyzés alapján"
+
+#. frmFilter..gbWaypoints..cbWayptSort..Caption
+#: filter.dfm:565
+msgid "Sort"
+msgstr "Rendezés"
+
+#. frmFilter..gbWaypoints..cbWayptMergeDups..Hint
+#: filter.dfm:573
+msgid "Merge duplicate waypoints"
+msgstr "Duplikált útpontok egyesítése"
+
+#. frmFilter..gbWaypoints..cbWayptMergeDups..Caption
+#: filter.dfm:574
+msgid "Duplicates"
+msgstr "Duplázás"
+
+#. frmFilter..gbWaypoints..cbWayptRadius..Hint
+#: filter.dfm:583
+msgid "Include points based on their proximity to central point"
+msgstr "A pontok a meghatározott körön belül maradnak"
+
+#. frmFilter..gbWaypoints..cbWayptRadius..Caption
+#: filter.dfm:584
+msgid "Radius"
+msgstr "Sugár"
+
+#. frmFilter..gbWaypoints..edWayptRadiusLat..Hint
+#: filter.dfm:612
+msgid "Latitude of central point"
+msgstr "Középpont (lat)"
+
+#. frmFilter..gbWaypoints..edWayptRadiusLon..Hint
+#: filter.dfm:622
+msgid "Longitude of central point"
+msgstr "Középpont (lon)"
+
+#. frmFilter..gbTransform..Caption
+#: filter.dfm:634
+msgid "Transformation"
+msgstr "Átalakítás"
+
+#. frmFilter..gbTransform..cbTransform..Caption
+#: filter.dfm:651
+msgid "Transform"
+msgstr "Konverzió"
+
+#. frmFilter..gbTransform..cbTransformDelete..Hint
+#: filter.dfm:660
+msgid "Delete source data after transformation"
+msgstr "Konverzió után az eredeti anyag törlése"
+
+#. frmFilter..gbTransform..cbTransformDelete..Caption
+#: filter.dfm:661
+msgid "Delete"
+msgstr "Törlés"
+
+#. frmMain..pnTop..gbInput..Caption
+#: main.dfm:38
+#: main.pas:270
+#: main.pas:275
+#: main.pas:467
+#: main.pas:868
+msgid "Input"
+msgstr "Bemenet"
+
+#. frmMain..pnTop..gbInput..sbOpenFile..Hint
+#: main.dfm:45
+msgid "Start the file open dialog"
+msgstr "Megnyitás"
+
+#. frmMain..pnTop..gbInput..lbInputOpts..Caption
+#. frmMain..pnTop..gbOutput..lbOutputOpts..Caption
+#. frmMain..ActionList1..acOptionsSourceFormat..Category
+#. frmMain..ActionList1..acOptionsTargetFormat..Category
+#. frmMain..ActionList1..acOptionsEnableCharactersetTransformation..Category
+#: main.dfm:68
+#: main.dfm:229
+#: main.dfm:1418
+#: main.dfm:1423
+#: main.dfm:1437
+msgid "Options"
+msgstr "Beállítások"
+
+#. frmMain..pnTop..gbInput..lbInputFormat..Caption
+#. frmMain..pnTop..gbOutput..lbOutputFormat..Caption
+#: main.dfm:76
+#: main.dfm:259
+msgid "Format"
+msgstr "Formátum"
+
+#. frmMain..pnTop..gbInput..lbInputFile..Caption
+#. frmMain..pnTop..gbOutput..lbOutputFile..Caption
+#. frmMain..ActionList1..acFileExit..Category
+#. frmMain..ActionList1..acFileClearMemo..Category
+#. frmMain..ActionList1..acFileOutputToScreen..Category
+#. frmMain..ActionList1..acFileChangeLanguage..Category
+#. frmMain..ActionList1..acFileExportCSV..Category
+#: main.dfm:83
+#: main.dfm:266
+#: main.dfm:1399
+#: main.dfm:1428
+#: main.dfm:1443
+#: main.dfm:1455
+#: main.dfm:1460
+#: main.pas:865
+#: main.pas:919
+msgid "File"
+msgstr "Fájl"
+
+#. frmMain..pnTop..gbInput..chbInputDevice..Hint
+#: main.dfm:112
+msgid "Read data from device instead from file"
+msgstr "Beolvasás készülékből"
+
+#. frmMain..pnTop..gbInput..chbInputDevice..Caption
+#. frmMain..pnTop..gbOutput..chbOutputDevice..Caption
+#: main.dfm:115
+#: main.dfm:299
+msgid "Device"
+msgstr "Készülék"
+
+#. frmMain..pnTop..gbInput..edInputOpts..Hint
+#: main.dfm:124
+msgid "Options for the selected input format"
+msgstr "A bemeneti fájl beállításai"
+
+#. frmMain..pnTop..gbInput..edInputFile..Hint
+#: main.dfm:135
+msgid "Read data from given filename"
+msgstr "Beolvasási az adott fájlból"
+
+#. frmMain..pnTop..gbInput..cbInputLang..Hint
+#: main.dfm:146
+msgid "Characterset for input data"
+msgstr "A bemeneti adat karakterkészlete"
+
+#. frmMain..pnTop..gbInput..cbInputLang....Items.Strings
+#. frmMain..pnTop..gbOutput..cbOutputLang....Items.Strings
+#: main.dfm:152
+#: main.dfm:363
+msgid "- default -"
+msgstr "- alapértelmezett -"
+
+#. frmMain..pnTop..gbInput..cbInputDevice..Hint
+#: main.dfm:179
+msgid "Read data from device ..."
+msgstr "Adatok olvasása készülékből"
+
+#. frmMain..pnTop..gbInput..cbInputFormatDevice..Hint
+#: main.dfm:194
+msgid "Format for input from device"
+msgstr "A bemeneti készülék adatformátuma"
+
+#. frmMain..pnTop..gbInput..cbInputFormat..Hint
+#: main.dfm:208
+msgid "Format for input from file"
+msgstr "A bemeneti fájl formátuma"
+
+#. frmMain..pnTop..gbOutput..Caption
+#: main.dfm:222
+#: main.pas:271
+#: main.pas:276
+#: main.pas:476
+#: main.pas:922
+msgid "Output"
+msgstr "Kimenet"
+
+#. frmMain..pnTop..gbOutput..sbSaveFile..Hint
+#: main.dfm:273
+msgid "Start the file save dialog"
+msgstr "Mentés"
+
+#. frmMain..pnTop..gbOutput..chbOutputDevice..Hint
+#: main.dfm:296
+msgid "Write data to device instead to file"
+msgstr "Kimenetként készülékbe töltés"
+
+#. frmMain..pnTop..gbOutput..cbOutputFormatDevice..Hint
+#: main.dfm:309
+msgid "Format for ouput to device"
+msgstr "A kimeneti készülék adatformátuma"
+
+#. frmMain..pnTop..gbOutput..edOutputOpts..Hint
+#: main.dfm:321
+msgid "Options for the selected output format"
+msgstr "A kimeneti fájl beállításai"
+
+#. frmMain..pnTop..gbOutput..cbOutputFormat..Hint
+#: main.dfm:332
+msgid "Format for output to file"
+msgstr "A kimeneti fájl formátuma"
+
+#. frmMain..pnTop..gbOutput..edOutputFile..Hint
+#: main.dfm:345
+msgid "Write data to given filename"
+msgstr "Konvertálás az adott nevű fájlba"
+
+#. frmMain..pnTop..gbOutput..cbOutputLang..Hint
+#: main.dfm:357
+msgid "Characterset for output data"
+msgstr "A kimeneti adat karakterkészlete"
+
+#. frmMain..pnTop..gbOutput..cbOutputDevice..Hint
+#: main.dfm:390
+msgid "Write data to device ..."
+msgstr "Adatok küldése készülékbe"
+
+#. frmMain..pnBottom..lbWhat..Caption
+#: main.dfm:415
+msgid "What ?"
+msgstr "Mit?"
+
+#. frmMain..pnBottom..cbWaypoints..Hint
+#: main.dfm:554
+msgid "Process waypoint information"
+msgstr "Útpont adatok feldolgozása"
+
+#. frmMain..pnBottom..cbRoutes..Hint
+#: main.dfm:568
+msgid "Process route information"
+msgstr "Útvonal adatok feldolgozása"
+
+#. frmMain..pnBottom..cbRoutes..Caption
+#: main.dfm:569
+msgid "&Routes"
+msgstr "Útvonalak"
+
+#. frmMain..pnBottom..cbTracks..Hint
+#: main.dfm:580
+msgid "Process track information"
+msgstr "Nyomvonal adatok feldolgozása"
+
+#. frmMain..pnBottom..btnFilter..Caption
+#. frmMain..ActionList1..acFilterSelect..Caption
+#: main.dfm:594
+#: main.dfm:1393
+msgid "&Filter"
+msgstr "Szűrő"
+
+#. frmMain..pnBottom..btnProcess..Hint
+#: main.dfm:638
+msgid "Start data conversion"
+msgstr "Konverzió indítása"
+
+#. frmMain..pnBottom..btnProcess..Caption
+#. frmMain..ActionList1..acConvert..Caption
+#: main.dfm:641
+#: main.dfm:1386
+msgid "let's go"
+msgstr "Gyerünk!"
+
+#. frmMain..OpenDialog..Filter
+#: main.dfm:701
+msgid "Garmin Mapsource mps|*.mps|All files|*.*"
+msgstr "Garmin Mapsource mps|*.mps|Minden fájl|*.*"
+
+#. frmMain..SaveDialog..Filter
+#: main.dfm:707
+msgid "All file(s)|*.*|Garmin MapSource mps|*.mps"
+msgstr "Minden fájl|*.*|Garmin MapSource mps|*.mps"
+
+#. frmMain..ActionList1..acConvert..Category
+#. frmMain..ActionList1..acFilterSelect..Category
+#: main.dfm:1385
+#: main.dfm:1392
+msgid "Babel"
+msgstr "Babel"
+
+#. frmMain..ActionList1..acFilterSelect..Hint
+#: main.dfm:1394
+msgid "Filter incomming data before writing them to file or device"
+msgstr "A bemeneti adatok szűrése a konverzió alatt"
+
+#. frmMain..ActionList1..acFileExit..Caption
+#: main.dfm:1400
+msgid "E&xit"
+msgstr "Kilépés"
+
+#. frmMain..ActionList1..acHelpAbout..Category
+#. frmMain..ActionList1..acHelpIntro..Category
+#. frmMain..ActionList1..acHelpReadme..Category
+#: main.dfm:1404
+#: main.dfm:1409
+#: main.dfm:1413
+msgid "Help"
+msgstr "Segítség"
+
+#. frmMain..ActionList1..acHelpAbout..Caption
+#: main.dfm:1405
+msgid "&About"
+msgstr "Névjegy"
+
+#. frmMain..ActionList1..acHelpIntro..Caption
+#: main.dfm:1410
+msgid "&Intro"
+msgstr "Bevezetés"
+
+#. frmMain..ActionList1..acHelpReadme..Caption
+#. frmReadme..Caption
+#: main.dfm:1414
+#: readme.dfm:6
+msgid "GPSBabel README"
+msgstr "GPSBabel OLVASSEL!"
+
+#. frmMain..ActionList1..acOptionsSourceFormat..Caption
+#: main.dfm:1419
+msgid "... for source format"
+msgstr "... a bemeneti adathoz"
+
+#. frmMain..ActionList1..acOptionsTargetFormat..Caption
+#: main.dfm:1424
+msgid "... for target format"
+msgstr "... a kimeneti adathoz"
+
+#. frmMain..ActionList1..acFileClearMemo..Caption
+#: main.dfm:1429
+msgid "Clear output"
+msgstr "Mejegyzések törlése"
+
+#. frmMain..ActionList1..acFileClearMemo..Hint
+#: main.dfm:1430
+msgid "Clear messages"
+msgstr "Üzenetek törlése"
+
+#. frmMain..ActionList1..acOptionsEnableCharactersetTransformation..Caption
+#: main.dfm:1438
+msgid "Enable characterset transformation"
+msgstr "Karakterkészlet módosításának engedélyezése"
+
+#. frmMain..ActionList1..acFileOutputToScreen..Caption
+#: main.dfm:1444
+msgid "Output to screen"
+msgstr "Kimenetet a képernyőre"
+
+#. frmMain..ActionList1..acFileChangeLanguage..Caption
+#: main.dfm:1456
+msgid "Change language"
+msgstr "Nyelv választása"
+
+#. frmMain..ActionList1..acFileExportCSV..Caption
+#: main.dfm:1461
+msgid "Export gpsbabel.csv (unicode)"
+msgstr "Export gpsbabel.csv (unicode)"
+
+#. frmMain..MainMenu1..mnuFile..Caption
+#: main.dfm:1469
+msgid "&File"
+msgstr "Fájl"
+
+#. frmMain..MainMenu1..mnuFile..File1..Caption
+#: main.dfm:1477
+msgid "Export"
+msgstr "Export"
+
+#. frmMain..MainMenu1..mnuOptions..Caption
+#: main.dfm:1498
+msgid "&Options"
+msgstr "Beállítások"
+
+#. frmMain..MainMenu1..mnuOptions..mnuSynthesizeShortNames..Caption
+#: main.dfm:1500
+msgid "Synthesize shortnames"
+msgstr "Rövidnevek előállítása"
+
+#. frmMain..MainMenu1..mnuOptions..mnuSynthesizeShortNames....Hint
+#: main.dfm:1503
+msgid "Ignore shortnames from source data and synthesize them from description or notes"
+msgstr "Rövidnevek figyelmen kívül hagyása, előállítása a megjegyzésekből"
+
+#. frmMain..MainMenu1..mnuOptions..mnuOptionsForceDataType..Caption
+#: main.dfm:1507
+msgid "Force selected GPS data types (nuketypes filter)"
+msgstr "Kényszerített GPS adatformátum választás (nuketypes szűrő)"
+
+#. frmMain..MainMenu1..mnuHelp..Caption
+#: main.dfm:1548
+msgid "&Help"
+msgstr "Súgó"
+
+#. frmOptions..Caption
+#: options.dfm:5
+msgid "Options for ..."
+msgstr "Beállítások ..."
+
+#. frmSelect..pnBottom..btnCancel..Caption
+#: select.dfm:66
+msgid "Abort"
+msgstr "Mégse"
+
+#: about.pas:87
+#: select.pas:81
+msgid "German"
+msgstr "Német"
+
+#: about.pas:88
+#: select.pas:83
+msgid "French"
+msgstr "Francia"
+
+#: about.pas:89
+#: select.pas:82
+msgid "Spanish"
+msgstr "Spanyol"
+
+#: about.pas:90
+#: select.pas:85
+msgid "Hungarian"
+msgstr "Magyar"
+
+#: about.pas:132
+msgid ""
+"Please have a look at the file README.GUI.\n"
+"\n"
+"There you will find all information you need to\n"
+"get GPSBabelGUI working in your own language."
+msgstr ""
+"Kérem nézze meg a README.GUI fájlt.\n"
+"\n"
+"Abban talál további információkat arra vonatkozólag, hogy\n"
+"érheti el a GPSBabelGUI programot más nyelveken is."
+
+#: filter.pas:180
+#: filter.pas:181
+#: filter.pas:184
+#: filter.pas:185
+msgid "Waypoints"
+msgstr "Útpontok"
+
+#: filter.pas:180
+#: filter.pas:181
+#: filter.pas:182
+#: filter.pas:183
+msgid "Routes"
+msgstr "Útvonalak"
+
+#: filter.pas:182
+#: filter.pas:183
+#: filter.pas:184
+#: filter.pas:185
+msgid "Tracks"
+msgstr "Nyomvonalak"
+
+#: filter.pas:224
+msgid "Feet"
+msgstr "láb"
+
+#: filter.pas:225
+msgid "Meter"
+msgstr "méter"
+
+#: filter.pas:228
+msgid "Miles"
+msgstr "mérföld"
+
+#: filter.pas:229
+msgid "Kilometer"
+msgstr "kilométer"
+
+#: filter.pas:239
+msgid "Not supported by gpsbabel.exe, release %s!"
+msgstr "Nem támogatott a gpsbabel ezen verziójával (%s)!"
+
+#: filter.pas:288
+msgid "Value (%s) out of range (%g to %g)!"
+msgstr "Az érték: (%s) ,túlcsordul (%g to %g)!"
+
+#: filter.pas:593
+#: options.pas:661
+msgid "Discard changes?"
+msgstr "Változások eldobása?"
+
+#: main.pas:244
+msgid "Internal development release"
+msgstr "Belső, fejlesztői kiadás"
+
+#: main.pas:246
+msgid "BETA"
+msgstr "BÉTA"
+
+#: main.pas:248
+msgid "Private release"
+msgstr "Kiadás saját használatra"
+
+#: main.pas:250
+msgid "Special release"
+msgstr "Speciális kiadás"
+
+#: main.pas:342
+msgid "The file \"gpsbabel.exe\" found in current directory is too old!"
+msgstr "A \"gpsbabel.exe\" ezen verziója túl régi!"
+
+#: main.pas:416
+#: main.pas:550
+msgid "All files|*.*"
+msgstr "Minden fájl|*.*"
+
+#: main.pas:484
+msgid "Select and edit options for \"%s\""
+msgstr "Beállítási lehetőségek \"%s\""
+
+#: main.pas:488
+msgid "No options available for \"%s\""
+msgstr "Nincs beállítási lehetőség \"%s\""
+
+#. s := s + '-1';
+#: main.pas:603
+msgid "File %s not found."
+msgstr "%s fájl nem található."
+
+#: main.pas:664
+msgid "File \"%s\" exists ! Overwrite ?"
+msgstr "\"%s\" fájl már létezik! Felülírja ?"
+
+#: main.pas:665
+msgid "Warning"
+msgstr "Figyelem"
+
+#: main.pas:698
+msgid "Could not run \"gpsbabel.exe\"!"
+msgstr "Futási hiba \"gpsbabel.exe\"!"
+
+#: main.pas:707
+msgid "Sorry, gpsbabel.exe reported problems!"
+msgstr "Sajnálom, a program hibát észlelt!"
+
+#: main.pas:709
+msgid "Converted successfully from \"%s\" to \"%s\"."
+msgstr "Sikeres konverzió \"%s\" -ból \"%s\" -ba."
+
+#: main.pas:820
+msgid "GPSBabel, version %s"
+msgstr "GPSBabel, verzió %s"
+
+#: main.pas:854
+#: main.pas:909
+msgid "Port"
+msgstr "Port"
+
+#: main.pas:1013
+msgid "Options for \"%s\""
+msgstr "Beállítások \"%s\""
+
+#: main.pas:1203
+#: main.pas:1273
+msgid "Choose language"
+msgstr "Nyelv választása"
+
+#: main.pas:1203
+msgid "for GUIBabelGUI"
+msgstr "GUIBabelGUI-hoz"
+
+#: main.pas:1273
+msgid "for export"
+msgstr "exportálásra"
+
+#. override;
+#: options.pas:147
+msgid "Be aware, that most options are made for the output side. "
+msgstr "Figyelem, ezek a beállítások a kiemetre hatnak."
+
+#: options.pas:148
+msgid "Currently we don't have a flag which tells us which direction is used by the options."
+msgstr "Jelenleg nincs rá mód, hogy a beállítás oda-vissza hasson."
+
+#: options.pas:208
+msgid "Short \"%s\""
+msgstr "Rendezés \"%s\""
+
+#: options.pas:332
+msgid "Invalid line format!"
+msgstr "Érvénytelen formátum!"
+
+#: options.pas:353
+msgid "Unknown option \"%s\"!"
+msgstr "Ismeretlen beállítás"
+
+#: select.pas:84
+msgid "English"
+msgstr "Angol"
+
+#: utils.pas:119
+msgid "Error WINAPI: Could not create \"NamedPipe\"!"
+msgstr "Hiba WINAPI: Hozzáférés sikertelen \"NamedPipe\"!"
+
+#: utils.pas:124
+msgid "\"gpsbabel.exe\" not found!!!"
+msgstr "\"gpsbabel.exe\" nem található!!!"
+
+#. dwCreationFlags, // creation flags
+#: utils.pas:143
+msgid "Could not run \"gpsbabel.exe\" (Error %d)!"
+msgstr "Futtatási hiba \"gpsbabel.exe\" (Error %d)!"
+
+#: utils.pas:176
+msgid "\"gpsbabel.exe\" returned error 0x%x (%d)"
+msgstr "\"gpsbabel.exe\" visszatérési hiba 0x%x (%d)"
+
--- /dev/null
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Borland Delphi Hungarian translation 0.1\n"
+"POT-Creation-Date: 2007-05-01 20:52\n"
+"PO-Revision-Date: 2007-06-07 02:36+0100\n"
+"Last-Translator: Sprok Bence <sprok.bence@gmail.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: dxgettext 1.2.1\n"
+"Language-Team: Sprok Bence <sprok.bence@gmail.com>\n"
+"X-Poedit-Language: Hungarian\n"
+"X-Poedit-Country: HUNGARY\n"
+
+#. Programmer's name for it: SCreateRegKeyError
+#: Rtl/Sys/comconst.pas:15
+msgid "Error creating system registry entry"
+msgstr "Hiba a regisztrációs bejegyzés készítésekor"
+
+#. Programmer's name for it: SOleError
+#. Programmer's name for it: SOleError
+#: Rtl/Sys/comconst.pas:16
+#: Vcl/oleconst.pas:18
+msgid "OLE error %.8x"
+msgstr "OLE hiba %.8x"
+
+#. Programmer's name for it: SObjectFactoryMissing
+#: Rtl/Sys/comconst.pas:17
+msgid "Object factory for class %s missing"
+msgstr ""
+
+#. Programmer's name for it: STypeInfoMissing
+#: Rtl/Sys/comconst.pas:18
+msgid "Type information missing for class %s"
+msgstr ""
+
+#. Programmer's name for it: SBadTypeInfo
+#: Rtl/Sys/comconst.pas:19
+msgid "Incorrect type information for class %s"
+msgstr ""
+
+#. Programmer's name for it: SDispIntfMissing
+#: Rtl/Sys/comconst.pas:20
+msgid "Dispatch interface missing from class %s"
+msgstr ""
+
+#. Programmer's name for it: SNoMethod
+#: Rtl/Sys/comconst.pas:21
+msgid "Method '%s' not supported by automation object"
+msgstr ""
+
+#. Programmer's name for it: SVarNotObject
+#. Programmer's name for it: SVarNotAutoObject
+#: Rtl/Sys/comconst.pas:22
+#: Vcl/oleconst.pas:20
+msgid "Variant does not reference an automation object"
+msgstr ""
+
+#. Programmer's name for it: SDCOMNotInstalled
+#: Rtl/Sys/comconst.pas:23
+msgid "DCOM not installed"
+msgstr "DCOM nincs installálva"
+
+#. Programmer's name for it: SDAXError
+#: Rtl/Sys/comconst.pas:24
+msgid "DAX Error"
+msgstr "DAX Hiba"
+
+#. Programmer's name for it: SAutomationWarning
+#: Rtl/Sys/comconst.pas:26
+msgid "COM Server Warning"
+msgstr "COM Server figyelmeztetés"
+
+#. Programmer's name for it: SNoCloseActiveServer1
+#: Rtl/Sys/comconst.pas:29
+msgid "There are still active COM objects in this application. One or more clients may have references to these objects, so manually closing "
+msgstr "Még jelenleg is futnak COM parancsok. Egy vagy több kliens még lehet, hogy hivatkozik ezekre. Kézi leállítás szükséges."
+
+#. Programmer's name for it: SNoCloseActiveServer2
+#: Rtl/Sys/comconst.pas:32
+msgid ""
+"this application may cause those client application(s) to fail.\n"
+"\n"
+"Are you sure you want to close this application?"
+msgstr ""
+"ez az alkalmazás befagyaszthatja mások munkáját.\n"
+"\n"
+"Biztos, hogy be akarja zárni az alkalmazást?"
+
+#. Programmer's name for it: SAutoSessionExclusive
+#: Vcl/bdeconst.pas:15
+msgid "Cannot enable AutoSessionName property with more than one session on a form or data-module"
+msgstr ""
+
+#. Programmer's name for it: SAutoSessionExists
+#: Vcl/bdeconst.pas:16
+msgid "Cannot add a session to the form or data-module while session '%s' has AutoSessionName enabled"
+msgstr ""
+
+#. Programmer's name for it: SAutoSessionActive
+#: Vcl/bdeconst.pas:17
+msgid "Cannot modify SessionName while AutoSessionName is enabled"
+msgstr ""
+
+#. Programmer's name for it: SDuplicateDatabaseName
+#: Vcl/bdeconst.pas:18
+msgid "Duplicate database name '%s'"
+msgstr "Duplikált adatbázis-név '%s'"
+
+#. Programmer's name for it: SDuplicateSessionName
+#: Vcl/bdeconst.pas:19
+msgid "Duplicate session name '%s'"
+msgstr "Duplikált munkafázis név '%s'"
+
+#. Programmer's name for it: SInvalidSessionName
+#: Vcl/bdeconst.pas:20
+msgid "Invalid session name %s"
+msgstr "Érvénytelen munkafázis-név %s"
+
+#. Programmer's name for it: SDatabaseNameMissing
+#: Vcl/bdeconst.pas:21
+msgid "Database name missing"
+msgstr "Hiányzó adatbázis-név"
+
+#. Programmer's name for it: SSessionNameMissing
+#: Vcl/bdeconst.pas:22
+msgid "Session name missing"
+msgstr "Hiányzó munkafázis-név"
+
+#. Programmer's name for it: SDatabaseOpen
+#: Vcl/bdeconst.pas:23
+msgid "Cannot perform this operation on an open database"
+msgstr "A művelet nem hajtható végre nyitott adatbázison"
+
+#. Programmer's name for it: SDatabaseClosed
+#: Vcl/bdeconst.pas:24
+msgid "Cannot perform this operation on a closed database"
+msgstr "A művelet nem hajtható végre zárt adatbázison"
+
+#. Programmer's name for it: SDatabaseHandleSet
+#: Vcl/bdeconst.pas:25
+msgid "Database handle owned by a different session"
+msgstr "Az adatbázis-kezelés jogosultsága egy másik munkafolyamathoz tartozik"
+
+#. Programmer's name for it: SSessionActive
+#: Vcl/bdeconst.pas:26
+msgid "Cannot perform this operation on an active session"
+msgstr "A műveletet nem lehet végrehajtani az aktív munkafolyamaton"
+
+#. Programmer's name for it: SHandleError
+#: Vcl/bdeconst.pas:27
+msgid "Error creating cursor handle"
+msgstr ""
+
+#. Programmer's name for it: SInvalidFloatField
+#: Vcl/bdeconst.pas:28
+msgid "Cannot convert field '%s' to a floating point value"
+msgstr "Az értéket '%s' nem lehet lebegőpontos értékké alakítani"
+
+#. Programmer's name for it: SInvalidIntegerField
+#: Vcl/bdeconst.pas:29
+msgid "Cannot convert field '%s' to an integer value"
+msgstr ""
+
+#. Programmer's name for it: STableMismatch
+#: Vcl/bdeconst.pas:30
+msgid "Source and destination tables are incompatible"
+msgstr ""
+
+#. Programmer's name for it: SFieldAssignError
+#: Vcl/bdeconst.pas:31
+msgid "Fields '%s' and '%s' are not assignment compatible"
+msgstr ""
+
+#. Programmer's name for it: SNoReferenceTableName
+#: Vcl/bdeconst.pas:32
+msgid "ReferenceTableName not specified for field '%s'"
+msgstr ""
+
+#. Programmer's name for it: SCompositeIndexError
+#: Vcl/bdeconst.pas:33
+msgid "Cannot use array of Field values with Expression Indices"
+msgstr ""
+
+#. Programmer's name for it: SInvalidBatchMove
+#: Vcl/bdeconst.pas:34
+msgid "Invalid batch move parameters"
+msgstr ""
+
+#. Programmer's name for it: SEmptySQLStatement
+#: Vcl/bdeconst.pas:35
+msgid "No SQL statement available"
+msgstr ""
+
+#. Programmer's name for it: SNoParameterValue
+#: Vcl/bdeconst.pas:36
+msgid "No value for parameter '%s'"
+msgstr ""
+
+#. Programmer's name for it: SNoParameterType
+#: Vcl/bdeconst.pas:37
+msgid "No parameter type for parameter '%s'"
+msgstr ""
+
+#. Programmer's name for it: SLoginError
+#: Vcl/bdeconst.pas:38
+msgid "Cannot connect to database '%s'"
+msgstr ""
+
+#. Programmer's name for it: SInitError
+#: Vcl/bdeconst.pas:39
+msgid "An error occurred while attempting to initialize the Borland Database Engine (error $%.4x)"
+msgstr ""
+
+#. Programmer's name for it: SDatasetDesigner
+#: Vcl/bdeconst.pas:40
+msgid "Fields E&ditor..."
+msgstr ""
+
+#. Programmer's name for it: SFKInternalCalc
+#: Vcl/bdeconst.pas:41
+msgid "&InternalCalc"
+msgstr ""
+
+#. Programmer's name for it: SFKAggregate
+#: Vcl/bdeconst.pas:42
+msgid "&Aggregate"
+msgstr ""
+
+#. Programmer's name for it: SDatabaseEditor
+#: Vcl/bdeconst.pas:43
+msgid "Database &Editor..."
+msgstr ""
+
+#. Programmer's name for it: SExplore
+#: Vcl/bdeconst.pas:44
+msgid "E&xplore"
+msgstr ""
+
+#. Programmer's name for it: SLinkDesigner
+#: Vcl/bdeconst.pas:45
+msgid "Field '%s', from the Detail Fields list, must be linked"
+msgstr ""
+
+#. Programmer's name for it: SLinkDetail
+#: Vcl/bdeconst.pas:46
+msgid "'%s' cannot be opened"
+msgstr ""
+
+#. Programmer's name for it: SLinkMasterSource
+#: Vcl/bdeconst.pas:47
+msgid "The MasterSource property of '%s' must be linked to a DataSource"
+msgstr ""
+
+#. Programmer's name for it: SLinkMaster
+#: Vcl/bdeconst.pas:48
+msgid "Unable to open the MasterSource Table"
+msgstr ""
+
+#. Programmer's name for it: SGQEVerb
+#: Vcl/bdeconst.pas:49
+msgid "&SQL Builder..."
+msgstr ""
+
+#. Programmer's name for it: SBindVerb
+#: Vcl/bdeconst.pas:50
+msgid "Define &Parameters..."
+msgstr ""
+
+#. Programmer's name for it: SDisconnectDatabase
+#: Vcl/bdeconst.pas:52
+msgid "Database is currently connected. Disconnect and continue?"
+msgstr ""
+
+#. Programmer's name for it: SBDEError
+#: Vcl/bdeconst.pas:53
+msgid "BDE error $%.4x"
+msgstr ""
+
+#. Programmer's name for it: SLookupSourceError
+#: Vcl/bdeconst.pas:54
+msgid "Unable to use duplicate DataSource and LookupSource"
+msgstr ""
+
+#. Programmer's name for it: SLookupTableError
+#: Vcl/bdeconst.pas:55
+msgid "LookupSource must be connected to TTable component"
+msgstr ""
+
+#. Programmer's name for it: SLookupIndexError
+#: Vcl/bdeconst.pas:56
+msgid "%s must be the lookup table's active index"
+msgstr ""
+
+#. Programmer's name for it: SParameterTypes
+#: Vcl/bdeconst.pas:57
+msgid ";Input;Output;Input/Output;Result"
+msgstr ""
+
+#. Programmer's name for it: SInvalidParamFieldType
+#: Vcl/bdeconst.pas:58
+msgid "Must have a valid field type selected"
+msgstr ""
+
+#. Programmer's name for it: STruncationError
+#: Vcl/bdeconst.pas:59
+msgid "Parameter '%s' truncated on output"
+msgstr ""
+
+#. Programmer's name for it: SDataTypes
+#: Vcl/bdeconst.pas:60
+msgid ";String;SmallInt;Integer;Word;Boolean;Float;Currency;BCD;Date;Time;DateTime;;;;Blob;Memo;Graphic;;;;;Cursor;"
+msgstr ""
+
+#. Programmer's name for it: SResultName
+#: Vcl/bdeconst.pas:61
+msgid "Result"
+msgstr ""
+
+#. Programmer's name for it: SDBCaption
+#: Vcl/bdeconst.pas:62
+msgid "%s%s%s Database"
+msgstr ""
+
+#. Programmer's name for it: SParamEditor
+#: Vcl/bdeconst.pas:63
+msgid "%s%s%s Parameters"
+msgstr ""
+
+#. Programmer's name for it: SDatasetEditor
+#: Vcl/bdeconst.pas:64
+msgid "%s%s%s"
+msgstr ""
+
+#. Programmer's name for it: SIndexFilesEditor
+#: Vcl/bdeconst.pas:65
+msgid "%s%s%s Index Files"
+msgstr ""
+
+#. Programmer's name for it: SNoIndexFiles
+#. Programmer's name for it: srNone
+#: Vcl/bdeconst.pas:66
+#: Vcl/consts.pas:189
+msgid "(None)"
+msgstr ""
+
+#. Programmer's name for it: SIndexDoesNotExist
+#: Vcl/bdeconst.pas:67
+msgid "Index does not exist. Index: %s"
+msgstr ""
+
+#. Programmer's name for it: SNoTableName
+#: Vcl/bdeconst.pas:68
+msgid "Missing TableName property"
+msgstr ""
+
+#. Programmer's name for it: SNoDataSetField
+#: Vcl/bdeconst.pas:69
+msgid "Missing DataSetField property"
+msgstr ""
+
+#. Programmer's name for it: SBatchExecute
+#: Vcl/bdeconst.pas:70
+msgid "E&xecute"
+msgstr ""
+
+#. Programmer's name for it: SNoCachedUpdates
+#: Vcl/bdeconst.pas:71
+msgid "Not in cached update mode"
+msgstr ""
+
+#. Programmer's name for it: SInvalidAliasName
+#: Vcl/bdeconst.pas:72
+msgid "Invalid alias name %s"
+msgstr ""
+
+#. Programmer's name for it: SDBGridColEditor
+#: Vcl/bdeconst.pas:73
+msgid "Co&lumns Editor..."
+msgstr ""
+
+#. Programmer's name for it: SNoFieldAccess
+#: Vcl/bdeconst.pas:74
+msgid "Cannot access field '%s' in a filter"
+msgstr ""
+
+#. Programmer's name for it: SUpdateSQLEditor
+#: Vcl/bdeconst.pas:75
+msgid "&UpdateSQL Editor..."
+msgstr ""
+
+#. Programmer's name for it: SNoDataSet
+#: Vcl/bdeconst.pas:76
+msgid "No dataset association"
+msgstr ""
+
+#. Programmer's name for it: SUntitled
+#: Vcl/bdeconst.pas:77
+msgid "Untitled Application"
+msgstr ""
+
+#. Programmer's name for it: SUpdateWrongDB
+#: Vcl/bdeconst.pas:78
+msgid "Cannot update, %s is not owned by %s"
+msgstr ""
+
+#. Programmer's name for it: SUpdateFailed
+#: Vcl/bdeconst.pas:79
+msgid "Update failed"
+msgstr ""
+
+#. Programmer's name for it: SSQLGenSelect
+#: Vcl/bdeconst.pas:80
+msgid "Must select at least one key field and one update field"
+msgstr ""
+
+#. Programmer's name for it: SSQLNotGenerated
+#: Vcl/bdeconst.pas:81
+msgid "Update SQL statements not generated, exit anyway?"
+msgstr ""
+
+#. Programmer's name for it: SSQLDataSetOpen
+#: Vcl/bdeconst.pas:82
+msgid "Unable to determine field names for %s"
+msgstr ""
+
+#. Programmer's name for it: SLocalTransDirty
+#: Vcl/bdeconst.pas:83
+msgid "The transaction isolation level must be dirty read for local databases"
+msgstr ""
+
+#. Programmer's name for it: SPrimary
+#: Vcl/bdeconst.pas:84
+msgid "Primary"
+msgstr ""
+
+#. Programmer's name for it: SMissingDataSet
+#: Vcl/bdeconst.pas:85
+msgid "Missing DataSet property"
+msgstr ""
+
+#. Programmer's name for it: SNoProvider
+#: Vcl/bdeconst.pas:86
+msgid "No provider available"
+msgstr ""
+
+#. Programmer's name for it: SNotAQuery
+#: Vcl/bdeconst.pas:87
+msgid "Dataset is not a query"
+msgstr ""
+
+#. Programmer's name for it: SOpenFileTitle
+#: Vcl/consts.pas:15
+msgid "Open"
+msgstr ""
+
+#. Programmer's name for it: SAssignError
+#: Vcl/consts.pas:16
+msgid "Cannot assign a %s to a %s"
+msgstr ""
+
+#. Programmer's name for it: SFCreateError
+#: Vcl/consts.pas:17
+msgid "Cannot create file %s"
+msgstr ""
+
+#. Programmer's name for it: SFOpenError
+#: Vcl/consts.pas:18
+msgid "Cannot open file %s"
+msgstr ""
+
+#. Programmer's name for it: SReadError
+#: Vcl/consts.pas:19
+msgid "Stream read error"
+msgstr ""
+
+#. Programmer's name for it: SWriteError
+#: Vcl/consts.pas:20
+msgid "Stream write error"
+msgstr ""
+
+#. Programmer's name for it: SMemoryStreamError
+#: Vcl/consts.pas:21
+msgid "Out of memory while expanding memory stream"
+msgstr ""
+
+#. Programmer's name for it: SCantWriteResourceStreamError
+#: Vcl/consts.pas:22
+msgid "Can't write to a read-only resource stream"
+msgstr ""
+
+#. Programmer's name for it: SDuplicateReference
+#: Vcl/consts.pas:23
+msgid "WriteObject called twice for the same instance"
+msgstr ""
+
+#. Programmer's name for it: SClassNotFound
+#: Vcl/consts.pas:24
+msgid "Class %s not found"
+msgstr ""
+
+#. Programmer's name for it: SInvalidImage
+#. Programmer's name for it: SInvalidStreamFormat
+#: Vcl/consts.pas:25
+#: Vcl/oleconst.pas:29
+msgid "Invalid stream format"
+msgstr ""
+
+#. Programmer's name for it: SResNotFound
+#: Vcl/consts.pas:26
+msgid "Resource %s not found"
+msgstr ""
+
+#. Programmer's name for it: SClassMismatch
+#: Vcl/consts.pas:27
+msgid "Resource %s is of incorrect class"
+msgstr ""
+
+#. Programmer's name for it: SListIndexError
+#: Vcl/consts.pas:28
+msgid "List index out of bounds (%d)"
+msgstr ""
+
+#. Programmer's name for it: SListCapacityError
+#: Vcl/consts.pas:29
+msgid "List capacity out of bounds (%d)"
+msgstr ""
+
+#. Programmer's name for it: SListCountError
+#: Vcl/consts.pas:30
+msgid "List count out of bounds (%d)"
+msgstr ""
+
+#. Programmer's name for it: SSortedListError
+#: Vcl/consts.pas:31
+msgid "Operation not allowed on sorted string list"
+msgstr ""
+
+#. Programmer's name for it: SDuplicateString
+#: Vcl/consts.pas:32
+msgid "String list does not allow duplicates"
+msgstr ""
+
+#. Programmer's name for it: SInvalidTabIndex
+#: Vcl/consts.pas:33
+msgid "Tab index out of bounds"
+msgstr ""
+
+#. Programmer's name for it: SInvalidTabPosition
+#: Vcl/consts.pas:34
+msgid "Tab position incompatible with current tab style"
+msgstr ""
+
+#. Programmer's name for it: SInvalidTabStyle
+#: Vcl/consts.pas:35
+msgid "Tab style incompatible with current tab position"
+msgstr ""
+
+#. Programmer's name for it: SDuplicateName
+#: Vcl/consts.pas:36
+msgid "A component named %s already exists"
+msgstr ""
+
+#. Programmer's name for it: SInvalidName
+#: Vcl/consts.pas:37
+msgid "''%s'' is not a valid component name"
+msgstr ""
+
+#. Programmer's name for it: SDuplicateClass
+#: Vcl/consts.pas:38
+msgid "A class named %s already exists"
+msgstr ""
+
+#. Programmer's name for it: SNoComSupport
+#: Vcl/consts.pas:39
+msgid "%s has not been registered as a COM class"
+msgstr ""
+
+#. Programmer's name for it: SInvalidInteger
+#: Vcl/consts.pas:40
+msgid "''%s'' is not a valid integer value"
+msgstr ""
+
+#. Programmer's name for it: SLineTooLong
+#. Programmer's name for it: SOutlineLongLine
+#: Vcl/consts.pas:41
+#: Vcl/consts.pas:148
+msgid "Line too long"
+msgstr ""
+
+#. Programmer's name for it: SInvalidPropertyValue
+#. Programmer's name for it: SInvalidProperty
+#: Vcl/consts.pas:42
+#: Vcl/consts.pas:137
+msgid "Invalid property value"
+msgstr ""
+
+#. Programmer's name for it: SInvalidPropertyPath
+#: Vcl/consts.pas:43
+msgid "Invalid property path"
+msgstr ""
+
+#. Programmer's name for it: SUnknownProperty
+#: Vcl/consts.pas:44
+msgid "Property does not exist"
+msgstr ""
+
+#. Programmer's name for it: SReadOnlyProperty
+#: Vcl/consts.pas:45
+msgid "Property is read-only"
+msgstr ""
+
+#. Programmer's name for it: SPropertyException
+#: Vcl/consts.pas:46
+msgid "Error reading %s%s%s: %s"
+msgstr ""
+
+#. Programmer's name for it: SAncestorNotFound
+#: Vcl/consts.pas:47
+msgid "Ancestor for '%s' not found"
+msgstr ""
+
+#. Programmer's name for it: SInvalidBitmap
+#: Vcl/consts.pas:48
+msgid "Bitmap image is not valid"
+msgstr ""
+
+#. Programmer's name for it: SInvalidIcon
+#: Vcl/consts.pas:49
+msgid "Icon image is not valid"
+msgstr ""
+
+#. Programmer's name for it: SInvalidMetafile
+#: Vcl/consts.pas:50
+msgid "Metafile is not valid"
+msgstr ""
+
+#. Programmer's name for it: SInvalidPixelFormat
+#: Vcl/consts.pas:51
+msgid "Invalid pixel format"
+msgstr ""
+
+#. Programmer's name for it: SBitmapEmpty
+#: Vcl/consts.pas:52
+msgid "Bitmap is empty"
+msgstr ""
+
+#. Programmer's name for it: SScanLine
+#: Vcl/consts.pas:53
+msgid "Scan line index out of range"
+msgstr ""
+
+#. Programmer's name for it: SChangeIconSize
+#: Vcl/consts.pas:54
+msgid "Cannot change the size of an icon"
+msgstr ""
+
+#. Programmer's name for it: SOleGraphic
+#: Vcl/consts.pas:55
+msgid "Invalid operation on TOleGraphic"
+msgstr ""
+
+#. Programmer's name for it: SUnknownExtension
+#: Vcl/consts.pas:56
+msgid "Unknown picture file extension (.%s)"
+msgstr ""
+
+#. Programmer's name for it: SUnknownClipboardFormat
+#: Vcl/consts.pas:57
+msgid "Unsupported clipboard format"
+msgstr ""
+
+#. Programmer's name for it: SOutOfResources
+#: Vcl/consts.pas:58
+msgid "Out of system resources"
+msgstr ""
+
+#. Programmer's name for it: SNoCanvasHandle
+#: Vcl/consts.pas:59
+msgid "Canvas does not allow drawing"
+msgstr ""
+
+#. Programmer's name for it: SInvalidImageSize
+#: Vcl/consts.pas:60
+msgid "Invalid image size"
+msgstr ""
+
+#. Programmer's name for it: STooManyImages
+#: Vcl/consts.pas:61
+msgid "Too many images"
+msgstr ""
+
+#. Programmer's name for it: SDimsDoNotMatch
+#: Vcl/consts.pas:62
+msgid "Image dimensions do not match image list dimensions"
+msgstr ""
+
+#. Programmer's name for it: SInvalidImageList
+#: Vcl/consts.pas:63
+msgid "Invalid ImageList"
+msgstr ""
+
+#. Programmer's name for it: SReplaceImage
+#: Vcl/consts.pas:64
+msgid "Unable to Replace Image"
+msgstr ""
+
+#. Programmer's name for it: SImageIndexError
+#: Vcl/consts.pas:65
+msgid "Invalid ImageList Index"
+msgstr ""
+
+#. Programmer's name for it: SImageReadFail
+#: Vcl/consts.pas:66
+msgid "Failed to read ImageList data from stream"
+msgstr ""
+
+#. Programmer's name for it: SImageWriteFail
+#: Vcl/consts.pas:67
+msgid "Failed to write ImageList data to stream"
+msgstr ""
+
+#. Programmer's name for it: SWindowDCError
+#: Vcl/consts.pas:68
+msgid "Error creating window device context"
+msgstr ""
+
+#. Programmer's name for it: SClientNotSet
+#: Vcl/consts.pas:69
+msgid "Client of TDrag not initialized"
+msgstr ""
+
+#. Programmer's name for it: SWindowClass
+#: Vcl/consts.pas:70
+msgid "Error creating window class"
+msgstr ""
+
+#. Programmer's name for it: SWindowCreate
+#: Vcl/consts.pas:71
+msgid "Error creating window"
+msgstr ""
+
+#. Programmer's name for it: SCannotFocus
+#: Vcl/consts.pas:72
+msgid "Cannot focus a disabled or invisible window"
+msgstr ""
+
+#. Programmer's name for it: SParentRequired
+#: Vcl/consts.pas:73
+msgid "Control '%s' has no parent window"
+msgstr ""
+
+#. Programmer's name for it: SMDIChildNotVisible
+#: Vcl/consts.pas:74
+msgid "Cannot hide an MDI Child Form"
+msgstr ""
+
+#. Programmer's name for it: SVisibleChanged
+#: Vcl/consts.pas:75
+msgid "Cannot change Visible in OnShow or OnHide"
+msgstr ""
+
+#. Programmer's name for it: SCannotShowModal
+#: Vcl/consts.pas:76
+msgid "Cannot make a visible window modal"
+msgstr ""
+
+#. Programmer's name for it: SScrollBarRange
+#: Vcl/consts.pas:77
+msgid "Scrollbar property out of range"
+msgstr ""
+
+#. Programmer's name for it: SPropertyOutOfRange
+#: Vcl/consts.pas:78
+msgid "%s property out of range"
+msgstr ""
+
+#. Programmer's name for it: SMenuIndexError
+#: Vcl/consts.pas:79
+msgid "Menu index out of range"
+msgstr ""
+
+#. Programmer's name for it: SMenuReinserted
+#: Vcl/consts.pas:80
+msgid "Menu inserted twice"
+msgstr ""
+
+#. Programmer's name for it: SMenuNotFound
+#: Vcl/consts.pas:81
+msgid "Sub-menu is not in menu"
+msgstr ""
+
+#. Programmer's name for it: SNoTimers
+#: Vcl/consts.pas:82
+msgid "Not enough timers available"
+msgstr ""
+
+#. Programmer's name for it: SNotPrinting
+#: Vcl/consts.pas:83
+msgid "Printer is not currently printing"
+msgstr ""
+
+#. Programmer's name for it: SPrinting
+#: Vcl/consts.pas:84
+msgid "Printing in progress"
+msgstr ""
+
+#. Programmer's name for it: SPrinterIndexError
+#: Vcl/consts.pas:85
+msgid "Printer index out of range"
+msgstr ""
+
+#. Programmer's name for it: SInvalidPrinter
+#: Vcl/consts.pas:86
+msgid "Printer selected is not valid"
+msgstr ""
+
+#. Programmer's name for it: SDeviceOnPort
+#: Vcl/consts.pas:87
+msgid "%s on %s"
+msgstr ""
+
+#. Programmer's name for it: SGroupIndexTooLow
+#: Vcl/consts.pas:88
+msgid "GroupIndex cannot be less than a previous menu item's GroupIndex"
+msgstr ""
+
+#. Programmer's name for it: STwoMDIForms
+#: Vcl/consts.pas:89
+msgid "Cannot have more than one MDI form per application"
+msgstr ""
+
+#. Programmer's name for it: SNoMDIForm
+#: Vcl/consts.pas:90
+msgid "Cannot create form. No MDI forms are currently active"
+msgstr ""
+
+#. Programmer's name for it: SRegisterError
+#: Vcl/consts.pas:91
+msgid "Invalid component registration"
+msgstr ""
+
+#. Programmer's name for it: SImageCanvasNeedsBitmap
+#: Vcl/consts.pas:92
+msgid "Can only modify an image if it contains a bitmap"
+msgstr ""
+
+#. Programmer's name for it: SControlParentSetToSelf
+#: Vcl/consts.pas:93
+msgid "A control cannot have itself as its parent"
+msgstr ""
+
+#. Programmer's name for it: SOKButton
+#. Programmer's name for it: SMsgDlgOK
+#: Vcl/consts.pas:94
+#: Vcl/consts.pas:157
+msgid "OK"
+msgstr ""
+
+#. Programmer's name for it: SCancelButton
+#. Programmer's name for it: SMsgDlgCancel
+#: Vcl/consts.pas:95
+#: Vcl/consts.pas:158
+msgid "Cancel"
+msgstr ""
+
+#. Programmer's name for it: SYesButton
+#. Programmer's name for it: SMsgDlgYes
+#: Vcl/consts.pas:96
+#: Vcl/consts.pas:155
+msgid "&Yes"
+msgstr ""
+
+#. Programmer's name for it: SNoButton
+#. Programmer's name for it: SMsgDlgNo
+#: Vcl/consts.pas:97
+#: Vcl/consts.pas:156
+msgid "&No"
+msgstr ""
+
+#. Programmer's name for it: SHelpButton
+#. Programmer's name for it: SMsgDlgHelp
+#: Vcl/consts.pas:98
+#: Vcl/consts.pas:159
+msgid "&Help"
+msgstr ""
+
+#. Programmer's name for it: SCloseButton
+#: Vcl/consts.pas:99
+msgid "&Close"
+msgstr ""
+
+#. Programmer's name for it: SIgnoreButton
+#. Programmer's name for it: SMsgDlgIgnore
+#: Vcl/consts.pas:100
+#: Vcl/consts.pas:164
+msgid "&Ignore"
+msgstr ""
+
+#. Programmer's name for it: SRetryButton
+#. Programmer's name for it: SMsgDlgRetry
+#: Vcl/consts.pas:101
+#: Vcl/consts.pas:163
+msgid "&Retry"
+msgstr ""
+
+#. Programmer's name for it: SAbortButton
+#: Vcl/consts.pas:102
+msgid "Abort"
+msgstr ""
+
+#. Programmer's name for it: SAllButton
+#. Programmer's name for it: SMsgDlgAll
+#: Vcl/consts.pas:103
+#: Vcl/consts.pas:165
+msgid "&All"
+msgstr ""
+
+#. Programmer's name for it: SCannotDragForm
+#: Vcl/consts.pas:105
+msgid "Cannot drag a form"
+msgstr ""
+
+#. Programmer's name for it: SPutObjectError
+#: Vcl/consts.pas:106
+msgid "PutObject to undefined item"
+msgstr ""
+
+#. Programmer's name for it: SCardDLLNotLoaded
+#: Vcl/consts.pas:107
+msgid "Could not load CARDS.DLL"
+msgstr ""
+
+#. Programmer's name for it: SDuplicateCardId
+#: Vcl/consts.pas:108
+msgid "Duplicate CardId found"
+msgstr ""
+
+#. Programmer's name for it: SDdeErr
+#: Vcl/consts.pas:110
+msgid "An error returned from DDE ($0%x)"
+msgstr ""
+
+#. Programmer's name for it: SDdeConvErr
+#: Vcl/consts.pas:111
+msgid "DDE Error - conversation not established ($0%x)"
+msgstr ""
+
+#. Programmer's name for it: SDdeMemErr
+#: Vcl/consts.pas:112
+msgid "Error occurred when DDE ran out of memory ($0%x)"
+msgstr ""
+
+#. Programmer's name for it: SDdeNoConnect
+#: Vcl/consts.pas:113
+msgid "Unable to connect DDE conversation"
+msgstr ""
+
+#. Programmer's name for it: SFB
+#: Vcl/consts.pas:115
+msgid "FB"
+msgstr ""
+
+#. Programmer's name for it: SFG
+#: Vcl/consts.pas:116
+msgid "FG"
+msgstr ""
+
+#. Programmer's name for it: SBG
+#: Vcl/consts.pas:117
+msgid "BG"
+msgstr ""
+
+#. Programmer's name for it: SOldTShape
+#: Vcl/consts.pas:118
+msgid "Cannot load older version of TShape"
+msgstr ""
+
+#. Programmer's name for it: SVMetafiles
+#: Vcl/consts.pas:119
+msgid "Metafiles"
+msgstr ""
+
+#. Programmer's name for it: SVEnhMetafiles
+#: Vcl/consts.pas:120
+msgid "Enhanced Metafiles"
+msgstr ""
+
+#. Programmer's name for it: SVIcons
+#: Vcl/consts.pas:121
+msgid "Icons"
+msgstr ""
+
+#. Programmer's name for it: SVBitmaps
+#: Vcl/consts.pas:122
+msgid "Bitmaps"
+msgstr ""
+
+#. Programmer's name for it: SGridTooLarge
+#: Vcl/consts.pas:123
+msgid "Grid too large for operation"
+msgstr ""
+
+#. Programmer's name for it: STooManyDeleted
+#: Vcl/consts.pas:124
+msgid "Too many rows or columns deleted"
+msgstr ""
+
+#. Programmer's name for it: SIndexOutOfRange
+#: Vcl/consts.pas:125
+msgid "Grid index out of range"
+msgstr ""
+
+#. Programmer's name for it: SFixedColTooBig
+#: Vcl/consts.pas:126
+msgid "Fixed column count must be less than column count"
+msgstr ""
+
+#. Programmer's name for it: SFixedRowTooBig
+#: Vcl/consts.pas:127
+msgid "Fixed row count must be less than row count"
+msgstr ""
+
+#. Programmer's name for it: SInvalidStringGridOp
+#: Vcl/consts.pas:128
+msgid "Cannot insert or delete rows from grid"
+msgstr ""
+
+#. Programmer's name for it: SParseError
+#: Vcl/consts.pas:129
+msgid "%s on line %d"
+msgstr ""
+
+#. Programmer's name for it: SIdentifierExpected
+#: Vcl/consts.pas:130
+msgid "Identifier expected"
+msgstr ""
+
+#. Programmer's name for it: SStringExpected
+#: Vcl/consts.pas:131
+msgid "String expected"
+msgstr ""
+
+#. Programmer's name for it: SNumberExpected
+#: Vcl/consts.pas:132
+msgid "Number expected"
+msgstr ""
+
+#. Programmer's name for it: SCharExpected
+#: Vcl/consts.pas:133
+msgid "''%s'' expected"
+msgstr ""
+
+#. Programmer's name for it: SSymbolExpected
+#: Vcl/consts.pas:134
+msgid "%s expected"
+msgstr ""
+
+#. Programmer's name for it: SInvalidNumber
+#: Vcl/consts.pas:135
+msgid "Invalid numeric value"
+msgstr ""
+
+#. Programmer's name for it: SInvalidString
+#: Vcl/consts.pas:136
+msgid "Invalid string constant"
+msgstr ""
+
+#. Programmer's name for it: SInvalidBinary
+#: Vcl/consts.pas:138
+msgid "Invalid binary value"
+msgstr ""
+
+#. Programmer's name for it: SOutlineIndexError
+#: Vcl/consts.pas:139
+msgid "Outline index not found"
+msgstr ""
+
+#. Programmer's name for it: SOutlineExpandError
+#: Vcl/consts.pas:140
+msgid "Parent must be expanded"
+msgstr ""
+
+#. Programmer's name for it: SInvalidCurrentItem
+#: Vcl/consts.pas:141
+msgid "Invalid value for current item"
+msgstr ""
+
+#. Programmer's name for it: SMaskErr
+#: Vcl/consts.pas:142
+msgid "Invalid input value"
+msgstr ""
+
+#. Programmer's name for it: SMaskEditErr
+#: Vcl/consts.pas:143
+msgid "Invalid input value. Use escape key to abandon changes"
+msgstr ""
+
+#. Programmer's name for it: SOutlineError
+#: Vcl/consts.pas:144
+msgid "Invalid outline index"
+msgstr ""
+
+#. Programmer's name for it: SOutlineBadLevel
+#: Vcl/consts.pas:145
+msgid "Incorrect level assignment"
+msgstr ""
+
+#. Programmer's name for it: SOutlineSelection
+#: Vcl/consts.pas:146
+msgid "Invalid selection"
+msgstr ""
+
+#. Programmer's name for it: SOutlineFileLoad
+#: Vcl/consts.pas:147
+msgid "File load error"
+msgstr ""
+
+#. Programmer's name for it: SOutlineMaxLevels
+#: Vcl/consts.pas:149
+msgid "Maximum outline depth exceeded"
+msgstr ""
+
+#. Programmer's name for it: SMsgDlgWarning
+#: Vcl/consts.pas:151
+msgid "Warning"
+msgstr ""
+
+#. Programmer's name for it: SMsgDlgError
+#: Vcl/consts.pas:152
+msgid "Error"
+msgstr ""
+
+#. Programmer's name for it: SMsgDlgInformation
+#: Vcl/consts.pas:153
+msgid "Information"
+msgstr ""
+
+#. Programmer's name for it: SMsgDlgConfirm
+#: Vcl/consts.pas:154
+msgid "Confirm"
+msgstr ""
+
+#. Programmer's name for it: SMsgDlgHelpNone
+#: Vcl/consts.pas:160
+msgid "No help available"
+msgstr ""
+
+#. Programmer's name for it: SMsgDlgHelpHelp
+#: Vcl/consts.pas:161
+msgid "Help"
+msgstr ""
+
+#. Programmer's name for it: SMsgDlgAbort
+#: Vcl/consts.pas:162
+msgid "&Abort"
+msgstr ""
+
+#. Programmer's name for it: SMsgDlgNoToAll
+#: Vcl/consts.pas:166
+msgid "N&o to All"
+msgstr ""
+
+#. Programmer's name for it: SMsgDlgYesToAll
+#: Vcl/consts.pas:167
+msgid "Yes to &All"
+msgstr ""
+
+#. Programmer's name for it: SmkcBkSp
+#: Vcl/consts.pas:169
+msgid "BkSp"
+msgstr ""
+
+#. Programmer's name for it: SmkcTab
+#: Vcl/consts.pas:170
+msgid "Tab"
+msgstr ""
+
+#. Programmer's name for it: SmkcEsc
+#: Vcl/consts.pas:171
+msgid "Esc"
+msgstr ""
+
+#. Programmer's name for it: SmkcEnter
+#: Vcl/consts.pas:172
+msgid "Enter"
+msgstr ""
+
+#. Programmer's name for it: SmkcSpace
+#: Vcl/consts.pas:173
+msgid "Space"
+msgstr ""
+
+#. Programmer's name for it: SmkcPgUp
+#: Vcl/consts.pas:174
+msgid "PgUp"
+msgstr ""
+
+#. Programmer's name for it: SmkcPgDn
+#: Vcl/consts.pas:175
+msgid "PgDn"
+msgstr ""
+
+#. Programmer's name for it: SmkcEnd
+#: Vcl/consts.pas:176
+msgid "End"
+msgstr ""
+
+#. Programmer's name for it: SmkcHome
+#: Vcl/consts.pas:177
+msgid "Home"
+msgstr ""
+
+#. Programmer's name for it: SmkcLeft
+#: Vcl/consts.pas:178
+msgid "Left"
+msgstr ""
+
+#. Programmer's name for it: SmkcUp
+#: Vcl/consts.pas:179
+msgid "Up"
+msgstr ""
+
+#. Programmer's name for it: SmkcRight
+#: Vcl/consts.pas:180
+msgid "Right"
+msgstr ""
+
+#. Programmer's name for it: SmkcDown
+#: Vcl/consts.pas:181
+msgid "Down"
+msgstr ""
+
+#. Programmer's name for it: SmkcIns
+#: Vcl/consts.pas:182
+msgid "Ins"
+msgstr ""
+
+#. Programmer's name for it: SmkcDel
+#: Vcl/consts.pas:183
+msgid "Del"
+msgstr ""
+
+#. Programmer's name for it: SmkcShift
+#: Vcl/consts.pas:184
+msgid "Shift+"
+msgstr ""
+
+#. Programmer's name for it: SmkcCtrl
+#: Vcl/consts.pas:185
+msgid "Ctrl+"
+msgstr ""
+
+#. Programmer's name for it: SmkcAlt
+#: Vcl/consts.pas:186
+msgid "Alt+"
+msgstr ""
+
+#. Programmer's name for it: srUnknown
+#: Vcl/consts.pas:188
+msgid "(Unknown)"
+msgstr ""
+
+#. Programmer's name for it: SOutOfRange
+#: Vcl/consts.pas:190
+msgid "Value must be between %d and %d"
+msgstr ""
+
+#. Programmer's name for it: SCannotCreateName
+#: Vcl/consts.pas:191
+msgid "Cannot create a default method name for an unnamed component"
+msgstr ""
+
+#. Programmer's name for it: SDateEncodeError
+#: Vcl/consts.pas:193
+msgid "Invalid argument to date encode"
+msgstr ""
+
+#. Programmer's name for it: STimeEncodeError
+#: Vcl/consts.pas:194
+msgid "Invalid argument to time encode"
+msgstr ""
+
+#. Programmer's name for it: SInvalidDate
+#: Vcl/consts.pas:195
+msgid "''%s'' is not a valid date"
+msgstr ""
+
+#. Programmer's name for it: SInvalidTime
+#: Vcl/consts.pas:196
+msgid "''%s'' is not a valid time"
+msgstr ""
+
+#. Programmer's name for it: SInvalidDateTime
+#: Vcl/consts.pas:197
+msgid "''%s'' is not a valid date and time"
+msgstr ""
+
+#. Programmer's name for it: SInvalidFileName
+#: Vcl/consts.pas:198
+msgid "Invalid file name - %s"
+msgstr ""
+
+#. Programmer's name for it: SDefaultFilter
+#: Vcl/consts.pas:199
+msgid "All files (*.*)|*.*"
+msgstr ""
+
+#. Programmer's name for it: sAllFilter
+#: Vcl/consts.pas:200
+msgid "All"
+msgstr ""
+
+#. Programmer's name for it: SNoVolumeLabel
+#: Vcl/consts.pas:201
+msgid ": [ - no volume label - ]"
+msgstr ""
+
+#. Programmer's name for it: SInsertLineError
+#: Vcl/consts.pas:202
+msgid "Unable to insert a line"
+msgstr ""
+
+#. Programmer's name for it: SConfirmCreateDir
+#: Vcl/consts.pas:204
+msgid "The specified directory does not exist. Create it?"
+msgstr ""
+
+#. Programmer's name for it: SSelectDirCap
+#: Vcl/consts.pas:205
+msgid "Select Directory"
+msgstr ""
+
+#. Programmer's name for it: SCannotCreateDir
+#: Vcl/consts.pas:206
+msgid "Unable to create directory"
+msgstr ""
+
+#. Programmer's name for it: SDirNameCap
+#: Vcl/consts.pas:207
+msgid "Directory &Name:"
+msgstr "Könyvtár Név:"
+
+#. Programmer's name for it: SDrivesCap
+#: Vcl/consts.pas:208
+msgid "D&rives:"
+msgstr "Meghajtók:"
+
+#. Programmer's name for it: SDirsCap
+#: Vcl/consts.pas:209
+msgid "&Directories:"
+msgstr "Könyvtárak:"
+
+#. Programmer's name for it: SFilesCap
+#: Vcl/consts.pas:210
+msgid "&Files: (*.*)"
+msgstr "Minden fájl (*.*)"
+
+#. Programmer's name for it: SNetworkCap
+#: Vcl/consts.pas:211
+msgid "Ne&twork..."
+msgstr "Hálózat..."
+
+#. Programmer's name for it: SColorPrefix
+#: Vcl/consts.pas:213
+msgid "Color"
+msgstr "Szín"
+
+#. Programmer's name for it: SColorTags
+#: Vcl/consts.pas:214
+msgid "ABCDEFGHIJKLMNOP"
+msgstr "ABCDEFGHIJKLMNOP"
+
+#. Programmer's name for it: SInvalidClipFmt
+#: Vcl/consts.pas:216
+msgid "Invalid clipboard format"
+msgstr "Nem megfelelő vágólap formátum"
+
+#. Programmer's name for it: SIconToClipboard
+#: Vcl/consts.pas:217
+msgid "Clipboard does not support Icons"
+msgstr "A vágólap nem támogat ikonokat"
+
+#. Programmer's name for it: SCannotOpenClipboard
+#: Vcl/consts.pas:218
+msgid "Cannot open clipboard"
+msgstr "Nem lehet megnyitni a vágólapot"
+
+#. Programmer's name for it: SDefault
+#: Vcl/consts.pas:220
+msgid "Default"
+msgstr "Alapértelmezett"
+
+#. Programmer's name for it: SInvalidMemoSize
+#: Vcl/consts.pas:222
+msgid "Text exceeds memo capacity"
+msgstr "A szöveg túllép a kapacitáson"
+
+#. Programmer's name for it: SCustomColors
+#: Vcl/consts.pas:223
+msgid "Custom Colors"
+msgstr "Egyedi színek"
+
+#. Programmer's name for it: SInvalidPrinterOp
+#: Vcl/consts.pas:224
+msgid "Operation not supported on selected printer"
+msgstr "A parancs nem támgatott ezen a nyomtatón"
+
+#. Programmer's name for it: SNoDefaultPrinter
+#: Vcl/consts.pas:225
+msgid "There is no default printer currently selected"
+msgstr "Nincs kiválasztva alapértelmezett nyomtató"
+
+#. Programmer's name for it: SIniFileWriteError
+#: Vcl/consts.pas:227
+msgid "Unable to write to %s"
+msgstr "Hiba az íráskor %s"
+
+#. Programmer's name for it: SBitsIndexError
+#: Vcl/consts.pas:229
+msgid "Bits index out of range"
+msgstr "Bit index hatókörön kívülre esik"
+
+#. Programmer's name for it: SUntitled
+#: Vcl/consts.pas:231
+msgid "(Untitled)"
+msgstr "(Névtelen)"
+
+#. Programmer's name for it: SInvalidRegType
+#: Vcl/consts.pas:233
+msgid "Invalid data type for '%s'"
+msgstr "Érvénytelen adattípus '%s'"
+
+#. Programmer's name for it: SRegCreateFailed
+#: Vcl/consts.pas:234
+msgid "Failed to create key %s"
+msgstr "Hiba a kulcs előállításakor %s"
+
+#. Programmer's name for it: SRegSetDataFailed
+#: Vcl/consts.pas:235
+msgid "Failed to set data for '%s'"
+msgstr "Hiba az adat beállításakor '%s'"
+
+#. Programmer's name for it: SRegGetDataFailed
+#: Vcl/consts.pas:236
+msgid "Failed to get data for '%s'"
+msgstr "Hiba az adat behívásakor '%s'"
+
+#. Programmer's name for it: SUnknownConversion
+#: Vcl/consts.pas:238
+msgid "Unknown RichEdit conversion file extension (.%s)"
+msgstr ""
+
+#. Programmer's name for it: SDuplicateMenus
+#: Vcl/consts.pas:239
+msgid "Menu '%s' is already being used by another form"
+msgstr "Menü '%s' már használatban van"
+
+#. Programmer's name for it: SPictureLabel
+#: Vcl/consts.pas:241
+msgid "Picture:"
+msgstr "Kép:"
+
+#. Programmer's name for it: SPictureDesc
+#: Vcl/consts.pas:242
+msgid " (%dx%d)"
+msgstr " (%dx%d)"
+
+#. Programmer's name for it: SPreviewLabel
+#: Vcl/consts.pas:243
+msgid "Preview"
+msgstr "Előnézet"
+
+#. Programmer's name for it: SCannotOpenAVI
+#: Vcl/consts.pas:245
+msgid "Cannot open AVI"
+msgstr "Nem lehet megnyitni az AVI-t"
+
+#. Programmer's name for it: SNotOpenErr
+#: Vcl/consts.pas:247
+msgid "No MCI device open"
+msgstr "Nincs megnyitva MCI eszköz"
+
+#. Programmer's name for it: SMPOpenFilter
+#: Vcl/consts.pas:248
+msgid "All files (*.*)|*.*|Wave files (*.wav)|*.wav|Midi files (*.mid)|*.mid|Video for Windows (*.avi)|*.avi"
+msgstr "Minden fájl (*.*)|*.*|Hangfájl (*.wav)|*.wav|Midi fájl (*.mid)|*.mid|Windows Video (*.avi)|*.avi"
+
+#. Programmer's name for it: SMCIAVIVideo
+#: Vcl/consts.pas:250
+msgid "AVIVideo"
+msgstr "AVIVideo"
+
+#. Programmer's name for it: SMCICDAudio
+#: Vcl/consts.pas:251
+msgid "CDAudio"
+msgstr "CDAudio"
+
+#. Programmer's name for it: SMCIDAT
+#: Vcl/consts.pas:252
+msgid "DAT"
+msgstr "DAT"
+
+#. Programmer's name for it: SMCIDigitalVideo
+#: Vcl/consts.pas:253
+msgid "DigitalVideo"
+msgstr "DigitalVideo"
+
+#. Programmer's name for it: SMCIMMMovie
+#: Vcl/consts.pas:254
+msgid "MMMovie"
+msgstr "MMMovie"
+
+#. Programmer's name for it: SMCIOther
+#: Vcl/consts.pas:255
+msgid "Other"
+msgstr "Egyéb"
+
+#. Programmer's name for it: SMCIOverlay
+#: Vcl/consts.pas:256
+msgid "Overlay"
+msgstr "Borítás"
+
+#. Programmer's name for it: SMCIScanner
+#: Vcl/consts.pas:257
+msgid "Scanner"
+msgstr "Képolvasó"
+
+#. Programmer's name for it: SMCISequencer
+#: Vcl/consts.pas:258
+msgid "Sequencer"
+msgstr ""
+
+#. Programmer's name for it: SMCIVCR
+#: Vcl/consts.pas:259
+msgid "VCR"
+msgstr "VCR"
+
+#. Programmer's name for it: SMCIVideodisc
+#: Vcl/consts.pas:260
+msgid "Videodisc"
+msgstr "Videolemez"
+
+#. Programmer's name for it: SMCIWaveAudio
+#: Vcl/consts.pas:261
+msgid "WaveAudio"
+msgstr ""
+
+#. Programmer's name for it: SMCIUnknownError
+#: Vcl/consts.pas:262
+msgid "Unknown error code"
+msgstr "Ismeretlen hibakód"
+
+#. Programmer's name for it: SBoldItalicFont
+#: Vcl/consts.pas:264
+msgid "Bold Italic"
+msgstr "Felkövér dőlt"
+
+#. Programmer's name for it: SBoldFont
+#: Vcl/consts.pas:265
+msgid "Bold"
+msgstr "Félkövér"
+
+#. Programmer's name for it: SItalicFont
+#: Vcl/consts.pas:266
+msgid "Italic"
+msgstr "Dőlt"
+
+#. Programmer's name for it: SRegularFont
+#: Vcl/consts.pas:267
+msgid "Regular"
+msgstr "Normál"
+
+#. Programmer's name for it: SPropertiesVerb
+#: Vcl/consts.pas:269
+msgid "Properties"
+msgstr "Tulajdonságok"
+
+#. Programmer's name for it: sWindowsSocketError
+#: Vcl/consts.pas:271
+msgid "Windows socket error: %s (%d), on API '%s'"
+msgstr "Windows foglalat hiba: %s (%d), on API '%s'"
+
+#. Programmer's name for it: sAsyncSocketError
+#: Vcl/consts.pas:272
+msgid "Asynchronous socket error %d"
+msgstr ""
+
+#. Programmer's name for it: sNoAddress
+#: Vcl/consts.pas:273
+msgid "No address specified"
+msgstr ""
+
+#. Programmer's name for it: sCannotListenOnOpen
+#: Vcl/consts.pas:274
+msgid "Can't listen on an open socket"
+msgstr ""
+
+#. Programmer's name for it: sCannotCreateSocket
+#: Vcl/consts.pas:275
+msgid "Can't create new socket"
+msgstr ""
+
+#. Programmer's name for it: sSocketAlreadyOpen
+#: Vcl/consts.pas:276
+msgid "Socket already open"
+msgstr ""
+
+#. Programmer's name for it: sCantChangeWhileActive
+#: Vcl/consts.pas:277
+msgid "Can't change value while socket is active"
+msgstr ""
+
+#. Programmer's name for it: sSocketMustBeBlocking
+#: Vcl/consts.pas:278
+msgid "Socket must be in blocking mode"
+msgstr ""
+
+#. Programmer's name for it: sSocketIOError
+#: Vcl/consts.pas:279
+msgid "%s error %d, %s"
+msgstr ""
+
+#. Programmer's name for it: sSocketRead
+#: Vcl/consts.pas:280
+msgid "Read"
+msgstr ""
+
+#. Programmer's name for it: sSocketWrite
+#: Vcl/consts.pas:281
+msgid "Write"
+msgstr ""
+
+#. Programmer's name for it: SServiceFailed
+#: Vcl/consts.pas:283
+msgid "Service failed on %s: %s"
+msgstr ""
+
+#. Programmer's name for it: SExecute
+#: Vcl/consts.pas:284
+msgid "execute"
+msgstr ""
+
+#. Programmer's name for it: SStart
+#: Vcl/consts.pas:285
+msgid "start"
+msgstr ""
+
+#. Programmer's name for it: SStop
+#: Vcl/consts.pas:286
+msgid "stop"
+msgstr ""
+
+#. Programmer's name for it: SPause
+#: Vcl/consts.pas:287
+msgid "pause"
+msgstr ""
+
+#. Programmer's name for it: SContinue
+#: Vcl/consts.pas:288
+msgid "continue"
+msgstr ""
+
+#. Programmer's name for it: SInterrogate
+#: Vcl/consts.pas:289
+msgid "interrogate"
+msgstr ""
+
+#. Programmer's name for it: SShutdown
+#: Vcl/consts.pas:290
+msgid "shutdown"
+msgstr ""
+
+#. Programmer's name for it: SCustomError
+#: Vcl/consts.pas:291
+msgid "Service failed in custom message(%d): %s"
+msgstr ""
+
+#. Programmer's name for it: SServiceInstallOK
+#: Vcl/consts.pas:292
+msgid "Service installed successfully"
+msgstr ""
+
+#. Programmer's name for it: SServiceInstallFailed
+#: Vcl/consts.pas:293
+msgid "Service \"%s\" failed to install with error: \"%s\""
+msgstr ""
+
+#. Programmer's name for it: SServiceUninstallOK
+#: Vcl/consts.pas:294
+msgid "Service uninstalled successfully"
+msgstr ""
+
+#. Programmer's name for it: SServiceUninstallFailed
+#: Vcl/consts.pas:295
+msgid "Service \"%s\" failed to uninstall with error: \"%s\""
+msgstr ""
+
+#. Programmer's name for it: SInvalidActionRegistration
+#: Vcl/consts.pas:297
+msgid "Invalid action registration"
+msgstr ""
+
+#. Programmer's name for it: SInvalidActionUnregistration
+#: Vcl/consts.pas:298
+msgid "Invalid action unregistration"
+msgstr ""
+
+#. Programmer's name for it: SInvalidActionEnumeration
+#: Vcl/consts.pas:299
+msgid "Invalid action enumeration"
+msgstr ""
+
+#. Programmer's name for it: SInvalidActionCreation
+#: Vcl/consts.pas:300
+msgid "Invalid action creation"
+msgstr ""
+
+#. Programmer's name for it: SDockedCtlNeedsName
+#: Vcl/consts.pas:302
+msgid "Docked control must have a name"
+msgstr ""
+
+#. Programmer's name for it: SDockTreeRemoveError
+#: Vcl/consts.pas:303
+msgid "Error removing control from dock tree"
+msgstr ""
+
+#. Programmer's name for it: SDockZoneNotFound
+#: Vcl/consts.pas:304
+msgid " - Dock zone not found"
+msgstr ""
+
+#. Programmer's name for it: SDockZoneHasNoCtl
+#: Vcl/consts.pas:305
+msgid " - Dock zone has no control"
+msgstr ""
+
+#. Programmer's name for it: SAllCommands
+#: Vcl/consts.pas:307
+msgid "All Commands"
+msgstr ""
+
+#. Programmer's name for it: SInvalidFieldSize
+#: Vcl/dbconsts.pas:15
+msgid "Invalid field size"
+msgstr ""
+
+#. Programmer's name for it: SInvalidFieldKind
+#: Vcl/dbconsts.pas:16
+msgid "Invalid FieldKind"
+msgstr ""
+
+#. Programmer's name for it: SInvalidFieldRegistration
+#: Vcl/dbconsts.pas:17
+msgid "Invalid field registration"
+msgstr ""
+
+#. Programmer's name for it: SUnknownFieldType
+#: Vcl/dbconsts.pas:18
+msgid "Field '%s' is of an unknown type"
+msgstr ""
+
+#. Programmer's name for it: SFieldNameMissing
+#: Vcl/dbconsts.pas:19
+msgid "Field name missing"
+msgstr ""
+
+#. Programmer's name for it: SDuplicateFieldName
+#: Vcl/dbconsts.pas:20
+msgid "Duplicate field name '%s'"
+msgstr ""
+
+#. Programmer's name for it: SFieldNotFound
+#: Vcl/dbconsts.pas:21
+msgid "Field '%s' not found"
+msgstr ""
+
+#. Programmer's name for it: SFieldAccessError
+#: Vcl/dbconsts.pas:22
+msgid "Cannot access field '%s' as type %s"
+msgstr ""
+
+#. Programmer's name for it: SFieldValueError
+#: Vcl/dbconsts.pas:23
+msgid "Invalid value for field '%s'"
+msgstr ""
+
+#. Programmer's name for it: SFieldRangeError
+#: Vcl/dbconsts.pas:24
+msgid "%g is not a valid value for field '%s'. The allowed range is %g to %g"
+msgstr ""
+
+#. Programmer's name for it: SInvalidIntegerValue
+#: Vcl/dbconsts.pas:25
+msgid "'%s' is not a valid integer value for field '%s'"
+msgstr ""
+
+#. Programmer's name for it: SInvalidBoolValue
+#: Vcl/dbconsts.pas:26
+msgid "'%s' is not a valid boolean value for field '%s'"
+msgstr ""
+
+#. Programmer's name for it: SInvalidFloatValue
+#: Vcl/dbconsts.pas:27
+msgid "'%s' is not a valid floating point value for field '%s'"
+msgstr ""
+
+#. Programmer's name for it: SFieldTypeMismatch
+#: Vcl/dbconsts.pas:28
+msgid "Type mismatch for field '%s', expecting: %s actual: %s"
+msgstr ""
+
+#. Programmer's name for it: SFieldSizeMismatch
+#: Vcl/dbconsts.pas:29
+msgid "Size mismatch for field '%s', expecting: %d actual: %d"
+msgstr ""
+
+#. Programmer's name for it: SInvalidVarByteArray
+#: Vcl/dbconsts.pas:30
+msgid "Invalid variant type or size for field '%s'"
+msgstr ""
+
+#. Programmer's name for it: SFieldOutOfRange
+#: Vcl/dbconsts.pas:31
+msgid "Value of field '%s' is out of range"
+msgstr ""
+
+#. Programmer's name for it: SBCDOverflow
+#: Vcl/dbconsts.pas:32
+msgid "(Overflow)"
+msgstr ""
+
+#. Programmer's name for it: SFieldRequired
+#: Vcl/dbconsts.pas:33
+msgid "Field '%s' must have a value"
+msgstr ""
+
+#. Programmer's name for it: SDataSetMissing
+#: Vcl/dbconsts.pas:34
+msgid "Field '%s' has no dataset"
+msgstr ""
+
+#. Programmer's name for it: SInvalidCalcType
+#: Vcl/dbconsts.pas:35
+msgid "Field '%s' cannot be a calculated or lookup field"
+msgstr ""
+
+#. Programmer's name for it: SFieldReadOnly
+#: Vcl/dbconsts.pas:36
+msgid "Field '%s' cannot be modified"
+msgstr ""
+
+#. Programmer's name for it: SFieldIndexError
+#: Vcl/dbconsts.pas:37
+msgid "Field index out of range"
+msgstr ""
+
+#. Programmer's name for it: SNoFieldIndexes
+#: Vcl/dbconsts.pas:38
+msgid "No index currently active"
+msgstr ""
+
+#. Programmer's name for it: SNotIndexField
+#: Vcl/dbconsts.pas:39
+msgid "Field '%s' is not indexed and cannot be modified"
+msgstr ""
+
+#. Programmer's name for it: SIndexFieldMissing
+#: Vcl/dbconsts.pas:40
+msgid "Cannot access index field '%s'"
+msgstr ""
+
+#. Programmer's name for it: SDuplicateIndexName
+#: Vcl/dbconsts.pas:41
+msgid "Duplicate index name '%s'"
+msgstr ""
+
+#. Programmer's name for it: SNoIndexForFields
+#: Vcl/dbconsts.pas:42
+msgid "No index for fields '%s'"
+msgstr ""
+
+#. Programmer's name for it: SIndexNotFound
+#: Vcl/dbconsts.pas:43
+msgid "Index '%s' not found"
+msgstr ""
+
+#. Programmer's name for it: SDuplicateName
+#: Vcl/dbconsts.pas:44
+msgid "Duplicate name '%s' in %s"
+msgstr ""
+
+#. Programmer's name for it: SCircularDataLink
+#: Vcl/dbconsts.pas:45
+msgid "Circular datalinks are not allowed"
+msgstr ""
+
+#. Programmer's name for it: SLookupInfoError
+#: Vcl/dbconsts.pas:46
+msgid "Lookup information for field '%s' is incomplete"
+msgstr ""
+
+#. Programmer's name for it: SDataSourceChange
+#: Vcl/dbconsts.pas:47
+msgid "DataSource cannot be changed"
+msgstr ""
+
+#. Programmer's name for it: SNoNestedMasterSource
+#: Vcl/dbconsts.pas:48
+msgid "Nested datasets cannot have a MasterSource"
+msgstr ""
+
+#. Programmer's name for it: SDataSetOpen
+#: Vcl/dbconsts.pas:49
+msgid "Cannot perform this operation on an open dataset"
+msgstr ""
+
+#. Programmer's name for it: SNotEditing
+#: Vcl/dbconsts.pas:50
+msgid "Dataset not in edit or insert mode"
+msgstr ""
+
+#. Programmer's name for it: SDataSetClosed
+#: Vcl/dbconsts.pas:51
+msgid "Cannot perform this operation on a closed dataset"
+msgstr ""
+
+#. Programmer's name for it: SDataSetEmpty
+#: Vcl/dbconsts.pas:52
+msgid "Cannot perform this operation on an empty dataset"
+msgstr ""
+
+#. Programmer's name for it: SDataSetReadOnly
+#: Vcl/dbconsts.pas:53
+msgid "Cannot modify a read-only dataset"
+msgstr ""
+
+#. Programmer's name for it: SNestedDataSetClass
+#: Vcl/dbconsts.pas:54
+msgid "Nested dataset must inherit from %s"
+msgstr ""
+
+#. Programmer's name for it: SExprTermination
+#: Vcl/dbconsts.pas:55
+msgid "Filter expression incorrectly terminated"
+msgstr ""
+
+#. Programmer's name for it: SExprNameError
+#: Vcl/dbconsts.pas:56
+msgid "Unterminated field name"
+msgstr ""
+
+#. Programmer's name for it: SExprStringError
+#: Vcl/dbconsts.pas:57
+msgid "Unterminated string constant"
+msgstr ""
+
+#. Programmer's name for it: SExprInvalidChar
+#: Vcl/dbconsts.pas:58
+msgid "Invalid filter expression character: '%s'"
+msgstr "Hibás karakter a szűrő kifejezésben: '%s'"
+
+#. Programmer's name for it: SExprNoLParen
+#: Vcl/dbconsts.pas:59
+msgid "'(' expected but %s found"
+msgstr "%s találat, de hiányzó '('"
+
+#. Programmer's name for it: SExprNoRParen
+#: Vcl/dbconsts.pas:60
+msgid "')' expected but %s found"
+msgstr "%s találat, de hiányzó ')'"
+
+#. Programmer's name for it: SExprNoRParenOrComma
+#: Vcl/dbconsts.pas:61
+msgid "')' or ',' expected but %s found"
+msgstr "%s találat, de hiányzó ')' vagy ','"
+
+#. Programmer's name for it: SExprExpected
+#: Vcl/dbconsts.pas:62
+msgid "Expression expected but %s found"
+msgstr "%s találat, de hiányzó kifejezés"
+
+#. Programmer's name for it: SExprBadField
+#: Vcl/dbconsts.pas:63
+msgid "Field '%s' cannot be used in a filter expression"
+msgstr "'%s' mezőt nem lehet alkalmazni a szűrő kifejezésben"
+
+#. Programmer's name for it: SExprBadNullTest
+#: Vcl/dbconsts.pas:64
+msgid "NULL only allowed with '=' and '<>'"
+msgstr "Csak NULL engedélyezett '=' és/vagy '<>' -el"
+
+#. Programmer's name for it: SExprRangeError
+#: Vcl/dbconsts.pas:65
+msgid "Constant out of range"
+msgstr "Túlcsordulás"
+
+#. Programmer's name for it: SExprNotBoolean
+#: Vcl/dbconsts.pas:66
+msgid "Field '%s' is not of type Boolean"
+msgstr "'%s' mező nem Boolean típusú változó"
+
+#. Programmer's name for it: SExprIncorrect
+#: Vcl/dbconsts.pas:67
+msgid "Incorrectly formed filter expression"
+msgstr "Hibásan fogalmazott szűrő meghatározás"
+
+#. Programmer's name for it: SExprNothing
+#: Vcl/dbconsts.pas:68
+msgid "nothing"
+msgstr "semmi"
+
+#. Programmer's name for it: SExprTypeMis
+#: Vcl/dbconsts.pas:69
+msgid "Type mismatch in expression"
+msgstr "Gépelési hiba a kifejezésben"
+
+#. Programmer's name for it: SExprBadScope
+#: Vcl/dbconsts.pas:70
+msgid "Operation cannot mix aggregate value with record-varying value"
+msgstr ""
+
+#. Programmer's name for it: SExprNoArith
+#: Vcl/dbconsts.pas:71
+msgid "Arithmetic in filter expressions not supported"
+msgstr ""
+
+#. Programmer's name for it: SExprNotAgg
+#: Vcl/dbconsts.pas:72
+msgid "Expression is not an aggregate expression"
+msgstr ""
+
+#. Programmer's name for it: SExprBadConst
+#: Vcl/dbconsts.pas:73
+msgid "Constant is not correct type %s"
+msgstr ""
+
+#. Programmer's name for it: SExprNoAggFilter
+#: Vcl/dbconsts.pas:74
+msgid "Aggregate expressions not allowed in filters"
+msgstr ""
+
+#. Programmer's name for it: SExprEmptyInList
+#: Vcl/dbconsts.pas:75
+msgid "IN predicate list may not be empty"
+msgstr ""
+
+#. Programmer's name for it: SInvalidKeywordUse
+#: Vcl/dbconsts.pas:76
+msgid "Invalid use of keyword"
+msgstr "Nem megengedett kulcsszó használata"
+
+#. Programmer's name for it: STextFalse
+#: Vcl/dbconsts.pas:77
+msgid "False"
+msgstr "Hamis"
+
+#. Programmer's name for it: STextTrue
+#: Vcl/dbconsts.pas:78
+msgid "True"
+msgstr "Igaz"
+
+#. Programmer's name for it: SParameterNotFound
+#: Vcl/dbconsts.pas:79
+msgid "Parameter '%s' not found"
+msgstr ""
+
+#. Programmer's name for it: SInvalidVersion
+#: Vcl/dbconsts.pas:80
+msgid "Unable to load bind parameters"
+msgstr ""
+
+#. Programmer's name for it: SParamTooBig
+#: Vcl/dbconsts.pas:81
+msgid "Parameter '%s', cannot save data larger than %d bytes"
+msgstr ""
+
+#. Programmer's name for it: SParamBadFieldType
+#: Vcl/dbconsts.pas:82
+msgid "Field '%s' is of an unsupported type"
+msgstr ""
+
+#. Programmer's name for it: SAggActive
+#: Vcl/dbconsts.pas:83
+msgid "Property may not be modified while aggregate is active"
+msgstr ""
+
+#. Programmer's name for it: SFirstRecord
+#: Vcl/dbconsts.pas:86
+msgid "First record"
+msgstr ""
+
+#. Programmer's name for it: SPriorRecord
+#: Vcl/dbconsts.pas:87
+msgid "Prior record"
+msgstr ""
+
+#. Programmer's name for it: SNextRecord
+#: Vcl/dbconsts.pas:88
+msgid "Next record"
+msgstr ""
+
+#. Programmer's name for it: SLastRecord
+#: Vcl/dbconsts.pas:89
+msgid "Last record"
+msgstr ""
+
+#. Programmer's name for it: SInsertRecord
+#: Vcl/dbconsts.pas:90
+msgid "Insert record"
+msgstr ""
+
+#. Programmer's name for it: SDeleteRecord
+#: Vcl/dbconsts.pas:91
+msgid "Delete record"
+msgstr ""
+
+#. Programmer's name for it: SEditRecord
+#: Vcl/dbconsts.pas:92
+msgid "Edit record"
+msgstr ""
+
+#. Programmer's name for it: SPostEdit
+#: Vcl/dbconsts.pas:93
+msgid "Post edit"
+msgstr ""
+
+#. Programmer's name for it: SCancelEdit
+#: Vcl/dbconsts.pas:94
+msgid "Cancel edit"
+msgstr ""
+
+#. Programmer's name for it: SRefreshRecord
+#: Vcl/dbconsts.pas:95
+msgid "Refresh data"
+msgstr ""
+
+#. Programmer's name for it: SDeleteRecordQuestion
+#: Vcl/dbconsts.pas:96
+msgid "Delete record?"
+msgstr ""
+
+#. Programmer's name for it: SDeleteMultipleRecordsQuestion
+#: Vcl/dbconsts.pas:97
+msgid "Delete all selected records?"
+msgstr ""
+
+#. Programmer's name for it: SRecordNotFound
+#: Vcl/dbconsts.pas:98
+msgid "Record not found"
+msgstr ""
+
+#. Programmer's name for it: SDataSourceFixed
+#: Vcl/dbconsts.pas:99
+msgid "Operation not allowed in a DBCtrlGrid"
+msgstr ""
+
+#. Programmer's name for it: SNotReplicatable
+#: Vcl/dbconsts.pas:100
+msgid "Control cannot be used in a DBCtrlGrid"
+msgstr ""
+
+#. Programmer's name for it: SPropDefByLookup
+#: Vcl/dbconsts.pas:101
+msgid "Property already defined by lookup field"
+msgstr ""
+
+#. Programmer's name for it: STooManyColumns
+#: Vcl/dbconsts.pas:102
+msgid "Grid requested to display more than 256 columns"
+msgstr ""
+
+#. Programmer's name for it: SRemoteLogin
+#: Vcl/dbconsts.pas:105
+msgid "Remote Login"
+msgstr "Távoli bejelentkezés"
+
+#. Programmer's name for it: SDataBindings
+#: Vcl/dbconsts.pas:108
+msgid "Data Bindings..."
+msgstr ""
+
+#. Programmer's name for it: SBadPropValue
+#: Vcl/oleconst.pas:15
+msgid "'%s' is not a valid property value"
+msgstr ""
+
+#. Programmer's name for it: SCannotActivate
+#: Vcl/oleconst.pas:16
+msgid "OLE control activation failed"
+msgstr "Hibás OLE aktviációs parancs"
+
+#. Programmer's name for it: SNoWindowHandle
+#: Vcl/oleconst.pas:17
+msgid "Could not obtain OLE control window handle"
+msgstr ""
+
+#. Programmer's name for it: SVarNotObject
+#: Vcl/oleconst.pas:19
+msgid "Variant does not reference an OLE object"
+msgstr ""
+
+#. Programmer's name for it: SNoMethod
+#: Vcl/oleconst.pas:21
+msgid "Method '%s' not supported by OLE object"
+msgstr ""
+
+#. Programmer's name for it: SLinkProperties
+#: Vcl/oleconst.pas:22
+msgid "Link Properties"
+msgstr "Link tulajdonságok"
+
+#. Programmer's name for it: SInvalidLinkSource
+#: Vcl/oleconst.pas:23
+msgid "Cannot link to an invalid source."
+msgstr "Nem lehet hozzácsatolni érvénytelen forráshoz"
+
+#. Programmer's name for it: SCannotBreakLink
+#: Vcl/oleconst.pas:24
+msgid "Break link operation is not supported."
+msgstr ""
+
+#. Programmer's name for it: SLinkedObject
+#: Vcl/oleconst.pas:25
+msgid "Linked %s"
+msgstr "Linkelve %s"
+
+#. Programmer's name for it: SEmptyContainer
+#: Vcl/oleconst.pas:26
+msgid "Operation not allowed on an empty OLE container"
+msgstr "A művelet nem engedélyezett üres OLE tárolón"
+
+#. Programmer's name for it: SInvalidVerb
+#: Vcl/oleconst.pas:27
+msgid "Invalid object verb"
+msgstr ""
+
+#. Programmer's name for it: SPropDlgCaption
+#: Vcl/oleconst.pas:28
+msgid "%s Properties"
+msgstr "%s Tulajdonságok"
+
+#. Programmer's name for it: SInvalidLicense
+#: Vcl/oleconst.pas:30
+msgid "License information for %s is invalid"
+msgstr "Licensz információ nem megfelelő %s -hoz"
+
+#. Programmer's name for it: SNotLicensed
+#: Vcl/oleconst.pas:31
+msgid "License information for %s not found. You cannot use this control in design mode"
+msgstr ""
+
--- /dev/null
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: 2007-06-07 02:09+0100\n"
+"Last-Translator: Sprok Bence <sprok.bence@gmail.com>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+msgid "(integer sec or 'auto') Barograph to GPS time diff"
+msgstr "Barométer adatok GPS pozícióba (másodperc vagy 'auto')"
+
+msgid "(USR input) Break segments into separate tracks"
+msgstr "Szegmensek külön nyomvonalakba vágása (USR bemenet)"
+
+msgid "(USR output) Merge into one segmented track"
+msgstr "Szegmensek egy nyomvonalba fűzése (USR kimenet)"
+
+msgid "Ad-hoc closed icon name"
+msgstr "Ad-hoc zárt hálózat ikonnév"
+
+msgid "Ad-hoc open icon name"
+msgstr "Ad-hoc nyílt hálózat ikonnév"
+
+msgid "Allow whitespace synth. shortnames"
+msgstr "Szóközök engedélyezése rövidnevek készítésekor"
+
+msgid "Altitudes are absolute and not clamped to ground"
+msgstr "A magasság abszolút, nincs a felszínhez kötve"
+
+msgid "Append icon_descr to description"
+msgstr "icon_descr hozzáfűzése a megjegyzéshez"
+
+msgid "Append realtime positioning data to the output file instead of truncating"
+msgstr "A kimeneti fájl csonkítása helyett valósidő hozzáfűzése a pozícióhoz"
+
+msgid "Base URL for link tag in output"
+msgstr "Alapért. URL a hivatkozásokban"
+
+msgid "Basename prepended to URL on output"
+msgstr "URL előtag eléfűzése a kimenetben"
+
+msgid "Category name (Cache)"
+msgstr "Kategória név (Cache)"
+
+msgid "Category number to use for written waypoints"
+msgstr "A készülő útpontok kategória-száma"
+
+msgid "Color for lines or mapnotes"
+msgstr "Vonalak és térkép-megjegyzések színe"
+
+msgid "Command unit to power itself down"
+msgstr "Zárásként a készülék kikapcsolása"
+
+msgid "Complete date-free tracks with given date (YYYYMMDD)."
+msgstr "Dátum nélküli nyomvonalak új időpontja (ÉÉÉÉHHNN)"
+
+msgid "Create waypoints from geocache log entries"
+msgstr "Útpontok készítése a geocaching bejegyzésekből"
+
+msgid "Database name"
+msgstr "Adatbázis név"
+
+msgid "Database name (filename)"
+msgstr "Adatbázis név (fájlnév)"
+
+msgid "Datum (default=NAD27)"
+msgstr "Térképdátum (alapért.=NAD27)"
+
+msgid "Days after which points are considered old"
+msgstr "Ennyi nap után a pontok elévültnek számítanak"
+
+msgid "Decimal seconds to pause between groups of strings"
+msgstr "Ennyi másodpercnyi szünet az adatfolyamban"
+
+msgid "Default category on output (1..16)"
+msgstr "Alapértelmezett kimeneti kategória (1.. 16)"
+
+msgid "Default icon name"
+msgstr "Alapértelmezett ikonnév"
+
+msgid "Default location"
+msgstr "Alapértelmezett pozíció"
+
+msgid "Default speed for waypoints (knots/hr)"
+msgstr "Alapértelmezett sebesség a pontokhoz (csomó/ó)"
+
+msgid "Degrees output as 'ddd', 'dmm'(default) or 'dms'"
+msgstr "Pozíció formátum 'fff', 'fpp'(alapért.) vagy 'fpm'"
+
+msgid "Delete all waypoints"
+msgstr "Minden útpont törlése"
+
+msgid "Display labels on track and routepoints (default = 1)"
+msgstr "Címke megjelenítése nyomvonalakon és útvonalakon (alapért.=1)"
+
+msgid "Distance unit [m=metric, s=statute]"
+msgstr "Távolság mértékegysége [m=metrikus, s=angolszász]"
+
+msgid "Do not add geocache data to description"
+msgstr "Geocaching információk kihagyása a megjegyzésből"
+
+msgid "Draw extrusion line from trackpoint to ground"
+msgstr "Meghosszabított vonal rajzolása útponttól felszínig"
+
+msgid "Drop route points that do not have an equivalent waypoint (hidden points)"
+msgstr "Útvonalpont elhagyása, aminek nincs megegyező útpontja (rejtett pontok)"
+
+msgid "Encrypt hints using ROT13"
+msgstr "Megjegyzések kódolása ROT13 használatával"
+
+msgid "Encrypt hints with ROT13"
+msgstr "Megyjegyzések kódolása ROT13-al"
+
+msgid "Erase device data after download"
+msgstr "A készülék memóriájának törlése letöltés után"
+
+msgid "Export linestrings for tracks and routes"
+msgstr "Vonal-szöveg exportálása nyomvonalakba és útvonalakba"
+
+msgid "Export placemarks for tracks and routes"
+msgstr "Hely-jelölések exportálása nyomvonalakba és útvonalakba"
+
+msgid "Full path to XCSV style file"
+msgstr "Teljes elérési út a XCSV fájlban"
+
+msgid "Generate file with lat/lon for centering map"
+msgstr "Szélesség/hosszúság használata térképi kalibráláshoz"
+
+msgid "Give points (waypoints/route points) a default radius (proximity)"
+msgstr "Alapért. sugár megadása (útpontokhoz/útvonalpontokhoz)"
+
+msgid "GPS datum (def. WGS 84)"
+msgstr "GPS dátum (alapért. WGS 84)"
+
+msgid "Height in pixels of map"
+msgstr "Magasság a térképen (pixel)"
+
+msgid "Ignore event marker icons"
+msgstr "Esemény jelző ikonok kihagyása"
+
+msgid "Include extended data for trackpoints (default = 1)"
+msgstr "Bővített információk használata a nyomvonalakban (alapért.=1)"
+
+msgid "Include groundspeak logs if present"
+msgstr "Groundspeak bejegyzések használata (ha van)"
+
+msgid "Include major turn points (with description) from calculated route"
+msgstr "Fő kanyarodási pontok használata a számított útvonalból (megjegyzéssel)"
+
+msgid "Include only via stations in route"
+msgstr "Csak az állomások használata az útvonalban"
+
+msgid "Include short name in bookmarks"
+msgstr "Rövidnevek használata a könyvjelzőben"
+
+msgid "Index of name field in .dbf"
+msgstr "Név mező hivatkozása a .dbf fájlban"
+
+msgid "Index of route (if more the one in source)"
+msgstr "Útvonalak indexelése (ha több mint egy van a forrásban)"
+
+msgid "Index of route to write (if more the one in source)"
+msgstr "Útvonalak indexelése íráshoz (ha több mint egy van a forrásban)"
+
+msgid "Index of route/track to write (if more the one in source)"
+msgstr "Útvonalak/nyomvonalak indexelése íráshoz (ha több mint egy van a forrásban)"
+
+msgid "Index of track (if more the one in source)"
+msgstr "Útvonalak/nyomvonalak indexelése (ha több mint egy van a forrásban)"
+
+msgid "Index of track to write (if more the one in source)"
+msgstr "Nyomvonalak indexelése íráshoz (ha több mint egy van a forrásban)"
+
+msgid "Index of URL field in .dbf"
+msgstr "URL mező hivatkozása a .dbf fájlban"
+
+msgid "Infrastructure closed icon name"
+msgstr "Zárt HotSpot ikonnév"
+
+msgid "Infrastructure open icon name"
+msgstr "Nyitott HotSpot ikonnév"
+
+msgid "Keep turns if simplify filter is used"
+msgstr "Fordulópontok megtartása egyszerűsítés esetén is."
+
+msgid "Length of generated shortnames"
+msgstr "Rövidnevek hosszúsága"
+
+msgid "Length of generated shortnames (default 16)"
+msgstr "Rövidnevek hosszúsága (alapért. 16)"
+
+msgid "Line color, specified in hex AABBGGRR"
+msgstr "Vonal színe (hexa érték AABBGGRR)"
+
+msgid "Make synth. shortnames unique"
+msgstr "A készülő rövidnevek egyediek legyenek"
+
+msgid "MapSend version TRK file to generate (3,4)"
+msgstr "MapSend TRK fájl verziója (3,4)"
+
+msgid "Margin for map. Degrees or percentage"
+msgstr "Térképi margó. Fok vagy százalék."
+
+msgid "Marker type for new points"
+msgstr "Új pont jele"
+
+msgid "Marker type for old points"
+msgstr "Régi pont jele"
+
+msgid "Marker type for unfound points"
+msgstr "Meg nem talált pont jele"
+
+msgid "Max length of waypoint name to write"
+msgstr "Útpont nevének max. hosszúsága"
+
+msgid "Max number of comments to write (maxcmts=200)"
+msgstr "Megjegyzés max. hossza (maxcmts=200)"
+
+msgid "Max shortname length when used with -s"
+msgstr "Rövidnév hosszának értéke -s használatával"
+
+msgid "Max synthesized shortname length"
+msgstr "Előállított rövidnevek max. hosszúsága"
+
+msgid "Merge output with existing file"
+msgstr "A jelenleg és a kész fájl összefűzése"
+
+msgid "Name of the 'unassigned' category"
+msgstr "Az 'unassigned' kategória neve"
+
+msgid "New name for the route"
+msgstr "Az útvonal új neve"
+
+msgid "No separator lines between waypoints"
+msgstr "Nincs elválasztó karakter az útpontok között"
+
+msgid "No whitespace in generated shortnames"
+msgstr "Szóközök mellőzése a rövidnevekben"
+
+msgid "Non-stealth encrypted icon name"
+msgstr "Nem elcsent, titkosított ikonnév"
+
+msgid "Non-stealth non-encrypted icon name"
+msgstr "Nem elcsent, nem titkosított ikonnév"
+
+msgid "Numeric value of bitrate (baud=4800)"
+msgstr "Bitráta értéke (baud=4800)"
+
+msgid "Omit Placer name"
+msgstr "Elhelyező nevének elhagyása"
+
+msgid "Only read turns; skip all other points"
+msgstr "Csak a fordulópontok használata (a többi pont kihagyása)"
+
+msgid "Path to HTML style sheet"
+msgstr "Hivatkozás HTML style sheet-be"
+
+msgid "Precision of coordinates"
+msgstr "Koordináták pontossága"
+
+msgid "Radius for circles"
+msgstr "Kör sugara"
+
+msgid "Radius of our big earth (default 6371000 meters)"
+msgstr "A Föld sugara (alapért. 6371000 méter)"
+
+msgid "Read control points as waypoint/route/none"
+msgstr "Pontok beolvasása, mint útpont/útvonal/nincs"
+
+msgid "Read/Write date format (i.e. DDMMYYYY)"
+msgstr "Dátum formátum írása/olvasása (NN/HH/ÉÉÉÉ)"
+
+msgid "Read/Write date format (i.e. yyyy/mm/dd)"
+msgstr "Dátum formátum írása/olvasása (éééé/hh/nn)"
+
+msgid "Read/write GPGGA sentences"
+msgstr "GPGGA montadok írása/olvasása"
+
+msgid "Read/write GPGSA sentences"
+msgstr "GPGSA montadok írása/olvasása"
+
+msgid "Read/write GPRMC sentences"
+msgstr "GPRMC montadok írása/olvasása"
+
+msgid "Read/write GPVTG sentences"
+msgstr "GPVTG montadok írása/olvasása"
+
+msgid "Read/Write time format (i.e. HH:mm:ss xx)"
+msgstr "Idő írása/olvasása (ÓÓ:pp:mm xx)"
+
+msgid "Retain at most this number of position points (0 = unlimited)"
+msgstr "Max. pontszám megtartása a 'snail tail' előállításakor (0= végtelen)"
+
+msgid "Return current position as a waypoint"
+msgstr "Visszatérés a jelenlegi pozícióba, mint útpont"
+
+msgid "Road type changes"
+msgstr "Út típus változások"
+
+msgid "Shortname is MAC address"
+msgstr "A rövidnév, mint MAC cím"
+
+msgid "Speed in bits per second of serial port (baud=4800)"
+msgstr "Soros port sebessége (bps; baud=4800)"
+
+msgid "Split input into separate files"
+msgstr "Beviteli adatok darabolása külön fájlokba"
+
+msgid "Split into multiple routes at turns"
+msgstr "Összetett útvonalakba és fordulópontokba darabolás"
+
+msgid "Stealth encrypted icon name"
+msgstr "Titkosan kódolt ikonnevek"
+
+msgid "Stealth non-encrypted icon name"
+msgstr "Nem titkosított ikonnevek elcsenése"
+
+msgid "String to separate concatenated address fields (default=\", \")"
+msgstr "Összefűzött címnevek elválasztása (alapért.=\", \")"
+
+msgid "Suppress labels on generated pins"
+msgstr "Címkék elhagyása a készülő pontokon"
+
+msgid "Suppress retired geocaches"
+msgstr "Kiöregedett geoládák elhagyása"
+
+msgid "Suppress separator lines between waypoints"
+msgstr "Elválasztó vonalak elhagyása útpontok között"
+
+msgid "Suppress use of handshaking in name of speed"
+msgstr "Kézfogás elhagyása a sebességneveknél"
+
+msgid "Suppress whitespace in generated shortnames"
+msgstr "Szóközök elhagyása a készülő rövidnevekben"
+
+msgid "Symbol to use for point data"
+msgstr "Útpontok szimbóluma"
+
+msgid "Synthesize track times"
+msgstr "Nyomvonal idejének előállítása"
+
+msgid "Target GPX version for output"
+msgstr "A kimeneti GPX fájl verziója"
+
+msgid "Temperature unit [c=Celsius, f=Fahrenheit]"
+msgstr "Hőmérséklet mértékegysége [c=Celsius, f=Fahrenheit]"
+
+msgid "The icon description is already the marker"
+msgstr "Az ikon meghatározás már a pontjelzőben"
+
+msgid "Type of .an1 file"
+msgstr "A .an1 fájl típusa"
+
+msgid "Units for altitude (f)eet or (m)etres"
+msgstr "Magasság mértékegysége (méter vagy láb)"
+
+msgid "Units used when writing comments ('s'tatute or 'm'etric)"
+msgstr "Mértékegység használata a megjegyzésben ('s' angolszász vagy 'm' metrikus)"
+
+msgid "UPPERCASE synth. shortnames"
+msgstr "NAGYBETŰS rövidnevek előállítása"
+
+msgid "Use depth values on output (default is ignore)"
+msgstr "Mélység adat használata a kimenetben (alapért. nincs)"
+
+msgid "Use proximity values on output (default is ignore)"
+msgstr "Pontossági érték használata a kimenetben (alapért. nincs)"
+
+msgid "Use shortname instead of description"
+msgstr "Rövid név használata a megyjegyzés helyett"
+
+msgid "Version of gdb file to generate (1..3)"
+msgstr "A készülő gdb fájl típusa (1..3)"
+
+msgid "Version of mapsource file to generate (3,4,5)"
+msgstr "A készülő MapSource fájl típusa (3,4,5)"
+
+msgid "Waypoint background color"
+msgstr "Útpont háttérszíne"
+
+msgid "Waypoint foreground color"
+msgstr "Útpont színe"
+
+msgid "Waypoint type"
+msgstr "Útpont típusa"
+
+msgid "Width in pixels of map"
+msgstr "Térképi szélesség (pixel)"
+
+msgid "Width of lines, in pixels"
+msgstr "Vonalvastagság (pixel)"
+
+msgid "Write position using this grid."
+msgstr "Pozíció készítése ezzel a ráccsal"
+
+msgid "Write timestamps with offset x to UTC time"
+msgstr "Időértékek eltolása x értékkel UTC-hez képest"
+
+msgid "Write tracks compatible with Carto Exploreur"
+msgstr "Carto Exploreur kompatibilis nyomvonal készítése"
+
+msgid "Zoom level to reduce points"
+msgstr "Zoom-szint a pontok szelektálásához"
+
list: TStrings;\r
CSave: TCursor;\r
str: TStream;\r
- s: string;\r
+ s, tmp: string;\r
i: Integer;\r
IFormat, OFormat: string;\r
Fatal: Boolean;\r
begin\r
if FileExists(s) then\r
begin\r
+ tmp := _('Warning');\r
if (Windows.MessageBox(SELF.Handle,\r
PChar(Format(_('File "%s" exists ! Overwrite ?'), [s])),\r
- PChar(_('Warning')), MB_YESNO) <> IDYES) then Exit;\r
+ PChar(tmp), MB_YESNO) <> IDYES) then Exit;\r
end\r
else\r
begin\r
for i := 0 to FOpts.Count - 1 do\r
begin\r
o := Pointer(FOpts.Objects[i]);\r
+\r
o.chb := nil;\r
o.edit := nil;\r
\r
+ if (o.dir <> 3) then\r
+ begin\r
+ if (FIsInput and (o.dir and 1 = 0)) then Continue\r
+ else if (not(FIsInput) and (o.dir and 2 = 0)) then Continue;\r
+ end;\r
+\r
if (FFormat = '') then\r
begin\r
FFormat := o.format;\r
// chb.Checked := (gpsbabel_ini.ReadString(o.format, o.name, #1) <> #1);\r
chb.Parent := pnOptions;\r
\r
- chb.Hint := SysUtils.Format(_('Short "%s"'), [o.name]);\r
+ chb.Hint := SysUtils.Format(_('Short "%s"'), [o.defname]);\r
chb.ShowHint := True;\r
\r
+ if (o.format = 'xcsv') and (o.defname = 'style') then\r
+ begin\r
+ chb.Checked := True;\r
+ end;\r
+\r
xy.y := xy.y + chb.Height + 8;\r
if (o.otype <> 4) then\r
if (chb.Width > xy.x) then xy.x := chb.Width;\r
1: CreateIntegerOption(xy.X, xy.Y - 2, i + 1, o, xmax);\r
2, 3: CreateStringOption(xy.X, xy.Y - 2, i + 1, o, xmax);\r
4: ;\r
- 5: // ??? if FIsInput then\r
- CreateFileOption(xy.X, xy.Y - 2, i + 1, o, True, xmax);\r
+ 5: CreateFileOption(xy.X, xy.Y - 2, i + 1, o, True, xmax);\r
6: if not FIsInput then CreateFileOption(xy.X, xy.Y - 2, i + 1, o, False, xmax);\r
end;\r
if (o.edit <> nil) then\r
if (o.chb.State = cbGrayed) then Continue\r
end\r
else if not(o.chb.Checked) then Continue;\r
- \r
+\r
if (Result <> '') then\r
Result := Result + ',';\r
- Result := Result + o.name;\r
+ Result := Result + o.defname;\r
\r
if (o.edit = nil) then\r
begin\r
procedure TfrmOptions.SetOptsStr(const AValue: string);\r
var\r
l: TStrings;\r
- i, j: Integer;\r
- s, name, value: string;\r
+ i, j, k: Integer;\r
+ s, name, value, name_out: string;\r
o: POption;\r
ud: TUpDown;\r
begin\r
\r
j := FOpts.IndexOf(name);\r
if (j < 0) then\r
- raise eUnknownOption.CreateFmt(_('Unknown option "%s"!'), [name]);\r
+ raise eUnknownOption.CreateFmt(_('Unknown option "%s"!'), [name])\r
+ else if not(FIsInput) then\r
+ begin\r
+ name_out := name + '_out';\r
+ k := FOpts.IndexOf(name);\r
+ if (k >= 0) then\r
+ begin\r
+ name := name_out;\r
+ j := k;\r
+ end;\r
+ end;\r
\r
o := Pointer(FOpts.Objects[j]);\r
if (o.edit <> nil) then\r
WinOpenURL(readme_html_path + '#fmt_' + FFormat);\r
end;\r
\r
-procedure TfrmOptions.CreateFileOption(const x, y, tag: Integer; o: POption; IsInput: Boolean; xmax: Integer = -1);\r
+procedure TfrmOptions.CreateFileOption(const x, y, tag: Integer;\r
+ o: POption; IsInput: Boolean; xmax: Integer = -1);\r
var\r
ed: TEdit;\r
btn: TSpeedButton;\r
ins: Boolean;\r
begin\r
List.Clear;\r
- s := Trim(line) + ',';\r
+ s := Trim(line);\r
+ while ((s <> '') and (s[Length(s)] = ',')) do SetLength(s, Length(s) - 1);\r
+ s := s + ',';\r
\r
cin := PChar(s);\r
cend := cin + StrLen(cin);\r
var\r
i: Integer;\r
s, sx, sy: string;\r
- l: TStrings;\r
+ l: TStringList;\r
\r
begin\r
Result := False;\r
\r
l := TStringList.Create;\r
try\r
+ l.Sorted := True;\r
+ \r
sy := '';\r
for i := 0 to Builtin.Count - 1 do\r
begin\r
if (CompareText(s, 'es') = 0) then sx := _('Spanish') else\r
if (CompareText(s, 'fr') = 0) then sx := _('French') else\r
if (CompareText(s, 'en') = 0) then sx := _('English') else\r
+ if (CompareText(s, 'hu') = 0) then sx := _('Hungarian') else\r
sx := '???';\r
\r
sx := Format('%s - %s', [s, sx]);\r
"Use shortname instead of description",
NULL, ARGTYPE_BOOL, ARG_NOMINMAX },
{"datum", &opt_datum, "GPS datum (def. WGS 84)",
- NULL, ARGTYPE_STRING, ARG_NOMINMAX},
+ "WGS 84", ARGTYPE_STRING, ARG_NOMINMAX},
ARG_TERMINATOR
};
}
xcsv_file.xcsvfp = gbfopen(fname, "r", MYNAME);
- if (opt_datum) {
- xcsv_file.gps_datum = GPS_Lookup_Datum_Index(opt_datum);
- is_fatal(xcsv_file.gps_datum < 0, MYNAME ": datum \"%s\" is not supported.", opt_datum);
- }
-
+ xcsv_file.gps_datum = GPS_Lookup_Datum_Index(opt_datum);
+ is_fatal(xcsv_file.gps_datum < 0, MYNAME ": datum \"%s\" is not supported.", opt_datum);
}
static void
setshort_badchars(xcsv_file.mkshort_handle, xcsv_file.badchars);
}
- if (opt_datum) {
- xcsv_file.gps_datum = GPS_Lookup_Datum_Index(opt_datum);
- is_fatal(xcsv_file.gps_datum < 0, MYNAME ": datum \"%s\" is not supported.", opt_datum);
- }
+ xcsv_file.gps_datum = GPS_Lookup_Datum_Index(opt_datum);
+ is_fatal(xcsv_file.gps_datum < 0, MYNAME ": datum \"%s\" is not supported.", opt_datum);
+}
+
+static void
+xcsv_wr_position_init(const char *fname)
+{
+ xcsv_wr_init(fname);
}
static void
xcsv_wr_deinit(void)
{
- gbfclose(xcsv_file.xcsvfp);
+ gbfclose(xcsv_file.xcsvfp);
- xcsv_destroy_style();
+ xcsv_destroy_style();
+}
+
+static void
+xcsv_wr_position_deinit(void)
+{
+ xcsv_wr_deinit();
+}
+
+
+static void
+xcsv_wr_position(waypoint *wpt)
+{
+ /* Tweak incoming name if we don't have a fix */
+ switch(wpt->fix) {
+ case fix_none:
+ if (wpt->shortname) {
+ xfree(wpt->shortname);
+ }
+ wpt->shortname = xstrdup("ESTIMATED Position");
+ break;
+ default:
+ break;
+ }
+
+ waypt_add(wpt);
+ xcsv_data_write();
+ waypt_del(wpt);
+
+ gbfflush(xcsv_file.xcsvfp);
}
ff_vecs_t xcsv_vecs = {
xcsv_data_write,
NULL,
xcsv_args,
- CET_CHARSET_ASCII, 0 /* CET-REVIEW */
+ CET_CHARSET_ASCII, 0, /* CET-REVIEW */
+ { NULL, NULL, NULL, xcsv_wr_position_init, xcsv_wr_position, xcsv_wr_position_deinit }
+
};
#else
void xcsv_read_internal_style(const char *style_buf) {}
--- /dev/null
+char *xhtml_entities =
+"<!-- Portions (C) International Organization for Standardization 1986\n"
+" Permission to copy in any form is granted for use with\n"
+" conforming SGML systems and applications as defined in\n"
+" ISO 8879, provided this notice is included in all copies.\n"
+"-->\n"
+"<!-- Character entity set. Typical invocation:\n"
+" <!ENTITY % HTMLlat1 PUBLIC\n"
+" \"-//W3C//ENTITIES Latin 1 for XHTML//EN\"\n"
+" \"http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent\">\n"
+" %HTMLlat1;\n"
+"-->\n"
+"\n"
+"<!ENTITY nbsp \" \"> <!-- no-break space = non-breaking space,\n"
+" U+00A0 ISOnum -->\n"
+"<!ENTITY iexcl \"¡\"> <!-- inverted exclamation mark, U+00A1 ISOnum -->\n"
+"<!ENTITY cent \"¢\"> <!-- cent sign, U+00A2 ISOnum -->\n"
+"<!ENTITY pound \"£\"> <!-- pound sign, U+00A3 ISOnum -->\n"
+"<!ENTITY curren \"¤\"> <!-- currency sign, U+00A4 ISOnum -->\n"
+"<!ENTITY yen \"¥\"> <!-- yen sign = yuan sign, U+00A5 ISOnum -->\n"
+"<!ENTITY brvbar \"¦\"> <!-- broken bar = broken vertical bar,\n"
+" U+00A6 ISOnum -->\n"
+"<!ENTITY sect \"§\"> <!-- section sign, U+00A7 ISOnum -->\n"
+"<!ENTITY uml \"¨\"> <!-- diaeresis = spacing diaeresis,\n"
+" U+00A8 ISOdia -->\n"
+"<!ENTITY copy \"©\"> <!-- copyright sign, U+00A9 ISOnum -->\n"
+"<!ENTITY ordf \"ª\"> <!-- feminine ordinal indicator, U+00AA ISOnum -->\n"
+"<!ENTITY laquo \"«\"> <!-- left-pointing double angle quotation mark\n"
+" = left pointing guillemet, U+00AB ISOnum -->\n"
+"<!ENTITY not \"¬\"> <!-- not sign = angled dash,\n"
+" U+00AC ISOnum -->\n"
+"<!ENTITY shy \"­\"> <!-- soft hyphen = discretionary hyphen,\n"
+" U+00AD ISOnum -->\n"
+"<!ENTITY reg \"®\"> <!-- registered sign = registered trade mark sign,\n"
+" U+00AE ISOnum -->\n"
+"<!ENTITY macr \"¯\"> <!-- macron = spacing macron = overline\n"
+" = APL overbar, U+00AF ISOdia -->\n"
+"<!ENTITY deg \"°\"> <!-- degree sign, U+00B0 ISOnum -->\n"
+"<!ENTITY plusmn \"±\"> <!-- plus-minus sign = plus-or-minus sign,\n"
+" U+00B1 ISOnum -->\n"
+"<!ENTITY sup2 \"²\"> <!-- superscript two = superscript digit two\n"
+" = squared, U+00B2 ISOnum -->\n"
+"<!ENTITY sup3 \"³\"> <!-- superscript three = superscript digit three\n"
+" = cubed, U+00B3 ISOnum -->\n"
+"<!ENTITY acute \"´\"> <!-- acute accent = spacing acute,\n"
+" U+00B4 ISOdia -->\n"
+"<!ENTITY micro \"µ\"> <!-- micro sign, U+00B5 ISOnum -->\n"
+"<!ENTITY para \"¶\"> <!-- pilcrow sign = paragraph sign,\n"
+" U+00B6 ISOnum -->\n"
+"<!ENTITY middot \"·\"> <!-- middle dot = Georgian comma\n"
+" = Greek middle dot, U+00B7 ISOnum -->\n"
+"<!ENTITY cedil \"¸\"> <!-- cedilla = spacing cedilla, U+00B8 ISOdia -->\n"
+"<!ENTITY sup1 \"¹\"> <!-- superscript one = superscript digit one,\n"
+" U+00B9 ISOnum -->\n"
+"<!ENTITY ordm \"º\"> <!-- masculine ordinal indicator,\n"
+" U+00BA ISOnum -->\n"
+"<!ENTITY raquo \"»\"> <!-- right-pointing double angle quotation mark\n"
+" = right pointing guillemet, U+00BB ISOnum -->\n"
+"<!ENTITY frac14 \"¼\"> <!-- vulgar fraction one quarter\n"
+" = fraction one quarter, U+00BC ISOnum -->\n"
+"<!ENTITY frac12 \"½\"> <!-- vulgar fraction one half\n"
+" = fraction one half, U+00BD ISOnum -->\n"
+"<!ENTITY frac34 \"¾\"> <!-- vulgar fraction three quarters\n"
+" = fraction three quarters, U+00BE ISOnum -->\n"
+"<!ENTITY iquest \"¿\"> <!-- inverted question mark\n"
+" = turned question mark, U+00BF ISOnum -->\n"
+"<!ENTITY Agrave \"À\"> <!-- latin capital letter A with grave\n"
+" = latin capital letter A grave,\n"
+" U+00C0 ISOlat1 -->\n"
+"<!ENTITY Aacute \"Á\"> <!-- latin capital letter A with acute,\n"
+" U+00C1 ISOlat1 -->\n"
+"<!ENTITY Acirc \"Â\"> <!-- latin capital letter A with circumflex,\n"
+" U+00C2 ISOlat1 -->\n"
+"<!ENTITY Atilde \"Ã\"> <!-- latin capital letter A with tilde,\n"
+" U+00C3 ISOlat1 -->\n"
+"<!ENTITY Auml \"Ä\"> <!-- latin capital letter A with diaeresis,\n"
+" U+00C4 ISOlat1 -->\n"
+"<!ENTITY Aring \"Å\"> <!-- latin capital letter A with ring above\n"
+" = latin capital letter A ring,\n"
+" U+00C5 ISOlat1 -->\n"
+"<!ENTITY AElig \"Æ\"> <!-- latin capital letter AE\n"
+" = latin capital ligature AE,\n"
+" U+00C6 ISOlat1 -->\n"
+"<!ENTITY Ccedil \"Ç\"> <!-- latin capital letter C with cedilla,\n"
+" U+00C7 ISOlat1 -->\n"
+"<!ENTITY Egrave \"È\"> <!-- latin capital letter E with grave,\n"
+" U+00C8 ISOlat1 -->\n"
+"<!ENTITY Eacute \"É\"> <!-- latin capital letter E with acute,\n"
+" U+00C9 ISOlat1 -->\n"
+"<!ENTITY Ecirc \"Ê\"> <!-- latin capital letter E with circumflex,\n"
+" U+00CA ISOlat1 -->\n"
+"<!ENTITY Euml \"Ë\"> <!-- latin capital letter E with diaeresis,\n"
+" U+00CB ISOlat1 -->\n"
+"<!ENTITY Igrave \"Ì\"> <!-- latin capital letter I with grave,\n"
+" U+00CC ISOlat1 -->\n"
+"<!ENTITY Iacute \"Í\"> <!-- latin capital letter I with acute,\n"
+" U+00CD ISOlat1 -->\n"
+"<!ENTITY Icirc \"Î\"> <!-- latin capital letter I with circumflex,\n"
+" U+00CE ISOlat1 -->\n"
+"<!ENTITY Iuml \"Ï\"> <!-- latin capital letter I with diaeresis,\n"
+" U+00CF ISOlat1 -->\n"
+"<!ENTITY ETH \"Ð\"> <!-- latin capital letter ETH, U+00D0 ISOlat1 -->\n"
+"<!ENTITY Ntilde \"Ñ\"> <!-- latin capital letter N with tilde,\n"
+" U+00D1 ISOlat1 -->\n"
+"<!ENTITY Ograve \"Ò\"> <!-- latin capital letter O with grave,\n"
+" U+00D2 ISOlat1 -->\n"
+"<!ENTITY Oacute \"Ó\"> <!-- latin capital letter O with acute,\n"
+" U+00D3 ISOlat1 -->\n"
+"<!ENTITY Ocirc \"Ô\"> <!-- latin capital letter O with circumflex,\n"
+" U+00D4 ISOlat1 -->\n"
+"<!ENTITY Otilde \"Õ\"> <!-- latin capital letter O with tilde,\n"
+" U+00D5 ISOlat1 -->\n"
+"<!ENTITY Ouml \"Ö\"> <!-- latin capital letter O with diaeresis,\n"
+" U+00D6 ISOlat1 -->\n"
+"<!ENTITY times \"×\"> <!-- multiplication sign, U+00D7 ISOnum -->\n"
+"<!ENTITY Oslash \"Ø\"> <!-- latin capital letter O with stroke\n"
+" = latin capital letter O slash,\n"
+" U+00D8 ISOlat1 -->\n"
+"<!ENTITY Ugrave \"Ù\"> <!-- latin capital letter U with grave,\n"
+" U+00D9 ISOlat1 -->\n"
+"<!ENTITY Uacute \"Ú\"> <!-- latin capital letter U with acute,\n"
+" U+00DA ISOlat1 -->\n"
+"<!ENTITY Ucirc \"Û\"> <!-- latin capital letter U with circumflex,\n"
+" U+00DB ISOlat1 -->\n"
+"<!ENTITY Uuml \"Ü\"> <!-- latin capital letter U with diaeresis,\n"
+" U+00DC ISOlat1 -->\n"
+"<!ENTITY Yacute \"Ý\"> <!-- latin capital letter Y with acute,\n"
+" U+00DD ISOlat1 -->\n"
+"<!ENTITY THORN \"Þ\"> <!-- latin capital letter THORN,\n"
+" U+00DE ISOlat1 -->\n"
+"<!ENTITY szlig \"ß\"> <!-- latin small letter sharp s = ess-zed,\n"
+" U+00DF ISOlat1 -->\n"
+"<!ENTITY agrave \"à\"> <!-- latin small letter a with grave\n"
+" = latin small letter a grave,\n"
+" U+00E0 ISOlat1 -->\n"
+"<!ENTITY aacute \"á\"> <!-- latin small letter a with acute,\n"
+" U+00E1 ISOlat1 -->\n"
+"<!ENTITY acirc \"â\"> <!-- latin small letter a with circumflex,\n"
+" U+00E2 ISOlat1 -->\n"
+"<!ENTITY atilde \"ã\"> <!-- latin small letter a with tilde,\n"
+" U+00E3 ISOlat1 -->\n"
+"<!ENTITY auml \"ä\"> <!-- latin small letter a with diaeresis,\n"
+" U+00E4 ISOlat1 -->\n"
+"<!ENTITY aring \"å\"> <!-- latin small letter a with ring above\n"
+" = latin small letter a ring,\n"
+" U+00E5 ISOlat1 -->\n"
+"<!ENTITY aelig \"æ\"> <!-- latin small letter ae\n"
+" = latin small ligature ae, U+00E6 ISOlat1 -->\n"
+"<!ENTITY ccedil \"ç\"> <!-- latin small letter c with cedilla,\n"
+" U+00E7 ISOlat1 -->\n"
+"<!ENTITY egrave \"è\"> <!-- latin small letter e with grave,\n"
+" U+00E8 ISOlat1 -->\n"
+"<!ENTITY eacute \"é\"> <!-- latin small letter e with acute,\n"
+" U+00E9 ISOlat1 -->\n"
+"<!ENTITY ecirc \"ê\"> <!-- latin small letter e with circumflex,\n"
+" U+00EA ISOlat1 -->\n"
+"<!ENTITY euml \"ë\"> <!-- latin small letter e with diaeresis,\n"
+" U+00EB ISOlat1 -->\n"
+"<!ENTITY igrave \"ì\"> <!-- latin small letter i with grave,\n"
+" U+00EC ISOlat1 -->\n"
+"<!ENTITY iacute \"í\"> <!-- latin small letter i with acute,\n"
+" U+00ED ISOlat1 -->\n"
+"<!ENTITY icirc \"î\"> <!-- latin small letter i with circumflex,\n"
+" U+00EE ISOlat1 -->\n"
+"<!ENTITY iuml \"ï\"> <!-- latin small letter i with diaeresis,\n"
+" U+00EF ISOlat1 -->\n"
+"<!ENTITY eth \"ð\"> <!-- latin small letter eth, U+00F0 ISOlat1 -->\n"
+"<!ENTITY ntilde \"ñ\"> <!-- latin small letter n with tilde,\n"
+" U+00F1 ISOlat1 -->\n"
+"<!ENTITY ograve \"ò\"> <!-- latin small letter o with grave,\n"
+" U+00F2 ISOlat1 -->\n"
+"<!ENTITY oacute \"ó\"> <!-- latin small letter o with acute,\n"
+" U+00F3 ISOlat1 -->\n"
+"<!ENTITY ocirc \"ô\"> <!-- latin small letter o with circumflex,\n"
+" U+00F4 ISOlat1 -->\n"
+"<!ENTITY otilde \"õ\"> <!-- latin small letter o with tilde,\n"
+" U+00F5 ISOlat1 -->\n"
+"<!ENTITY ouml \"ö\"> <!-- latin small letter o with diaeresis,\n"
+" U+00F6 ISOlat1 -->\n"
+"<!ENTITY divide \"÷\"> <!-- division sign, U+00F7 ISOnum -->\n"
+"<!ENTITY oslash \"ø\"> <!-- latin small letter o with stroke,\n"
+" = latin small letter o slash,\n"
+" U+00F8 ISOlat1 -->\n"
+"<!ENTITY ugrave \"ù\"> <!-- latin small letter u with grave,\n"
+" U+00F9 ISOlat1 -->\n"
+"<!ENTITY uacute \"ú\"> <!-- latin small letter u with acute,\n"
+" U+00FA ISOlat1 -->\n"
+"<!ENTITY ucirc \"û\"> <!-- latin small letter u with circumflex,\n"
+" U+00FB ISOlat1 -->\n"
+"<!ENTITY uuml \"ü\"> <!-- latin small letter u with diaeresis,\n"
+" U+00FC ISOlat1 -->\n"
+"<!ENTITY yacute \"ý\"> <!-- latin small letter y with acute,\n"
+" U+00FD ISOlat1 -->\n"
+"<!ENTITY thorn \"þ\"> <!-- latin small letter thorn,\n"
+" U+00FE ISOlat1 -->\n"
+"<!ENTITY yuml \"ÿ\"> <!-- latin small letter y with diaeresis,\n"
+" U+00FF ISOlat1 -->\n"
+"<!-- Special characters for XHTML -->\n"
+"\n"
+"<!-- Character entity set. Typical invocation:\n"
+" <!ENTITY % HTMLspecial PUBLIC\n"
+" \"-//W3C//ENTITIES Special for XHTML//EN\"\n"
+" \"http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent\">\n"
+" %HTMLspecial;\n"
+"-->\n"
+"\n"
+"<!-- Portions (C) International Organization for Standardization 1986:\n"
+" Permission to copy in any form is granted for use with\n"
+" conforming SGML systems and applications as defined in\n"
+" ISO 8879, provided this notice is included in all copies.\n"
+"-->\n"
+"\n"
+"<!-- Relevant ISO entity set is given unless names are newly introduced.\n"
+" New names (i.e., not in ISO 8879 list) do not clash with any\n"
+" existing ISO 8879 entity names. ISO 10646 character numbers\n"
+" are given for each character, in hex. values are decimal\n"
+" conversions of the ISO 10646 values and refer to the document\n"
+" character set. Names are Unicode names. \n"
+"-->\n"
+"\n"
+"<!-- C0 Controls and Basic Latin -->\n"
+"<!ENTITY quot \""\"> <!-- quotation mark, U+0022 ISOnum -->\n"
+"<!ENTITY amp \"&#38;\"> <!-- ampersand, U+0026 ISOnum -->\n"
+"<!ENTITY lt \"&#60;\"> <!-- less-than sign, U+003C ISOnum -->\n"
+"<!ENTITY gt \">\"> <!-- greater-than sign, U+003E ISOnum -->\n"
+"<!ENTITY apos \"'\"> <!-- apostrophe = APL quote, U+0027 ISOnum -->\n"
+"\n"
+"<!-- Latin Extended-A -->\n"
+"<!ENTITY OElig \"Œ\"> <!-- latin capital ligature OE,\n"
+" U+0152 ISOlat2 -->\n"
+"<!ENTITY oelig \"œ\"> <!-- latin small ligature oe, U+0153 ISOlat2 -->\n"
+"<!-- ligature is a misnomer, this is a separate character in some languages -->\n"
+"<!ENTITY Scaron \"Š\"> <!-- latin capital letter S with caron,\n"
+" U+0160 ISOlat2 -->\n"
+"<!ENTITY scaron \"š\"> <!-- latin small letter s with caron,\n"
+" U+0161 ISOlat2 -->\n"
+"<!ENTITY Yuml \"Ÿ\"> <!-- latin capital letter Y with diaeresis,\n"
+" U+0178 ISOlat2 -->\n"
+"\n"
+"<!-- Spacing Modifier Letters -->\n"
+"<!ENTITY circ \"ˆ\"> <!-- modifier letter circumflex accent,\n"
+" U+02C6 ISOpub -->\n"
+"<!ENTITY tilde \"˜\"> <!-- small tilde, U+02DC ISOdia -->\n"
+"\n"
+"<!-- General Punctuation -->\n"
+"<!ENTITY ensp \" \"> <!-- en space, U+2002 ISOpub -->\n"
+"<!ENTITY emsp \" \"> <!-- em space, U+2003 ISOpub -->\n"
+"<!ENTITY thinsp \" \"> <!-- thin space, U+2009 ISOpub -->\n"
+"<!ENTITY zwnj \"‌\"> <!-- zero width non-joiner,\n"
+" U+200C NEW RFC 2070 -->\n"
+"<!ENTITY zwj \"‍\"> <!-- zero width joiner, U+200D NEW RFC 2070 -->\n"
+"<!ENTITY lrm \"‎\"> <!-- left-to-right mark, U+200E NEW RFC 2070 -->\n"
+"<!ENTITY rlm \"‏\"> <!-- right-to-left mark, U+200F NEW RFC 2070 -->\n"
+"<!ENTITY ndash \"–\"> <!-- en dash, U+2013 ISOpub -->\n"
+"<!ENTITY mdash \"—\"> <!-- em dash, U+2014 ISOpub -->\n"
+"<!ENTITY lsquo \"‘\"> <!-- left single quotation mark,\n"
+" U+2018 ISOnum -->\n"
+"<!ENTITY rsquo \"’\"> <!-- right single quotation mark,\n"
+" U+2019 ISOnum -->\n"
+"<!ENTITY sbquo \"‚\"> <!-- single low-9 quotation mark, U+201A NEW -->\n"
+"<!ENTITY ldquo \"“\"> <!-- left double quotation mark,\n"
+" U+201C ISOnum -->\n"
+"<!ENTITY rdquo \"”\"> <!-- right double quotation mark,\n"
+" U+201D ISOnum -->\n"
+"<!ENTITY bdquo \"„\"> <!-- double low-9 quotation mark, U+201E NEW -->\n"
+"<!ENTITY dagger \"†\"> <!-- dagger, U+2020 ISOpub -->\n"
+"<!ENTITY Dagger \"‡\"> <!-- double dagger, U+2021 ISOpub -->\n"
+"<!ENTITY permil \"‰\"> <!-- per mille sign, U+2030 ISOtech -->\n"
+"<!ENTITY lsaquo \"‹\"> <!-- single left-pointing angle quotation mark,\n"
+" U+2039 ISO proposed -->\n"
+"<!-- lsaquo is proposed but not yet ISO standardized -->\n"
+"<!ENTITY rsaquo \"›\"> <!-- single right-pointing angle quotation mark,\n"
+" U+203A ISO proposed -->\n"
+"<!-- rsaquo is proposed but not yet ISO standardized -->\n"
+"\n"
+"<!-- Currency Symbols -->\n"
+"<!ENTITY euro \"€\"> <!-- euro sign, U+20AC NEW -->\n"
+"<!-- Mathematical, Greek and Symbolic characters for XHTML -->\n"
+"\n"
+"<!-- Character entity set. Typical invocation:\n"
+" <!ENTITY % HTMLsymbol PUBLIC\n"
+" \"-//W3C//ENTITIES Symbols for XHTML//EN\"\n"
+" \"http://www.w3.org/TR/xhtml1/DTD/xhtml-symbol.ent\">\n"
+" %HTMLsymbol;\n"
+"-->\n"
+"\n"
+"<!-- Portions (C) International Organization for Standardization 1986:\n"
+" Permission to copy in any form is granted for use with\n"
+" conforming SGML systems and applications as defined in\n"
+" ISO 8879, provided this notice is included in all copies.\n"
+"-->\n"
+"\n"
+"<!-- Relevant ISO entity set is given unless names are newly introduced.\n"
+" New names (i.e., not in ISO 8879 list) do not clash with any\n"
+" existing ISO 8879 entity names. ISO 10646 character numbers\n"
+" are given for each character, in hex. values are decimal\n"
+" conversions of the ISO 10646 values and refer to the document\n"
+" character set. Names are Unicode names. \n"
+"-->\n"
+"\n"
+"<!-- Latin Extended-B -->\n"
+"<!ENTITY fnof \"ƒ\"> <!-- latin small letter f with hook = function\n"
+" = florin, U+0192 ISOtech -->\n"
+"\n"
+"<!-- Greek -->\n"
+"<!ENTITY Alpha \"Α\"> <!-- greek capital letter alpha, U+0391 -->\n"
+"<!ENTITY Beta \"Β\"> <!-- greek capital letter beta, U+0392 -->\n"
+"<!ENTITY Gamma \"Γ\"> <!-- greek capital letter gamma,\n"
+" U+0393 ISOgrk3 -->\n"
+"<!ENTITY Delta \"Δ\"> <!-- greek capital letter delta,\n"
+" U+0394 ISOgrk3 -->\n"
+"<!ENTITY Epsilon \"Ε\"> <!-- greek capital letter epsilon, U+0395 -->\n"
+"<!ENTITY Zeta \"Ζ\"> <!-- greek capital letter zeta, U+0396 -->\n"
+"<!ENTITY Eta \"Η\"> <!-- greek capital letter eta, U+0397 -->\n"
+"<!ENTITY Theta \"Θ\"> <!-- greek capital letter theta,\n"
+" U+0398 ISOgrk3 -->\n"
+"<!ENTITY Iota \"Ι\"> <!-- greek capital letter iota, U+0399 -->\n"
+"<!ENTITY Kappa \"Κ\"> <!-- greek capital letter kappa, U+039A -->\n"
+"<!ENTITY Lambda \"Λ\"> <!-- greek capital letter lamda,\n"
+" U+039B ISOgrk3 -->\n"
+"<!ENTITY Mu \"Μ\"> <!-- greek capital letter mu, U+039C -->\n"
+"<!ENTITY Nu \"Ν\"> <!-- greek capital letter nu, U+039D -->\n"
+"<!ENTITY Xi \"Ξ\"> <!-- greek capital letter xi, U+039E ISOgrk3 -->\n"
+"<!ENTITY Omicron \"Ο\"> <!-- greek capital letter omicron, U+039F -->\n"
+"<!ENTITY Pi \"Π\"> <!-- greek capital letter pi, U+03A0 ISOgrk3 -->\n"
+"<!ENTITY Rho \"Ρ\"> <!-- greek capital letter rho, U+03A1 -->\n"
+"<!-- there is no Sigmaf, and no U+03A2 character either -->\n"
+"<!ENTITY Sigma \"Σ\"> <!-- greek capital letter sigma,\n"
+" U+03A3 ISOgrk3 -->\n"
+"<!ENTITY Tau \"Τ\"> <!-- greek capital letter tau, U+03A4 -->\n"
+"<!ENTITY Upsilon \"Υ\"> <!-- greek capital letter upsilon,\n"
+" U+03A5 ISOgrk3 -->\n"
+"<!ENTITY Phi \"Φ\"> <!-- greek capital letter phi,\n"
+" U+03A6 ISOgrk3 -->\n"
+"<!ENTITY Chi \"Χ\"> <!-- greek capital letter chi, U+03A7 -->\n"
+"<!ENTITY Psi \"Ψ\"> <!-- greek capital letter psi,\n"
+" U+03A8 ISOgrk3 -->\n"
+"<!ENTITY Omega \"Ω\"> <!-- greek capital letter omega,\n"
+" U+03A9 ISOgrk3 -->\n"
+"\n"
+"<!ENTITY alpha \"α\"> <!-- greek small letter alpha,\n"
+" U+03B1 ISOgrk3 -->\n"
+"<!ENTITY beta \"β\"> <!-- greek small letter beta, U+03B2 ISOgrk3 -->\n"
+"<!ENTITY gamma \"γ\"> <!-- greek small letter gamma,\n"
+" U+03B3 ISOgrk3 -->\n"
+"<!ENTITY delta \"δ\"> <!-- greek small letter delta,\n"
+" U+03B4 ISOgrk3 -->\n"
+"<!ENTITY epsilon \"ε\"> <!-- greek small letter epsilon,\n"
+" U+03B5 ISOgrk3 -->\n"
+"<!ENTITY zeta \"ζ\"> <!-- greek small letter zeta, U+03B6 ISOgrk3 -->\n"
+"<!ENTITY eta \"η\"> <!-- greek small letter eta, U+03B7 ISOgrk3 -->\n"
+"<!ENTITY theta \"θ\"> <!-- greek small letter theta,\n"
+" U+03B8 ISOgrk3 -->\n"
+"<!ENTITY iota \"ι\"> <!-- greek small letter iota, U+03B9 ISOgrk3 -->\n"
+"<!ENTITY kappa \"κ\"> <!-- greek small letter kappa,\n"
+" U+03BA ISOgrk3 -->\n"
+"<!ENTITY lambda \"λ\"> <!-- greek small letter lamda,\n"
+" U+03BB ISOgrk3 -->\n"
+"<!ENTITY mu \"μ\"> <!-- greek small letter mu, U+03BC ISOgrk3 -->\n"
+"<!ENTITY nu \"ν\"> <!-- greek small letter nu, U+03BD ISOgrk3 -->\n"
+"<!ENTITY xi \"ξ\"> <!-- greek small letter xi, U+03BE ISOgrk3 -->\n"
+"<!ENTITY omicron \"ο\"> <!-- greek small letter omicron, U+03BF NEW -->\n"
+"<!ENTITY pi \"π\"> <!-- greek small letter pi, U+03C0 ISOgrk3 -->\n"
+"<!ENTITY rho \"ρ\"> <!-- greek small letter rho, U+03C1 ISOgrk3 -->\n"
+"<!ENTITY sigmaf \"ς\"> <!-- greek small letter final sigma,\n"
+" U+03C2 ISOgrk3 -->\n"
+"<!ENTITY sigma \"σ\"> <!-- greek small letter sigma,\n"
+" U+03C3 ISOgrk3 -->\n"
+"<!ENTITY tau \"τ\"> <!-- greek small letter tau, U+03C4 ISOgrk3 -->\n"
+"<!ENTITY upsilon \"υ\"> <!-- greek small letter upsilon,\n"
+" U+03C5 ISOgrk3 -->\n"
+"<!ENTITY phi \"φ\"> <!-- greek small letter phi, U+03C6 ISOgrk3 -->\n"
+"<!ENTITY chi \"χ\"> <!-- greek small letter chi, U+03C7 ISOgrk3 -->\n"
+"<!ENTITY psi \"ψ\"> <!-- greek small letter psi, U+03C8 ISOgrk3 -->\n"
+"<!ENTITY omega \"ω\"> <!-- greek small letter omega,\n"
+" U+03C9 ISOgrk3 -->\n"
+"<!ENTITY thetasym \"ϑ\"> <!-- greek theta symbol,\n"
+" U+03D1 NEW -->\n"
+"<!ENTITY upsih \"ϒ\"> <!-- greek upsilon with hook symbol,\n"
+" U+03D2 NEW -->\n"
+"<!ENTITY piv \"ϖ\"> <!-- greek pi symbol, U+03D6 ISOgrk3 -->\n"
+"\n"
+"<!-- General Punctuation -->\n"
+"<!ENTITY bull \"•\"> <!-- bullet = black small circle,\n"
+" U+2022 ISOpub -->\n"
+"<!-- bullet is NOT the same as bullet operator, U+2219 -->\n"
+"<!ENTITY hellip \"…\"> <!-- horizontal ellipsis = three dot leader,\n"
+" U+2026 ISOpub -->\n"
+"<!ENTITY prime \"′\"> <!-- prime = minutes = feet, U+2032 ISOtech -->\n"
+"<!ENTITY Prime \"″\"> <!-- double prime = seconds = inches,\n"
+" U+2033 ISOtech -->\n"
+"<!ENTITY oline \"‾\"> <!-- overline = spacing overscore,\n"
+" U+203E NEW -->\n"
+"<!ENTITY frasl \"⁄\"> <!-- fraction slash, U+2044 NEW -->\n"
+"\n"
+"<!-- Letterlike Symbols -->\n"
+"<!ENTITY weierp \"℘\"> <!-- script capital P = power set\n"
+" = Weierstrass p, U+2118 ISOamso -->\n"
+"<!ENTITY image \"ℑ\"> <!-- black-letter capital I = imaginary part,\n"
+" U+2111 ISOamso -->\n"
+"<!ENTITY real \"ℜ\"> <!-- black-letter capital R = real part symbol,\n"
+" U+211C ISOamso -->\n"
+"<!ENTITY trade \"™\"> <!-- trade mark sign, U+2122 ISOnum -->\n"
+"<!ENTITY alefsym \"ℵ\"> <!-- alef symbol = first transfinite cardinal,\n"
+" U+2135 NEW -->\n"
+"<!-- alef symbol is NOT the same as hebrew letter alef,\n"
+" U+05D0 although the same glyph could be used to depict both characters -->\n"
+"\n"
+"<!-- Arrows -->\n"
+"<!ENTITY larr \"←\"> <!-- leftwards arrow, U+2190 ISOnum -->\n"
+"<!ENTITY uarr \"↑\"> <!-- upwards arrow, U+2191 ISOnum-->\n"
+"<!ENTITY rarr \"→\"> <!-- rightwards arrow, U+2192 ISOnum -->\n"
+"<!ENTITY darr \"↓\"> <!-- downwards arrow, U+2193 ISOnum -->\n"
+"<!ENTITY harr \"↔\"> <!-- left right arrow, U+2194 ISOamsa -->\n"
+"<!ENTITY crarr \"↵\"> <!-- downwards arrow with corner leftwards\n"
+" = carriage return, U+21B5 NEW -->\n"
+"<!ENTITY lArr \"⇐\"> <!-- leftwards double arrow, U+21D0 ISOtech -->\n"
+"<!-- Unicode does not say that lArr is the same as the 'is implied by' arrow\n"
+" but also does not have any other character for that function. So lArr can\n"
+" be used for 'is implied by' as ISOtech suggests -->\n"
+"<!ENTITY uArr \"⇑\"> <!-- upwards double arrow, U+21D1 ISOamsa -->\n"
+"<!ENTITY rArr \"⇒\"> <!-- rightwards double arrow,\n"
+" U+21D2 ISOtech -->\n"
+"<!-- Unicode does not say this is the 'implies' character but does not have \n"
+" another character with this function so rArr can be used for 'implies'\n"
+" as ISOtech suggests -->\n"
+"<!ENTITY dArr \"⇓\"> <!-- downwards double arrow, U+21D3 ISOamsa -->\n"
+"<!ENTITY hArr \"⇔\"> <!-- left right double arrow,\n"
+" U+21D4 ISOamsa -->\n"
+"\n"
+"<!-- Mathematical Operators -->\n"
+"<!ENTITY forall \"∀\"> <!-- for all, U+2200 ISOtech -->\n"
+"<!ENTITY part \"∂\"> <!-- partial differential, U+2202 ISOtech -->\n"
+"<!ENTITY exist \"∃\"> <!-- there exists, U+2203 ISOtech -->\n"
+"<!ENTITY empty \"∅\"> <!-- empty set = null set, U+2205 ISOamso -->\n"
+"<!ENTITY nabla \"∇\"> <!-- nabla = backward difference,\n"
+" U+2207 ISOtech -->\n"
+"<!ENTITY isin \"∈\"> <!-- element of, U+2208 ISOtech -->\n"
+"<!ENTITY notin \"∉\"> <!-- not an element of, U+2209 ISOtech -->\n"
+"<!ENTITY ni \"∋\"> <!-- contains as member, U+220B ISOtech -->\n"
+"<!ENTITY prod \"∏\"> <!-- n-ary product = product sign,\n"
+" U+220F ISOamsb -->\n"
+"<!-- prod is NOT the same character as U+03A0 'greek capital letter pi' though\n"
+" the same glyph might be used for both -->\n"
+"<!ENTITY sum \"∑\"> <!-- n-ary summation, U+2211 ISOamsb -->\n"
+"<!-- sum is NOT the same character as U+03A3 'greek capital letter sigma'\n"
+" though the same glyph might be used for both -->\n"
+"<!ENTITY minus \"−\"> <!-- minus sign, U+2212 ISOtech -->\n"
+"<!ENTITY lowast \"∗\"> <!-- asterisk operator, U+2217 ISOtech -->\n"
+"<!ENTITY radic \"√\"> <!-- square root = radical sign,\n"
+" U+221A ISOtech -->\n"
+"<!ENTITY prop \"∝\"> <!-- proportional to, U+221D ISOtech -->\n"
+"<!ENTITY infin \"∞\"> <!-- infinity, U+221E ISOtech -->\n"
+"<!ENTITY ang \"∠\"> <!-- angle, U+2220 ISOamso -->\n"
+"<!ENTITY and \"∧\"> <!-- logical and = wedge, U+2227 ISOtech -->\n"
+"<!ENTITY or \"∨\"> <!-- logical or = vee, U+2228 ISOtech -->\n"
+"<!ENTITY cap \"∩\"> <!-- intersection = cap, U+2229 ISOtech -->\n"
+"<!ENTITY cup \"∪\"> <!-- union = cup, U+222A ISOtech -->\n"
+"<!ENTITY int \"∫\"> <!-- integral, U+222B ISOtech -->\n"
+"<!ENTITY there4 \"∴\"> <!-- therefore, U+2234 ISOtech -->\n"
+"<!ENTITY sim \"∼\"> <!-- tilde operator = varies with = similar to,\n"
+" U+223C ISOtech -->\n"
+"<!-- tilde operator is NOT the same character as the tilde, U+007E,\n"
+" although the same glyph might be used to represent both -->\n"
+"<!ENTITY cong \"≅\"> <!-- approximately equal to, U+2245 ISOtech -->\n"
+"<!ENTITY asymp \"≈\"> <!-- almost equal to = asymptotic to,\n"
+" U+2248 ISOamsr -->\n"
+"<!ENTITY ne \"≠\"> <!-- not equal to, U+2260 ISOtech -->\n"
+"<!ENTITY equiv \"≡\"> <!-- identical to, U+2261 ISOtech -->\n"
+"<!ENTITY le \"≤\"> <!-- less-than or equal to, U+2264 ISOtech -->\n"
+"<!ENTITY ge \"≥\"> <!-- greater-than or equal to,\n"
+" U+2265 ISOtech -->\n"
+"<!ENTITY sub \"⊂\"> <!-- subset of, U+2282 ISOtech -->\n"
+"<!ENTITY sup \"⊃\"> <!-- superset of, U+2283 ISOtech -->\n"
+"<!ENTITY nsub \"⊄\"> <!-- not a subset of, U+2284 ISOamsn -->\n"
+"<!ENTITY sube \"⊆\"> <!-- subset of or equal to, U+2286 ISOtech -->\n"
+"<!ENTITY supe \"⊇\"> <!-- superset of or equal to,\n"
+" U+2287 ISOtech -->\n"
+"<!ENTITY oplus \"⊕\"> <!-- circled plus = direct sum,\n"
+" U+2295 ISOamsb -->\n"
+"<!ENTITY otimes \"⊗\"> <!-- circled times = vector product,\n"
+" U+2297 ISOamsb -->\n"
+"<!ENTITY perp \"⊥\"> <!-- up tack = orthogonal to = perpendicular,\n"
+" U+22A5 ISOtech -->\n"
+"<!ENTITY sdot \"⋅\"> <!-- dot operator, U+22C5 ISOamsb -->\n"
+"<!-- dot operator is NOT the same character as U+00B7 middle dot -->\n"
+"\n"
+"<!-- Miscellaneous Technical -->\n"
+"<!ENTITY lceil \"⌈\"> <!-- left ceiling = APL upstile,\n"
+" U+2308 ISOamsc -->\n"
+"<!ENTITY rceil \"⌉\"> <!-- right ceiling, U+2309 ISOamsc -->\n"
+"<!ENTITY lfloor \"⌊\"> <!-- left floor = APL downstile,\n"
+" U+230A ISOamsc -->\n"
+"<!ENTITY rfloor \"⌋\"> <!-- right floor, U+230B ISOamsc -->\n"
+"<!ENTITY lang \"〈\"> <!-- left-pointing angle bracket = bra,\n"
+" U+2329 ISOtech -->\n"
+"<!-- lang is NOT the same character as U+003C 'less than sign' \n"
+" or U+2039 'single left-pointing angle quotation mark' -->\n"
+"<!ENTITY rang \"〉\"> <!-- right-pointing angle bracket = ket,\n"
+" U+232A ISOtech -->\n"
+"<!-- rang is NOT the same character as U+003E 'greater than sign' \n"
+" or U+203A 'single right-pointing angle quotation mark' -->\n"
+"\n"
+"<!-- Geometric Shapes -->\n"
+"<!ENTITY loz \"◊\"> <!-- lozenge, U+25CA ISOpub -->\n"
+"\n"
+"<!-- Miscellaneous Symbols -->\n"
+"<!ENTITY spades \"♠\"> <!-- black spade suit, U+2660 ISOpub -->\n"
+"<!-- black here seems to mean filled as opposed to hollow -->\n"
+"<!ENTITY clubs \"♣\"> <!-- black club suit = shamrock,\n"
+" U+2663 ISOpub -->\n"
+"<!ENTITY hearts \"♥\"> <!-- black heart suit = valentine,\n"
+" U+2665 ISOpub -->\n"
+"<!ENTITY diams \"♦\"> <!-- black diamond suit, U+2666 ISOpub -->\n"
+;
<!ENTITY app_datums SYSTEM "datums.xml">
<!ENTITY app_garmin_icons SYSTEM "garmin_icons.xml">
<!ENTITY app_styles SYSTEM "styles.xml">
+<!ENTITY app_glossary SYSTEM "glossary.xml">
&app_datums;
&app_garmin_icons;
&app_styles;
+&app_glossary;
</para>
<para><userinput>./configure --help</userinput></para>
<para>
-lists all the supported options, but additionally we have:
+lists all the supported options, but additionally we have:</para><para>
<option>--disable-shapefile</option> Excludes the shapefile support.
</para>
<para>
--- /dev/null
+ <glossary id="Glossary">
+ <title>Glossary</title>
+ <para>Terms that are used in conjunction with GPSBabel.</para>
+ <glossdiv id="G">
+ <title>G</title>
+ <glossentry id="gl_xml">
+ <glossterm>Geocaching</glossterm>
+ <glossdef>
+ <para>GPS based "paper chase", see
+ <ulink url="http://en.wikipedia.org/wiki/Geocaching" /></para>
+ </glossdef>
+ </glossentry>
+ </glossdiv>
+ <glossdiv>
+ <title>I</title>
+ <glossentry id="gl_itinerary">
+ <glossterm>Itinerary</glossterm>
+ <glossdef>
+ <para>same as a Route (e.g. used by TomTom)</para>
+ </glossdef>
+ </glossentry>
+ </glossdiv>
+ <glossdiv id="P">
+ <title>P</title>
+ <glossentry id="gl_poi">
+ <glossterm>Points of Interest (POI)</glossterm>
+ <glossdef>
+ <para>a collection of gas stations, post boxes, shops and
+ like.</para>
+ </glossdef>
+ </glossentry>
+ </glossdiv>
+ <glossdiv id="R">
+ <title>R</title>
+ <glossentry id="gl_route">
+ <glossterm>Route</glossterm>
+ <glossdef>
+ <para>a list of geopoints (often with names) connected in
+ a specific order. Usually a collection of geopoints
+ defining the route you want to pass while traveling,
+ created by PC software, or generated inside a GPS device.
+ They can be composed of existing waypoints, or new
+ "routepoints" might be generated.</para>
+ </glossdef>
+ </glossentry>
+ </glossdiv>
+ <glossdiv id="T">
+ <title>T</title>
+ <glossentry id="gl_track">
+ <glossterm>Track</glossterm>
+ <glossdef>
+ <para>a collection of geopoints recorded by your GPS
+ device while traveling -- "breadcrumb trails". The order
+ of trackpoints within the track is important. Usually a
+ trackpoint doesn't have a name or comment, but a
+ timestamp. This distinguishes a trackpoint from a
+ waypoint.</para>
+ </glossdef>
+ </glossentry>
+ </glossdiv>
+ <glossdiv id="W">
+ <title>W</title>
+ <glossentry id="gl_waypoint">
+ <glossterm>Waypoints</glossterm>
+ <glossdef>
+ <para>are geopoints that are not necessarily connected to
+ other points, and their order is unimportant. They can be
+ entered before, while or after you actually visit the
+ place and might have tags like name, comment and the
+ like. Usually used to mark special locations as your
+ home, a hotel or a geocache.</para>
+ </glossdef>
+ </glossentry>
+ </glossdiv>
+ </glossary>
<preface id="Introduction">
<title>Introduction</title>
<section id="The_Problem">
- <title>The Problem: Too many incompatible formats</title>
+ <title>The Problem: Too many incompatible GPS file formats</title>
<para> There are simply too many gratuitously different file formats
to hold waypoint, track, and route information in various programs
used by computers and GPS receivers.
lines of reasonable ISO C so they can be stamped
out pretty trivially. Formats that are ASCII text delimited in some
fixed way can be added with no programming at all via our
- <link linkend ="Styles">style</link> mechanism.
+ <link linkend="Styles">style</link> mechanism.
</para>
</section>
</preface>
"mystyle.style" and you want to write the waypoints from
a GPX file named "mine.gpx" to it, you would issue a command like:
</para>
-<para><userinput>gpsbabel -i gpx -f mine.gpx -o xcsv,style=mystyle.style -f mine.new</userinput></para>
+<para><userinput>gpsbabel -i gpx -f mine.gpx -o xcsv,style=mystyle.style -F mine.new</userinput></para>
<para>
You might then examine <filename>mine.new</filename> to see if it met
your expectations. If not, you could continue to tweak
</screen>
</section>
+<section id="style_def_map_en_bng">
+<title>MAP_EN_BNG</title>
+<para>
+ MAP_EN_BNG converts coordinates from/to British National Grid (BNG).
+</para>
+<para>
+ The only supported order of the items is: Map,Easting,Northing.
+ During output all coordinates have to be located within this limited area.
+</para>
+<para>
+examples:
+</para>
+<screen format="linespecific">
+ IFIELD MAP_EN_BNG,"","%s%5d %5d" # (writes i.e. "SJ00001 00001")
+ IFIELD MAP_EN_BNG,"","%s %d %d" # (writes i.e. "TQ 888 999")
+</screen>
+</section>
+
<section id="style_def_lonhuman">
<title>LON_HUMAN_READABLE</title>
<para>
</screen>
</section>
+<section id="style_def_latlon_10ex">
+<title>LAT_10EX / LON_10EX</title>
+<para>
+ Defines the latitude or longitude in the format used i.e. by TomTom Navigator
+ itinerary files. It is degress multiplied by 10 power X. X have to be replaced with
+ a valid decimal value. A factor of 10000 would be generated by LAT_10E5 as shown
+ in the examples below.
+</para>
+<para>
+examples:
+</para>
+<screen format="linespecific"> IFIELD LAT_10E5, "%f", "%.f" # (writes 3558322)
+</screen>
+<screen format="linespecific"> IFIELD LON_10E5, "%f", "%.f" # (writes -8708082)
+</screen>
+</section>
+
<section id="style_def_altfeet">
<title>ALT_FEET</title>
<para>
</screen>
</section>
+<section id="style_def_isotimems">
+<title>ISO_TIME_MS</title>
+<para>
+ ISO_TIME_MS is much like ISO_TIME, but expresses milliseconds at the
+ end of the timestamp.
+ It is thus in the format yyyy-mm-ddThh:mm:ss.SSSzzzzz
+ where 'SSS' is milliseconds and zzzzzz is the local time offset
+ or the character Z for UTC time.
+ On output, UTC 'Z' time zone will always be used.
+</para>
+<para>
+example:
+</para>
+<screen format="linespecific"> IFIELD ISO_TIME_MS,"","%s"
+</screen>
+</section>
+
<section id="style_def_geodiff">
<title>GEOCACHE_DIFF</title>
<para>
</screen>
</section>
+<section id="style_def_pathspeed_kph">
+<title>PATH_SPEED_KPH</title>
+<para>
+ Like PATH_SPEED but means kilometers per hour.
+</para>
+<para>
+example:
+</para>
+<screen format="linespecific"> PATH_SPEED_KPH,"","%.1f"
+</screen>
+</section>
+
+<section id="style_def_pathspeed_mph">
+<title>PATH_SPEED_MPH</title>
+<para>
+ Like PATH_SPEED but means miles per hour.
+</para>
+<para>
+example:
+</para>
+<screen format="linespecific"> PATH_SPEED_MPH,"","%.1f"
+</screen>
+</section>
+
+<section id="style_def_pathspeed_knots">
+<title>PATH_SPEED_KNOTS</title>
+<para>
+ Like PATH_SPEED but means knots (nautical).
+</para>
+<para>
+example:
+</para>
+<screen format="linespecific"> PATH_SPEED_KNOTS,"","%.1f"
+</screen>
+</section>
+
<section id="style_def_pathcourse">
<title>PATH_COURSE</title>
<para>
<screen format="linespecific"> GPS_FIX,"","%s"
</screen>
</section>
+
+<section id="style_track_name">
+<title>TRACK_NAME</title>
+<para>The name of the track currently being operated on. Needs string conversion.</para><para>example:<screen format="linespecific">TRACK_NAME, "", "%s"</screen></para></section>
+
+<section id="style_route_name">
+<title>ROUTE_NAME</title>
+<para>The name of the route currently being operated on. Needs string conversion.</para><para>example:<screen format="linespecific">ROUTE_NAME, "", "%s"</screen></para></section>
+
</section> <!-- definitions -->
<section id="style_examples">
it from, what you're writing, and what to write it to. For
example:</para>
<para><userinput>gpsbabel -i geo -f /tmp/geocaching.loc -o gpx -F /tmp/geocaching.gpx</userinput></para>
- <para>tells it to read the file "/tmp/geocaching.loc" in geocaching.com
- format and create a new file in GPX format.</para>
+ <para>tells it to read the file <filename>/tmp/geocaching.loc</filename> in geocaching.com
+ format and create a new file <filename>/tmp/geocaching.gpx</filename> in GPX format. It's important to note that the names have nothign to do with the formats actually used.</para>
<para> This command will read from a Magellan unit attached
to the first serial port on a Linux system (device names will
- vary on other OSes) and write them as a geocaching loc file.
- The second command does the same on Microsoft Windows.</para>
+ vary on other OSes) and write them as a geocaching loc file.</para>
<para><userinput>gpsbabel -i magellan -f /dev/ttyS0 -o geo -F mag.loc</userinput></para>
+ <para>This second command does the same on Microsoft Windows.</para>
<para><userinput>gpsbabel -i magellan -f com1 -o geo -F mag.loc</userinput></para>
- <para>Optionally, you may specify <parameter moreinfo="none">"-s"</parameter> in any command line. This
+ <para>Optionally, you may specify <parameter moreinfo="none">-s</parameter> in any command line. This
causes the program to ignore any "short" names that may be
present in the source data format and synthesize one from the
long name. This is particularly useful if you're writing to
<para>
Many of the available format options in GPSBabel can themselves
take options. While we try to make all the formats do the most
- sensible thing possible without any extra options, this allows
+ sensible thing possible without any extra options; this allows
great power and flexibility in the operation of the program.
</para>
<para>
of supported character sets with "gpsbabel -l". To change
the character set on both sides you should do this:</para>
<para><userinput>gpsbabel -i xcsv,style=foo.style -c latin1 -f foo -o xcsv,style=bar.style -c ms-ansi -F bar</userinput></para>
- <para>Note, that some formats has a fixed character set and ignore this option.</para>
+ <para>Note, that some formats have a fixed character set and ignore this option.</para>
</sect1>
<sect1 id="Route_And_Track_Modes">
<title>Route and Track Modes</title>
may not really be the route you had in mind.
</para>
<para> Tracks and routes will sometimes be converted to a
- list of waypoints when necessary, f.i. when writing into one
+ list of waypoints when necessary, One example is when writing into one
of the CSV formats. The inverse operation is not supported
right now, so reading the converted track back from CSV will
always result in a list of waypoints, not the original track.
</para>
<para>
As of this writing, Garmin's PVT protocol and NMEA are supported
- inputs and KML is supported on output. Additional formats
- may be added by interested parties later.
+ inputs. KML, NMEA, and the variou XCSV formats are supported on
+ output. Additional formats may be added by interested parties
+ later.
</para>
<para><userinput>gpsbabel -T -i garmin -f usb: -o kml -F xxx.kml</userinput></para>
<para>
--- /dev/null
+<para>
+ Like GPSBabel <ulink url="http://www.gpsinformation.org/ronh/g7towin.htm">G7ToWin</ulink> is a program which allows uploading and
+ downloading information from several GPS devices (Garmin, Lowrance/Eagle, Magellan).
+ G7ToWin has its own data format, which is an enhanced format used in Gardown.
+</para>
+
+<para>
+ This format can read both file types, G7ToWin (.g7t) and Gardown (.gdn).
+</para>
<member>Edge 205</member>
<member>Edge 305</member>
<member>eTrex Legend C</member>
-<member>eTrex LegendCX</member>
+<member>eTrex Legend Cx</member>
+<member>eTrex Legend HCx</member>
+<member>eTrex Summit Cx</member>
+<member>eTrex Summit HC</member>
<member>eTrex Venture C</member>
-<member>eTrex Venture CX</member>
-<member>eTrex VistaC</member>
-<member>eTrex Vista CX</member>
+<member>eTrex Venture Cx</member>
+<member>eTrex Venture HC</member>
+<member>eTrex Vista C</member>
+<member>eTrex Vista Cx</member>
+<member>eTrex Vista HCx</member>
<member>Forerunner 205</member>
<member>Forerunner 301</member>
<member>Forerunner 305</member>
<member>GPSMAP 496</member>
<member>GPSMAP 60C</member>
<member>GPSMAP 60CS</member>
-<member>GPSMAP 60CSX</member>
-<member>GPSMAP 60CX</member>
+<member>GPSMAP 60CSx</member>
+<member>GPSMAP 60Cx</member>
<member>GPSMAP 76C</member>
<member>GPSMAP 76CS</member>
<member>GPSMAP 76CSX</member>
-<member>GPSMAP 76CX</member>
+<member>GPSMAP 76Cx</member>
<member>GPSMAP 96</member>
<member>GPSMAP 96C</member>
-<member>Nuvi 300<footnote id="gpx"><para>This unit uses GPX format, not Garmin protocol. Therefore one should communicate with it by reading and writing GPX files instead of using this format. Members of this class of products do not support realtime positioning protocol.</para></footnote></member>
-<member>Nuvi 310<footnoteref linkend="gpx"/></member>
-<member>Nuvi 350<footnoteref linkend="gpx"/></member>
-<member>Nuvi 370<footnoteref linkend="gpx"/></member>
-<member>Nuvi 660<footnoteref linkend="gpx"/></member>
-<member>Nuvi 670<footnoteref linkend="gpx"/></member>
-<member>Nuvi 680<footnoteref linkend="gpx"/></member>
<member>Quest</member>
<member>Quest II</member>
+<member>Rhino 520</member>
+<member>Rhino 530</member>
+<member>Rhino 520 HCx</member>
+<member>Rhino 530 HCx</member>
<member>StreetPilot 2610</member>
<member>StreetPilot 2620</member>
<member>StreetPilot 2650</member>
<member>StreetPilot c320</member>
<member>StreetPilot c330</member>
<member>StreetPilot c340</member>
-<member>StreetPilot c510<footnoteref linkend="gpx"/></member>
-<member>StreetPilot c530<footnoteref linkend="gpx"/></member>
-<member>StreetPilot c550<footnoteref linkend="gpx"/></member>
-<member>StreetPilot c580<footnoteref linkend="gpx"/></member>
<member>StreetPilot i2</member>
<member>StreetPilot i3</member>
<member>StreetPilot i5</member>
-<member>Zumo 450<footnoteref linkend="gpx"/></member>
-<member>Zumo 550<footnoteref linkend="gpx"/></member>
</simplelist>
</para>
<para>the following Bluetooth Garmin products:
</simplelist>
</para>
+
<para>and most serial Garmin GPS receivers including:
<simplelist columns="4">
<member>eMap</member>
<member>eTrex Summit</member>
<member>eTrex Venture</member>
<member>eTrex Vista</member>
-<member>eTrex Yellow</member>
+<member>eTrex (Basic Yellow)</member>
+<member>eTrex H</member>
<member>Forerunner 201</member>
<member>Foretrex 201</member>
<member>Geko 201</member>
<member>GPS II </member>
<member>GPS II+ </member>
<member>GPS V</member>
+<member>Rhino 110</member>
+<member>Rhino 120</member>
+<member>Rhino 130</member>
<member>StreetPilot III</member>
<member>StreetPilot III+</member>
</simplelist>
</para>
+<para>
+The following Garmin GPS receivers are supported, but they do not
+support Garmin communication protocol and don't work with the
+<option>garmin</option> option. To use these receivers, read or write
+GPX files from the mass storage device as mounted on your computer.
+<simplelist columns="4">
+<member>Nuvi 200<footnoteref linkend="gpx"/></member>
+<member>Nuvi 200W<footnoteref linkend="gpx"/></member>
+<member>Nuvi 250<footnoteref linkend="gpx"/></member>
+<member>Nuvi 250W<footnoteref linkend="gpx"/></member>
+<member>Nuvi 270<footnoteref linkend="gpx"/></member>
+<member>Nuvi 300<footnote id="gpx"><para>This unit uses GPX format, not Garmin protocol. Therefore one should communicate with it by reading and writing GPX files instead of using this format. Members of this class of products do not support realtime positioning protocol.</para></footnote></member>
+<member>Nuvi 310<footnoteref linkend="gpx"/></member>
+<member>Nuvi 350<footnoteref linkend="gpx"/></member>
+<member>Nuvi 370<footnoteref linkend="gpx"/></member>
+<member>Nuvi 600<footnoteref linkend="gpx"/></member>
+<member>Nuvi 650<footnoteref linkend="gpx"/></member>
+<member>Nuvi 650FM<footnoteref linkend="gpx"/></member>
+<member>Nuvi 660<footnoteref linkend="gpx"/></member>
+<member>Nuvi 670<footnoteref linkend="gpx"/></member>
+<member>Nuvi 680<footnoteref linkend="gpx"/></member>
+<member>StreetPilot c510<footnoteref linkend="gpx"/></member>
+<member>StreetPilot c530<footnoteref linkend="gpx"/></member>
+<member>StreetPilot c550<footnoteref linkend="gpx"/></member>
+<member>StreetPilot c580<footnoteref linkend="gpx"/></member>
+<member>Zumo 450<footnoteref linkend="gpx"/></member>
+<member>Zumo 500<footnoteref linkend="gpx"/></member>
+<member>Zumo 550<footnoteref linkend="gpx"/></member>
+</simplelist>
+</para>
+
<para>
None of the GPSBabel developers has access to every model on that
list, but we've received reports of success and/or have reasonable
--- /dev/null
+<para>
+ The format garmin_gpi supports binary POI (.gpi) files useable
+ on newer Garmin GPS receivers (see also <link linkend="fmt_garmin_poi">garmin_poi</link> for some hints).
+ <ulink url="http://www.garmin.com/support/agree.jsp?id=927">Garmin POI-Loader</ulink> is the standard application that creates GPI's
+ with all possible features.
+</para>
+<para>
+ The layout of GPI files isn't documented and our module was created
+ via reverse engeneering. If you get a problem on reading or writing
+ a GPI file, please provide that file (mailto:gpsbabel-misc@lists.sourceforge.net).
+</para>
+<para>
+ At this time we don't support special features as "Tour-Guide", alerts or links
+ to sounds and pictures.
+</para>
+<para>
+ This module does not support direct transfer of .GPI files to
+ receivers in Garmin protocol mode. For units like Nuvi, Zumo, or
+ Streetpilot, just choose a file that's on the drive where your
+ GPS is mounted. For units like the X series (GPSMap60, etc.)
+ you must explictly put the unit in mass storage mode or mount
+ the memory chip in an external reader and transfer the file
+ directly.
+</para>
+<example id="all_garmin_gpi_options">
+ <title>Command showing garmin_gpi output example</title>
+ <para>
+ <userinput>
+ gpsbabel -i gpx -f "My Points.gpx" -o garmin_gpi,category="Nice Restaurants",bitmap=restaurant.bmp,notes -F "My Points.gpi"
+ </userinput>
+ </para>
+</example>
--- /dev/null
+<para>
+ Binary track logs used by the <productname>Geogrid</productname>-Viewer, a very
+ popular product in Germany.
+</para>
+<para>
+ GPSBabel has full support for version 1.0 of this file format.
+</para>
+<para>
+ We can also read some GPS data (including coordinates) from version 2.5. But
+ it seems, that this newer version doesn't more store time stamps. This can be
+ a problem when converting to other formats or if you want to use our track filter.
+</para>
The <ulink url="http://www.lowrance.com">Lowrance iFinder GPS</ulink> series has the unique capability
to output its data to an MMC card. The data is saved to the card as a
.USR file and can be read by your computer using a card reader.
-Waypoints, routes, tracks are supported. By default, Event marker
-icons are converted to waypoints. Symbols tend to get lost in the
-translation.
+Waypoints, icons, routes, tracks are supported. Event marker icons contain a symbol, name, latitude and longitude
+only. By default, Event marker
+icons are converted to waypoints on read. On write, you are able to create icons from waypoints.
</para>
--- /dev/null
+<para>
+If your original waypoint data contains URLs, GPSBabel will include them as
+links in the generated drawing file. This causes the waypoint symbol to have
+a blue border, and it causes the waypoint text to be drawn in blue with an
+underline.
+</para>
+<para>
+If you do not want this behavior, specify the "nourl" option on the command
+line:
+</para>
+<para><userinput>gpsbabel -i gpx -f 12345.gpx -o an1,nourl -F 12345.an1</userinput></para>
+
--- /dev/null
+<para>
+ The bitmap (BMP) should be 24x24 (or smaller) and can be in
+ RGB-colors (24- and 32-bit) or 8-bit indexed color format.
+</para>
+<para>
+ A color value of 0xFF00FF (blue=255, green=0, red=255),
+ also called "Magenta", can be used for transparent areas.
+</para>
+<para>
+ <userinput>
+ gpsbabel -i gpx -f "My Points.gpx" -o garmin_gpi,bitmap="tux.bmp" -F "My Points.gpi"
+ </userinput>
+</para>
--- /dev/null
+<para>
+ With this option you can specify the category which is primary
+ visible on the device (default is "My points").
+</para>
+<para>
+ <userinput>
+ gpsbabel -i gpx -f "My Points.gpx" -o garmin_gpi,category="Best Restaurants" -F "My Points.gpi"
+ </userinput>
+</para>
--- /dev/null
+<para>
+ The GPI address field is often visible in lists on the device. Use this
+ option if you want to see the waypoint description (which can be an address too)
+ in this lists.
+</para>
+<para>
+ <userinput>
+ gpsbabel -i gpx -f "My Points.gpx" -o garmin_gpi,descr -F "My Points.gpi"
+ </userinput>
+</para>
--- /dev/null
+<para>
+ For a large list of points (or whyever) it can be useful when
+ no bitmaps are displayed on device. With this option no bitmap
+ is stored and displayed.
+</para>
+<para>
+ <userinput>
+ gpsbabel -i gpx -f "My Points.gpx" -o garmin_gpi,hide -F "My Points.gpi"
+ </userinput>
+</para>
--- /dev/null
+<para>
+ The GPI address field is often visible in lists on the device. Use this
+ option if you want to see the waypoint notes (which can be an address too)
+ in this lists.
+</para>
+<para>
+ <userinput>
+ gpsbabel -i gpx -f "My Points.gpx" -o garmin_gpi,notes -F "My Points.gpi"
+ </userinput>
+</para>
+
--- /dev/null
+<para>
+ The GPI address field is often visible in lists on the device. Use this
+ option if you want to see the waypoint position (coordinates) in this lists.
+</para>
+<para>
+ <userinput>
+ gpsbabel -i gpx -f "My Points.gpx" -o garmin_gpi,position -F "My Points.gpi"
+ </userinput>
+</para>
</row>
<row>
<entry>1</entry>
- <entry>dm</entry>
+ <entry>dmm</entry>
<entry>Lat/Lon hddd°mm.mm</entry>
<entry>N33 56.539 W118 24.471</entry>
</row>
<row>
<entry>2</entry>
- <entry>dm</entry>
+ <entry>dms</entry>
<entry>Lat/Lon hddd°mm'ss.s</entry>
<entry>S25 25 26.8 E28 06 07.3</entry>
</row>
<entry>British National Grid</entry>
<entry>TQ 18919 69392</entry>
</row>
+<row>
+ <entry>4</entry>
+ <entry>utm</entry>
+ <entry>Universal Transverse Mercator</entry>
+ <entry>33 U 318293 5637154</entry>
+</row>
</tbody>
</tgroup>
</table>
--- /dev/null
+<para>
+ If this option is specified, GPSBabel drops all calculated route points,
+ with exception of points with a description (i.e. "Make U-turns until you know where you are.").
+ The priority of this option is higher than of the <option>via</option> option.
+ A value of 1 or y overwrites the <option>via</option> settings.
+</para>
+<example id="gdb_roadbook_option">
+ <title>Using gdb option <option>roadbook</option> to create simple html roadbook</title>
+ <para>
+ <userinput>
+ gpsbabel -i gdb,roadbook -f sample.gdb -x nuketypes,waypoints,tracks -x transform,wpt=rte -o html -F roadbook.html
+ </userinput>
+ </para>
+ <para>
+ Because gdb creates internal a route AND a waypoint list, you have to drop all
+ waypoints and transform the route into waypoints. So you'll get a well ordered
+ html output. We sugess these steps for all waypoint-only formats as html.
+ </para>
+</example>
<para>
This option specifies the data format version for the output file. Version
-2 is the default. Currently, the only other valid value for this option is
-1.
+2 is the default. Currently, the only other valid values for this option are
+1 and 3.
</para>
<para>
-This option breaks track segments into separate tracks when reading a .USR
+(USR input) Break track segments into separate tracks.
file.
</para>
<para>
-This option instructs GPSBabel to not convert icons to waypoints on input.
+This option instructs GPSBabel to not convert icons to waypoints on input,
+but to instead disregard them altogether
</para>
<para>
-This option merges all tracks into a single track with multiple segments.
+(USR output) This option merges all tracks into a single track with multiple segments.
</para>
--- /dev/null
+<para>
+(USR output) This option converts the waypoint information to an event marker icon.
+</para>
--- /dev/null
+<para>
+ When writing NMEA realtime positioning data, append to the
+ output file instead of truncating it on each successive position
+ fix.
+</para>
--- /dev/null
+<para>
+ In normal case GPSBabel creates for each track a separate file (track.plt, track-1.plt, ...).
+ With this option all tracks will be written into one file. A '1' in the third field of the
+ trackpoint record signals the beginning of a new track.
+</para>
+<para>
+ <userinput>
+ gpsbabel -i gpx -f tracks.gpx -o ozi,pack -F track
+ </userinput>
+</para>
--- /dev/null
+<para>
+ With this option you can specify the name of the folder
+ where the waypoints are placed.
+</para>
+<para>
+ This name is also limited to 16 characters.
+</para>
--- /dev/null
+<para>
+ Splits output into separate files for each waypoint by appending a
+ decimal number to the output filename.
+</para>
+<example id="text_splitoutput">
+ <title>Example for splitoutput option to text format</title>
+ <para>
+ If "MyPQ.gpx" contains five waypoints,
+ <userinput>
+ gpsbabel -i gpx -f MyPocketQuery -o text,split -F blah
+ </userinput>
+ will result in files named blah1 ... blah5, each containing info
+ from one of those waypoints.
+ </para>
+</example>
--- /dev/null
+<para>
+ This option specifies the datum to be used on output. Valid values for this
+ option are listed in <xref linkend="Datums" />.
+</para>
--- /dev/null
+<para>
+ This value specifies the grid to be used on write. It is similar to
+ the grid option of garmin_txt (see <xref linkend="garmin_grid" />). The only difference is that unicsv does not
+ write a degree sign (°) into the output file.
+</para>
+<para>
+ Without this option unicsv writes the coordinates as simple numbers like in the samples above.
+</para>
--- /dev/null
+<para>
+ With this format you can read and write <ulink url="http://www.tomtom.com">TomTom</ulink>
+ Points of Interest - POI (ascii) files.
+ It is a simple text (csv) format with only latitude, longitude and a short name.
+</para>
--- /dev/null
+<para>
+ tomtom_itn can be used to read and write <ulink url="http://www.tomtom.com">TomTom</ulink> Navigator Itineraries (Routes).
+</para>
-
-
-
- <para>
- Unicsv examines the first line of a file to determine the field
- order and field separator in that file. It is thus read-only format.
- </para>
- <para>
- If the first line contains any tabs, the data lines are assumed
- to be tab separated. Otherwise the fields are assumed to be
- separated by commas.
- </para>
- <para>
- The list of keywords include "lat", "lon", "desc", "name",
- "notes", "alt", "utm z", "utm n", "utm e", "utm c" and "url".
- Fuller spellings (i.e. "longitude") may be used.
- </para>
- <para>
- A typical file may be:
- <screen format="linespecific">
- Name, Latitude, Longitude, Description
- GCEBB,35.972033,-87.134700,Mountain Bike Heaven by susy1313
- GC1A37,36.090683,-86.679550,The Troll by a182pilot & Family
- </screen>
- </para>
+<para>
+ Unicsv examines the first line of a file to determine the field
+ order and field separator in that file. It is thus read-only format.
+</para>
+<para>
+ If the first line contains any tabs, the data lines are assumed
+ to be tab separated. Otherwise the fields are assumed to be
+ separated by commas.
+</para>
+<para>
+ The list of keywords include:
+ <screen format="linespecific">
+ alt = Altitude
+ bng_e = British National Grid's easting
+ bng = full coordinate in BNG format (zone easting northing)
+ bng_pos = full coordinate in BNG format (zone easting northing)
+ bng_n = British National Grid's northing
+ bng_z = British National Grid's zone
+ caden = Cadence
+ comment = Notes
+ cour = Heading / Course true
+ date = Date (yyyy/mm/dd)
+ depth = Depth
+ desc = Description
+ ele = Altitude (elevation)
+ fix = 3d, 2d, etc.
+ geschw = Geschwindigkeit (speed)
+ hdop = Horizontal precision
+ head = Heading / Course true
+ heart = Heartrate
+ icon = Symbol (icon) name
+ lat = Latitude
+ lon = Longitude
+ name = Waypoint name ("Shortname")
+ notes = Notes
+ pdop = Precision summary (horizontal & vertical)
+ prox = Proximity
+ sat = Number of sats used for fix
+ speed = Speed
+ symb = Symbol (icon) name
+ tempf = Temperature (degrees Fahrenheit)
+ temp = Temperature (degrees Celsius)
+ time = Time (hh:mm:ss[.msec])
+ url = URL
+ utc_d = UTC date
+ utc_t = UTC time
+ utm_c = UTM zone character
+ utm_e = UTM easting
+ utm = full coordinate in UTM format (zone zone-ch easting northing)
+ utm_pos = full coordinate in UTM format (zone zone-ch easting northing)
+ utm_n = UTM northing
+ utm_z = UTM zone
+ vdop = Vertical precision
+ x = Longitude
+ x_pos = Longitude
+ y = Latitude
+ y_pos = Latitude
+ z = Altitude (elevation)
+ </screen>
+ We support some enhanced Garmin attributes. They are also available in
+ <link linkend="fmt_gpx">gpx</link>, <link linkend="fmt_gdb">gdb</link>,
+ <link linkend="fmt_garmin_gpi">garmin_gpi</link> and partly
+ <link linkend="fmt_garmin_txt">garmin_txt</link>. These entities are currently
+ not visible in <productname>MapSource</productname> (6.12.4), but are NOT dropped
+ when working with GDB (version 3) or GPX files.
+ <screen></screen>
+ Please note, that these do NOT provide a geocoding service; don't expect
+ to "convert" a street address to a latitude and longitude.
+ <screen>
+ addr = Street address
+ city = City
+ country = Country
+ faci = Facility (not available in GPX)
+ phone = Phone number
+ post = Postal code
+ state = State
+ </screen>
+ Fuller spellings (i.e. "longitude") may be used. You can also
+ use keywords with a whitespace instead of an underscore.
+</para>
+<para>
+ A typical file may be:
+ <screen format="linespecific">
+ Name, Latitude, Longitude, Description
+ GCEBB,35.972033,-87.134700,Mountain Bike Heaven by susy1313
+ GC1A37,36.090683,-86.679550,The Troll by a182pilot & Family
+ </screen>
+</para>
+<para>
+ On the output side unicsv writes fixed number of columns (waypoint index, latitude and longitude)
+ followed by a variable column list depending on internal data.
+</para>
+<para>
+ With at least ONE valid timestamp in data a unicsv output may look like that:
+ <screen format="linespecific">
+ No,Name,Latitude,Longitude,Description,Date,Time
+ 1,"GCEBB",35.972033,-87.134700,"Mountain Bike Heaven by susy1313",2003/06/29,09:00:00
+ 2,"GC1A37",36.090683,-86.679550,"The Troll by a182pilot & Family",,
+ </screen>
+</para>
--- /dev/null
+<para>
+ This format reads the binary (.vtt) track logs recorded by
+ <ulink url="http://vitotechnology.com/en/products/smartmap_nokia_series60.html">
+ <application>VITO SmartMap for Nokia Series 60</application>
+ </ulink> 1.0, a GPS application for smartphones connected to
+ NMEA 0183-compatible Bluetooth GPS receivers. It may work
+ with .vtt files produced by versions of VITO SmartMap
+ for other platforms.
+</para>
+
+<para>
+ This format was reverse engineered from a .vtt file.
+ Currently, the coordinates, altitude, and time are
+ available for each point recorded in a track.
+ The course speed and heading fields have been identified,
+ but the units are not certain and so those fields are ignored.
+ The rest of the entry has not yet been decoded. The format
+ uses little-endian byte ordering. The application displays
+ metric units by default. Time is UTC.
+</para>
+
+<table>
+ <title>track file header (8 bytes)</title>
+ <tgroup cols="2">
+ <thead>
+ <row>
+ <entry>Position</entry>
+ <entry>Field info</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>bytes 0-3</entry>
+ <entry>Probably a version field. Int value is 3 in sample file.</entry>
+ </row>
+ <row>
+ <entry>bytes 4-7</entry>
+ <entry>Number of points in file as int.</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</table>
+
+<table>
+ <title>track point (32 bytes)</title>
+ <tgroup cols="2">
+ <thead>
+ <row>
+ <entry>Position</entry>
+ <entry>Field info</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>bytes 0-3</entry>
+ <entry>Decimal latitude multiplied by 20000000 as int.</entry>
+ </row>
+ <row>
+ <entry>bytes 4-7</entry>
+ <entry>Decimal longitude multiplied by 10000000 as int.</entry>
+ </row>
+ <row>
+ <entry>bytes 8-11</entry>
+ <entry>Altitude in meters as float.</entry>
+ </row>
+ <row>
+ <entry>bytes 12-13</entry>
+ <entry>Year, with century, as int.</entry>
+ </row>
+ <row>
+ <entry>byte 14</entry>
+ <entry>Month, ranging 1-12.</entry>
+ </row>
+ <row>
+ <entry>byte 15</entry>
+ <entry>Day of month, ranging 1-31.</entry>
+ </row>
+ <row>
+ <entry>byte 16</entry>
+ <entry>Hour, ranging 0-23.</entry>
+ </row>
+ <row>
+ <entry>byte 17</entry>
+ <entry>Minute, ranging 0-59.</entry>
+ </row>
+ <row>
+ <entry>bytes 18-21</entry>
+ <entry>Decimal second multiplied by 30000000 as int.</entry>
+ </row>
+ <row>
+ <entry>bytes 22-25</entry>
+ <entry>
+ Probably speed in meters per second as float.
+ Ranges 0-~3 in file, seems reasonable since sample
+ file was acquired on foot.
+ </entry>
+ </row>
+ <row>
+ <entry>bytes 26-27</entry>
+ <entry>
+ Probably decimal heading multiplied by something.
+ Ranges between min and max values possible when
+ decoded as integer. Doesn't change when speed field is 0.
+ Doesn't change smoothly, jumps around a bit.
+ </entry>
+ </row>
+ <row>
+ <entry>bytes 28-31</entry>
+ <entry>
+ Status field of some kind. Changes only twice in file.
+ May contain satellite count or PDOP info, as both are
+ reported by the application's GUI.
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</table>
--- /dev/null
+<para>File protocol for the <productname>Wintec WBT-201 / G-Rays 2</productname>
+GPS data logger. This format reads the binary file format created
+by Wintec's Time Machine X application.</para>
+<para>
+<ulink url="http://www.semsons.com/wiwbmu3gpsre2.html">Wintec WBT-201</ulink>
+</para>
+<example id="wbt-tk1">
+ <title>Command showing conversion of a Wintec binary file to GPX</title>
+ <para><userinput>gpsbabel -w -t -i wbt-tk1 -f tracks.tk1 -o gpx -F out.gpx</userinput></para>
+</example>
+
</para>
<example id="wbt-on-macos">
<title>Command showing WBT-200 download and erase over Bluetooth on Mac OS X</title>
- <para><userinput>gpsbabel -i wbt,erase -f /dev/cu.WBT200-SPPslave-1 -o gpx -F out.gpx</userinput></para>
+ <para><userinput>gpsbabel -t -w -i wbt,erase -f /dev/cu.WBT200-SPPslave-1 -o gpx -F out.gpx</userinput></para>
</example>
<refsect1><title>Description</title>
<para>
-GPSBabel converts waypoints, tracks, and routes from one format to another, whether that format is a common mapping format like Delorme, Streets and Trips, or even a serial upload or download to a GPS unit such as those from Garmin and Magellan. By flattening the Tower of Babel that the authors of various programs for manipulating GPS data have imposed upon us, it returns to us the ability to freely move our own waypoint data between the programs and hardware we choose to use.
-</para><para>
-It contains extensive data manipulation abilities making it a convenient for server-side processing or as the backend for other tools.
+ GPSBabel converts waypoints, tracks, and routes from one format to
+ another. GPSBabel also downloads and uploads waypoints, tracks,
+ and routes to and from a GPS receiver (such as those by Garmin and
+ Magellan) connected by a serial or USB port.
</para>
-</refsect1>
+
+</para>
+ By flattening the Tower of Babel that the authors of various programs
+ for manipulating GPS data have imposed upon us, it returns to us the
+ ability to freely move our own waypoint data between the programs and
+ hardware we choose to use.
+</para>
+
+<para> It contains extensive data
+manipulation abilities making it a convenient for server-side processing
+or as the backend for other tools. </para> </refsect1>
<refsect1><title>Options</title>
<para>
static vmem_t current_tag;
static vmem_t cdatastr;
-static FILE *ifd;
+static gbfile *ifd;
static xg_tag_mapping *xg_tag_tbl;
static const char **xg_ignore_taglist;
{
xg_tag_mapping *tm;
for (tm = xg_tag_tbl; tm->tag_cb != NULL; tm++) {
- if (0 == strcmp(tm->tag_name, tag) && (cb_type == tm->cb_type)) {
+ if (str_match(tag, tm->tag_name) && (cb_type == tm->cb_type)) {
return tm->tag_cb;
}
}
int len;
char buf[MY_CBUF];
- while ((len = fread(buf, 1, sizeof(buf), ifd))) {
- if (!XML_Parse(psr, buf, len, feof(ifd))) {
+ while ((len = gbfread(buf, 1, sizeof(buf), ifd))) {
+ if (!XML_Parse(psr, buf, len, gbfeof(ifd))) {
fatal(MYNAME ":Parse error at %d: %s\n",
(int) XML_GetCurrentLineNumber(psr),
XML_ErrorString(XML_GetErrorCode(psr)));
XML_ParserFree(psr);
}
+void xml_readprefixstring( char *str )
+{
+ int len = strlen(str);
+ if (!XML_Parse(psr, str, len, 0)) {
+ fatal( MYNAME ":Parse error at %d: %s\n",
+ (int) XML_GetCurrentLineNumber(psr),
+ XML_ErrorString(XML_GetErrorCode(psr)));
+ }
+}
+
void xml_ignore_tags(const char **taglist)
{
xg_ignore_taglist = taglist;
xml_init(const char *fname, xg_tag_mapping *tbl, const char *encoding)
{
if (fname) {
- ifd = xfopen(fname, "r", MYNAME);
+ ifd = gbfopen(fname, "r", MYNAME);
+ } else {
+ ifd = NULL;
}
current_tag = vmem_alloc(1,0);
vmem_free(¤t_tag);
vmem_free(&cdatastr);
if (ifd) {
- fclose(ifd);
+ gbfclose(ifd);
ifd = NULL;
}
xg_ignore_taglist = NULL;
const char *tag_name;
} xg_tag_mapping;
+extern char *xhtml_entities;
void write_xml_entity(gbfile *ofd, const char *indent,
const char *tag, const char *value);
void xml_init(const char *fname, xg_tag_mapping *tbl,const char *encoding);
void xml_read(void);
void xml_readstring(char *str);
+void xml_readprefixstring(char *str);
void xml_deinit(void);